user.controller.ts 2.36 KB
Newer Older
Yoon, Daeki's avatar
Yoon, Daeki committed
1
2
import { userDb } from "../db";
import { asyncWrap } from "../helpers/asyncWrap";
Kim, MinGyu's avatar
Kim, MinGyu committed
3
import { Request } from "express";
Kim, MinGyu's avatar
Kim, MinGyu committed
4
import formidable from "formidable";
Kim, MinGyu's avatar
Kim, MinGyu committed
5
import { TypedRequest } from "../types";
Kim, MinGyu's avatar
Kim, MinGyu committed
6
7
8
9

export interface TypedRequestAuth<T> extends Request {
  auth: T;
}
Yoon, Daeki's avatar
Yoon, Daeki committed
10
11
12
13
14
15
16
17
18
19

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);
Yoon, Daeki's avatar
Yoon, Daeki committed
20
  return res.json(newUser);
Yoon, Daeki's avatar
Yoon, Daeki committed
21
});
Kim, MinGyu's avatar
Kim, MinGyu committed
22
23

export const getProfile = asyncWrap(async (reqExp, res) => {
24
  const req = reqExp as TypedRequestAuth<{ userId: string }>; // 앞에서는 토큰으로써 사용하기 때문에 JwtPayload 를 사용하고 여기서는 verify 에서 토큰을 디코딩했기에 ObjectId 타입의 string으로 바뀌게 된다.
Kim, MinGyu's avatar
Kim, MinGyu committed
25

26
  const { userId } = req.auth;
Kim, MinGyu's avatar
Kim, MinGyu committed
27
  const profile = await userDb.getProfile(userId);
28
29
30
31
  res.json(profile);
});

export const postPicture = asyncWrap(async (reqExp, res) => {
Kim, MinGyu's avatar
Kim, MinGyu committed
32
  const req = reqExp as TypedRequest;
33
34
35
  const { userId } = req.auth;

  const form = formidable({
Kim, MinGyu's avatar
Kim, MinGyu committed
36
    uploadDir: "uploads",
37
38
39
40
41
42
43
    keepExtensions: true,
    multiples: false,
  });

  form.parse(req, (err, fields, files) => {
    if (!Array.isArray(files.picture)) {
      //파일 좁히기 중
Kim, MinGyu's avatar
Kim, MinGyu committed
44
      if (!Array.isArray(fields.nickname)) {
Kim, MinGyu's avatar
Kim, MinGyu committed
45
        const nickname = fields.nickname;
Kim, MinGyu's avatar
Kim, MinGyu committed
46
47
48
49
50
51
52
53
54
55
56
57
58
59
        if (!(files.picture === undefined)) {
          const originalfilename = files.picture.originalFilename;
          const newfilename = files.picture.newFilename;
          const picturepath = files.picture.filepath;
          userDb.postPicture(
            userId,
            nickname,
            originalfilename,
            newfilename,
            picturepath
          );
        } else {
          userDb.postPicture(userId, nickname);
        }
Kim, MinGyu's avatar
Kim, MinGyu committed
60
      }
61
62
    }
  });
Kim, MinGyu's avatar
Kim, MinGyu committed
63

64
65
  res.json();
});
Kim, MinGyu's avatar
Kim, MinGyu committed
66
67

export const deleteUser = asyncWrap(async (reqExp, res) => {
Kim, MinGyu's avatar
Kim, MinGyu committed
68
  const req = reqExp as TypedRequestAuth<{ userId: string }>; // 앞에서는 토큰으로써 사용하기 때문에 JwtPayload 를 사용하고 여기서는 verify 에서 토큰을 디코딩했기에 ObjectId 타입의 string으로 바뀌게 된다.
Kim, MinGyu's avatar
Kim, MinGyu committed
69
70

  const { userId } = req.auth;
Kim, MinGyu's avatar
Kim, MinGyu committed
71
72
73
74
  const finish = await userDb.deleteUser(userId);
  if (finish?.deletedCount === 1) {
    res.json(true);
  }
Kim, MinGyu's avatar
Kim, MinGyu committed
75
});