Skip to content

Commit

Permalink
Fix: feedback
Browse files Browse the repository at this point in the history
  • Loading branch information
thxx132 committed Feb 18, 2025
1 parent 679ae5c commit c998dd1
Show file tree
Hide file tree
Showing 5 changed files with 49 additions and 38 deletions.
1 change: 1 addition & 0 deletions src/lottery/modules/stores/mongo.js
Original file line number Diff line number Diff line change
Expand Up @@ -174,6 +174,7 @@ const quizSchema = Schema({
title: { type: String, required: true },
content: { type: String, required: true },
image: { type: String, required: true },
// A와 B는 최종 답안, C와 D는 인원 수에 따라 dailyQuiz.ts 에서 A와 B로 결정됩니다.
answer: { type: String, enum: ["A", "B", "C", "D"], default: "C" },
countA: { type: Number, default: 0 },
countB: { type: Number, default: 0 },
Expand Down
8 changes: 3 additions & 5 deletions src/lottery/routes/docs/schemas/quizzesSchema.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import { z } from "zod";
import { zodToSchemaObject } from "../../../../routes/docs/utils";

// 날짜 및 답안 형식 검증용 Zod 객체
export const quizzesZod = {
Expand All @@ -12,9 +13,6 @@ export const quizzesZod = {
}),
};

export const quizzesSchema = {
getQuizByDateParams: quizzesZod.getQuizByDateParams,
submitAnswerBody: quizzesZod.submitAnswerBody,
};
const quizzesSchema = zodToSchemaObject(quizzesZod);

export default quizzesSchema;
module.exports = { quizzesZod, quizzesSchema };
6 changes: 3 additions & 3 deletions src/lottery/routes/quizzes.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ import {
getTodayAnswerHandler,
getAllAnswersHandler,
} from "../services/quizzes";
import quizzesSchema from "./docs/schemas/quizzesSchema";
import { quizzesZod } from "./docs/schemas/quizzesSchema";
import { validateParams, validateBody } from "../../middlewares/zod";
import authMiddleware from "../../middlewares/auth";

Expand All @@ -25,14 +25,14 @@ router.get("/answers", authMiddleware, getAllAnswersHandler);
// Get quiz by date
router.get(
"/:date",
validateParams(quizzesSchema.getQuizByDateParams),
validateParams(quizzesZod.getQuizByDateParams),
getQuizByDateHandler
);

// Submit quiz answer
router.post(
"/submit",
validateBody(quizzesSchema.submitAnswerBody),
validateBody(quizzesZod.submitAnswerBody),
authMiddleware,
submitAnswerHandler
);
Expand Down
50 changes: 26 additions & 24 deletions src/lottery/schedules/dailyQuiz.ts
Original file line number Diff line number Diff line change
@@ -1,21 +1,21 @@
import { quizModel } from "../modules/stores/mongo";
import logger from "@/modules/logger";
const { completeAnswerCorrectlyQuest } = require("../modules/contracts");
import { completeAnswerCorrectlyQuest } from "../modules/contracts";

const determineQuizResult = async () => {
try {
const yesterdayMidnight = new Date();
yesterdayMidnight.setHours(0, 0, 0, 0);
yesterdayMidnight.setDate(yesterdayMidnight.getDate() - 1);
yesterdayMidnight.setDate(yesterdayMidnight.getDate() + 1);

const todayMidnight = new Date();
todayMidnight.setHours(0, 0, 0, 0);

// 어제의 퀴즈 조회
const quiz = await quizModel.findOne({
quizDate: {
$gte: yesterdayMidnight,
$lt: todayMidnight,
$lt: yesterdayMidnight,
$gte: todayMidnight,
},
});

Expand All @@ -26,39 +26,41 @@ const determineQuizResult = async () => {

let correctAnswer;

if (quiz.answer === "A" || quiz.answer === "B") {
correctAnswer = quiz.answer;
} else {
}
if (quiz.answer === "C") {
// C 타입: 더 많은 사람이 선택한 답이 정답
correctAnswer = quiz.countA >= quiz.countB ? "A" : "B";
} else if (quiz.answer === "D") {
} else {
// D 타입: 더 적은 사람이 선택한 답이 정답
correctAnswer = quiz.countA < quiz.countB ? "A" : "B";
} else {
// A 또는 B가 이미 정해져 있는 경우
correctAnswer = quiz.answer;
}

// A와 B의 선택 수가 동일할 때 draw 처리
if (quiz.countA === quiz.countB) {
quiz.answers.forEach((answer) => {
answer.status = "draw";
});
} else {
// 사용자의 정/오답 처리 & 코인 지급
await Promise.all(
quiz.answers.map(async (answer) => {
if (answer.answer === correctAnswer) {
}

// 사용자의 정/오답 처리 & 코인 지급
await Promise.all(
quiz.answers.map(async (answer) => {
if (answer.answer === correctAnswer || answer.status === "draw") {
if (answer.status !== "draw") {
answer.status = "correct";
// 정답을 맞힌 사용자에게 퀘스트 완료 적용
await completeAnswerCorrectlyQuest(
answer.userId.toString(),
Date.now()
);
} else {
answer.status = "wrong";
}
})
);
}
// 정답을 맞힌 사용자에게 퀘스트 완료 적용
await completeAnswerCorrectlyQuest(
answer.userId.toString(),
Date.now()
);
} else {
answer.status = "wrong";
}
})
);

// 저장
quiz.answer = correctAnswer; // 최종 정답 기록
Expand Down
22 changes: 16 additions & 6 deletions src/lottery/services/quizzes.ts
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ export const getTodayQuizHandler: RequestHandler = async (req, res) => {
.findOne({
quizDate: {
$gte: startOfToday,
$lte: endOfToday,
$lt: endOfToday,
},
})
.lean();
Expand Down Expand Up @@ -46,7 +46,9 @@ export const getTodayQuizHandler: RequestHandler = async (req, res) => {
return res.status(200).json(response);
} catch (error) {
logger.error(error);
res.status(500).json({ error: "Quizzes/today : internal server error" });
return res
.status(500)
.json({ error: "Quizzes/today : internal server error" });
}
};

Expand Down Expand Up @@ -115,7 +117,9 @@ export const getQuizByDateHandler: RequestHandler = async (req, res) => {
return res.status(200).json(response);
} catch (error) {
logger.error(error);
res.status(500).json({ error: "Quizzes/date : internal server error" });
return res
.status(500)
.json({ error: "Quizzes/date : internal server error" });
}
};

Expand Down Expand Up @@ -207,7 +211,9 @@ export const getAllAnswersHandler: RequestHandler = async (req, res) => {
return res.status(200).json(response);
} catch (error) {
logger.error(error);
res.status(500).json({ error: "Quizzes/answers : internal server error" });
return res
.status(500)
.json({ error: "Quizzes/answers : internal server error" });
}
};

Expand Down Expand Up @@ -271,7 +277,9 @@ export const submitAnswerHandler: RequestHandler = async (req, res) => {
});
} catch (error) {
logger.error(error);
res.status(500).json({ error: "Quizzes/submit : internal server error" });
return res
.status(500)
.json({ error: "Quizzes/submit : internal server error" });
}
};

Expand Down Expand Up @@ -324,6 +332,8 @@ export const cancelAnswerHandler: RequestHandler = async (req, res) => {
return res.status(200).json({ message: "Answer canceled successfully" });
} catch (error) {
logger.error(error);
res.status(500).json({ error: "Quizzes/cancel : internal server error" });
return res
.status(500)
.json({ error: "Quizzes/cancel : internal server error" });
}
};

0 comments on commit c998dd1

Please sign in to comment.