import { NextFunction, Request, Response } from "express"; import { questionDb, surveyDb } from "../db"; import { asyncWrap } from "../helpers/asyncWrap"; export interface TypedRequestAuth extends Request { auth: T; user: any; } export const createQuestion = asyncWrap( async (reqExp: Request, res: Response, next: NextFunction) => { try { const req = reqExp as TypedRequestAuth<{ userId: string }>; const { userId } = req.auth; if (!userId) { return res.status(404).send("올바른 접근이 아닙니다"); } else { let question = req.body; question.user = userId; const newQuestion = await questionDb.createQuestion(question); const { surveyId } = req.params; const updatedSurvey = await surveyDb.putNewQuestion( newQuestion, surveyId ); console.log(updatedSurvey); // return res.json(updatedSurvey?.questions); return res.json(newQuestion); } } catch (error: any) { return res .status(500) .send(error.message || "질문을 생성하는 중 오류 발생"); } } ); export const updateQuestion = asyncWrap(async (req, res) => { const question = req.body; const newQuestion = await questionDb.updateQuestion(question); return res.json(newQuestion); }); export const deleteQuestionById = asyncWrap(async (req, res) => { const { questionId } = req.params; const newQuestion = await questionDb.deleteQuestionById(questionId); return res.json(newQuestion); }); export const userByQuestionId = async ( reqExp: Request, res: Response, next: NextFunction, questionId: string ) => { try { const req = reqExp as TypedRequestAuth<{ userId: string }>; let user = await questionDb.findUserByQuestionId(questionId); if (!user) { return res.status(404).send("올바른 접근이 아닙니다"); } else { req.user = user; next(); } } catch (error: any) { return res .status(500) .send(error.message || "질문을 작성한 사용자를 찾아내는 중 오류 발생"); } };