survey.controller.ts 1.98 KB
Newer Older
Jiwon Yoon's avatar
Jiwon Yoon committed
1
import { NextFunction, Request, Response } from "express";
Jiwon Yoon's avatar
Jiwon Yoon committed
2
3
4
import { surveyDb } from "../db";
import { asyncWrap } from "../helpers/asyncWrap";

Jiwon Yoon's avatar
Jiwon Yoon committed
5
6
7
8
9
10
export interface TypedRequestAuth<T> extends Request {
  auth: T;
  user: any;
}

export const createSurvey = asyncWrap(
11
  async (reqExp: Request, res: Response) => {
Jiwon Yoon's avatar
Jiwon Yoon committed
12
13
14
15
16
17
18
19
20
21
22
23
    const req = reqExp as TypedRequestAuth<{ userId: string }>;
    const { userId } = req.auth;
    let survey = req.body;
    survey.user = userId;
    console.log("survey body", survey);
    const newSurvey = await surveyDb.createSurvey(survey);
    return res.json(newSurvey);
  }
);

export const getSurveyById = asyncWrap(async (req, res) => {
  const { surveyId } = req.params;
24
  const survey: any = await surveyDb.getSurveyById(surveyId);
Jiwon Yoon's avatar
Jiwon Yoon committed
25
26
27
28
  console.log("Get완료", survey);
  return res.json(survey);
});

29
30
31
32
export const getSurveys = asyncWrap(async (reqExp: Request, res: Response) => {
  const req = reqExp as TypedRequestAuth<{ userId: string }>;
  const { userId } = req.auth;
  const surveys = await surveyDb.getSurveys(userId);
33
34
35
  return res.json(surveys);
});

Jiwon Yoon's avatar
Jiwon Yoon committed
36
export const updateSurvey = asyncWrap(async (req, res) => {
Jiwon Yoon's avatar
Jiwon Yoon committed
37
  const survey = req.body;
Jiwon Yoon's avatar
Jiwon Yoon committed
38
  const newSurvey = await surveyDb.updateSurvey(survey);
Jiwon Yoon's avatar
Jiwon Yoon committed
39
40
  return res.json(newSurvey);
});
Jiwon Yoon's avatar
Jiwon Yoon committed
41

42
43
44
45
46
47
export const deleteSurvey = asyncWrap(async (req, res) => {
  const { surveyId } = req.params;
  const survey = await surveyDb.deleteSurvey(surveyId);
  return res.json(survey);
});

Jiwon Yoon's avatar
Jiwon Yoon committed
48
49
50
51
52
53
54
55
56
57
export const userBySurveyId = async (
  reqExp: Request,
  res: Response,
  next: NextFunction,
  surveyId: string
) => {
  try {
    const req = reqExp as TypedRequestAuth<{ userId: string }>;
    let user = await surveyDb.findUserBySurveyId(surveyId);
    if (!user) {
58
59
60
61
      return res.status(404).send("올바른 접근이 아닙니다.");
    } else {
      req.user = user;
      next();
Jiwon Yoon's avatar
Jiwon Yoon committed
62
63
64
65
66
67
68
69
70
    }
  } catch (error: any) {
    return res
      .status(500)
      .send(
        error.message || "설문조사를 작성한 사용자를 찾아내는 중 오류 발생"
      );
  }
};