user.controller.ts 2.24 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 { TypedRequest } from "../types";
Kim, MinGyu's avatar
Kim, MinGyu committed
5
6
7
8

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

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

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

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

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

Kim, MinGyu's avatar
Kim, MinGyu committed
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
  if (!Array.isArray(file.picture)) {
    //파일 좁히기 중
    if (!Array.isArray(field.nickname)) {
      const nickname = field.nickname;
      if (!(file.picture === undefined)) {
        const originalfilename = file.picture.originalFilename;
        const newfilename = file.picture.newFilename;
        const picturepath = file.picture.filepath;
        userDb.postPicture(
          userId,
          nickname,
          originalfilename,
          newfilename,
          picturepath
        );
      } else {
        userDb.postPicture(userId, nickname);
Kim, MinGyu's avatar
Kim, MinGyu committed
53
      }
54
    }
Kim, MinGyu's avatar
Kim, MinGyu committed
55
  }
Kim, MinGyu's avatar
Kim, MinGyu committed
56

57
58
  res.json();
});
Kim, MinGyu's avatar
Kim, MinGyu committed
59
60

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

  const { userId } = req.auth;
Kim, MinGyu's avatar
Kim, MinGyu committed
64
65
66
  const finish = await userDb.deleteUser(userId);
  if (finish?.deletedCount === 1) {
    res.json(true);
Kim, MinGyu's avatar
Kim, MinGyu committed
67
68
  } else {
    res.status(422).send("삭제에 실패하였습니다.");
Kim, MinGyu's avatar
Kim, MinGyu committed
69
  }
Kim, MinGyu's avatar
Kim, MinGyu committed
70
});