import { userDb } from "../db"; import { asyncWrap } from "../helpers/asyncWrap"; import { Request } from "express"; import formidable from "formidable"; import { ObjectId } from "mongoose"; import fs from "fs"; import { TypedRequest } from "../types"; export interface TypedRequestAuth extends Request { auth: T; } export const getUsers = asyncWrap(async (req, res) => { const users = await userDb.getUsers(); return res.json(users); }); export const createUser = asyncWrap(async (req, res) => { const user = req.body; console.log("user body", user); const newUser = await userDb.createUser(user); return res.json(newUser); }); export const getProfile = asyncWrap(async (reqExp, res) => { const req = reqExp as TypedRequestAuth<{ userId: string }>; // 앞에서는 토큰으로써 사용하기 때문에 JwtPayload 를 사용하고 여기서는 verify 에서 토큰을 디코딩했기에 ObjectId 타입의 string으로 바뀌게 된다. const { userId } = req.auth; const profile = await userDb.getProfile(userId); res.json(profile); }); export const updateProfile = asyncWrap(async (reqExp, res) => { const req = reqExp as TypedRequest; const { userId } = req.auth; const { name } = req.body; const { avatar }: { avatar: formidable.File } = req.files; const user = await userDb.updateProfile(userId, name, avatar); // if (!Array.isArray(file.avatar)) { // //파일 좁히기 중 // if (!Array.isArray(field.nickname)) { // const nickname = field.nickname; // if (!(file.avatar === undefined)) { // const originalfilename = file.avatar.originalFilename; // const newfilename = file.avatar.newFilename; // const picturepath = file.avatar.filepath; // userDb.updateProfile( // userId, // nickname, // originalfilename, // newfilename, // picturepath // ); // } else { // userDb.updateProfile(userId, nickname); // } // } // } res.json(user); }); export const deleteUser = asyncWrap(async (reqExp, res) => { const req = reqExp as TypedRequestAuth<{ userId: string }>; // 앞에서는 토큰으로써 사용하기 때문에 JwtPayload 를 사용하고 여기서는 verify 에서 토큰을 디코딩했기에 ObjectId 타입의 string으로 바뀌게 된다. const { userId } = req.auth; const finish = await userDb.deleteUser(userId); if (finish?.deletedCount === 1) { res.json(true); } else { res.status(422).send("삭제에 실패하였습니다."); } });