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