Skip to content
Snippets Groups Projects
Commit e24736b7 authored by Wo-ogie's avatar Wo-ogie
Browse files

fix: scheduled job에서 에러가 발생할 경우 서버가 종료되는 문제 수정

parent 1b1d5b20
No related branches found
No related tags found
No related merge requests found
...@@ -8,11 +8,12 @@ const { ...@@ -8,11 +8,12 @@ const {
getMeetingWithParticipantsById, getMeetingWithParticipantsById,
getMeetingWithParticipantsAndSchedulesById, getMeetingWithParticipantsAndSchedulesById,
getNumOfParticipantsByMeetingId, getNumOfParticipantsByMeetingId,
closeMeetingById, setMeetingClosedAndSendVoteEndEmail,
} = require('../services/meeting'); } = require('../services/meeting');
const { const {
createPasswordNotMatchedError, createPasswordNotMatchedError,
createPasswordIsNullError, createPasswordIsNullError,
createMeetingIsAlreadyClosedError,
} = require('../errors/meetingErrors'); } = require('../errors/meetingErrors');
const MeetingResponse = require('../dto/response/meetingResponse'); const MeetingResponse = require('../dto/response/meetingResponse');
const MeetingWithParticipantsResponse = require('../dto/response/meetingWithParticipantsResponse'); const MeetingWithParticipantsResponse = require('../dto/response/meetingWithParticipantsResponse');
...@@ -84,7 +85,7 @@ exports.createMeeting = async (req, res, next) => { ...@@ -84,7 +85,7 @@ exports.createMeeting = async (req, res, next) => {
}); });
schedule.scheduleJob(meeting.voteExpiresAt, async () => { schedule.scheduleJob(meeting.voteExpiresAt, async () => {
await closeMeetingById(meeting.id); await setMeetingClosedAndSendVoteEndEmail(meeting.id);
}); });
return res.status(201).json(MeetingResponse.from(meeting)); return res.status(201).json(MeetingResponse.from(meeting));
...@@ -163,6 +164,12 @@ exports.getTopThreeConfirmedTimes = async (req, res, next) => { ...@@ -163,6 +164,12 @@ exports.getTopThreeConfirmedTimes = async (req, res, next) => {
} }
}; };
function validateMeetingIsNotClosed(meeting) {
if (meeting.isClosed === true) {
throw createMeetingIsAlreadyClosedError();
}
}
exports.closeMeeting = async (req, res, next) => { exports.closeMeeting = async (req, res, next) => {
try { try {
// TODO: query 최적화 필요 // TODO: query 최적화 필요
...@@ -173,8 +180,9 @@ exports.closeMeeting = async (req, res, next) => { ...@@ -173,8 +180,9 @@ exports.closeMeeting = async (req, res, next) => {
req.body.adminPassword, req.body.adminPassword,
meeting.adminPassword, meeting.adminPassword,
); );
validateMeetingIsNotClosed(meeting);
await closeMeetingById(meetingId); await setMeetingClosedAndSendVoteEndEmail(meetingId);
meeting = await getMeetingWithParticipantsById(meetingId); meeting = await getMeetingWithParticipantsById(meetingId);
return res.json(MeetingResponse.from(meeting)); return res.json(MeetingResponse.from(meeting));
......
const { scheduleJob } = require('node-schedule'); const { scheduleJob } = require('node-schedule');
const { Op } = require('sequelize'); const { Op } = require('sequelize');
const { Meeting } = require('../models'); const { Meeting } = require('../models');
const { closeMeetingById } = require('../services/meeting'); const { setMeetingClosedAndSendVoteEndEmail } = require('../services/meeting');
module.exports = async () => { module.exports = async () => {
console.log( console.log(
...@@ -18,7 +18,7 @@ module.exports = async () => { ...@@ -18,7 +18,7 @@ module.exports = async () => {
}); });
meetings.forEach((meeting) => { meetings.forEach((meeting) => {
scheduleJob(meeting.voteExpiresAt, async () => { scheduleJob(meeting.voteExpiresAt, async () => {
await closeMeetingById(meeting.id); await setMeetingClosedAndSendVoteEndEmail(meeting.id);
}); });
}); });
} catch (error) { } catch (error) {
......
...@@ -57,15 +57,12 @@ const getNumOfParticipantsByMeetingId = async (meetingId) => ...@@ -57,15 +57,12 @@ const getNumOfParticipantsByMeetingId = async (meetingId) =>
}, },
}); });
function validateMeetingIsNotClosed(meeting) { const setMeetingClosedAndSendVoteEndEmail = async (meetingId) => {
if (meeting.isClosed === true) {
throw createMeetingIsAlreadyClosedError();
}
}
const closeMeetingById = async (meetingId) => {
const meeting = await getMeetingWithParticipantsById(meetingId); const meeting = await getMeetingWithParticipantsById(meetingId);
validateMeetingIsNotClosed(meeting);
if (meeting.isClosed) {
return;
}
meeting.isClosed = true; meeting.isClosed = true;
await meeting.save(); await meeting.save();
...@@ -83,5 +80,5 @@ module.exports = { ...@@ -83,5 +80,5 @@ module.exports = {
getMeetingWithParticipantsById, getMeetingWithParticipantsById,
getMeetingWithParticipantsAndSchedulesById, getMeetingWithParticipantsAndSchedulesById,
getNumOfParticipantsByMeetingId, getNumOfParticipantsByMeetingId,
closeMeetingById, setMeetingClosedAndSendVoteEndEmail,
}; };
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment