From 67c2a54b99797797a446d97193d786c45c9ab4fb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=A1=B0=EB=8C=80=ED=9D=AC?= <joedaehui@ajou.ac.kr> Date: Sun, 8 Dec 2024 20:20:02 +0900 Subject: [PATCH] =?UTF-8?q?bugfix:=20=EB=AF=B8=ED=8C=85=20=EC=A1=B0?= =?UTF-8?q?=ED=9A=8C=20=EC=BD=94=EB=93=9C=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- services/meetingService.js | 80 +++++++++++++------------------------- 1 file changed, 26 insertions(+), 54 deletions(-) diff --git a/services/meetingService.js b/services/meetingService.js index dd1eaca..bc7b7f7 100644 --- a/services/meetingService.js +++ b/services/meetingService.js @@ -322,16 +322,9 @@ class MeetingService { 'time_idx_start', 'time_idx_end', 'location', 'time_idx_deadline', 'type', 'max_num', 'cur_num', - 'created_at' + 'created_at' ], include: [ - { - model: MeetingParticipant, - as: 'participants', - required: false, - where: { user_id: userId }, - attributes: [] - }, { model: User, as: 'creator', @@ -339,14 +332,6 @@ class MeetingService { required: false } ], - where: { - [Op.or]: [ - { created_by: userId }, - { '$participants.meeting_id$': { [Op.col]: 'Meeting.id' } }, - { '$participants.user_id$': userId } - ] - }, - subQuery: false, order: [['created_at', 'DESC']], limit: limit + 1, offset, @@ -356,7 +341,13 @@ class MeetingService { const hasNext = meetings.length > limit; const content = await Promise.all( meetings.slice(0, limit).map(async (meeting) => { - const isParticipant = true; + const isParticipant = await MeetingParticipant.findOne({ + where: { + meeting_id: meeting.id, + user_id: userId + } + }); + const hasConflict = await ScheduleService.checkScheduleOverlapByTime( userId, meeting.time_idx_start, @@ -365,7 +356,7 @@ class MeetingService { return new MeetingResponseDTO( meeting, - isParticipant, + !!isParticipant, hasConflict, meeting.creator?.name || 'Unknown' ); @@ -385,31 +376,26 @@ class MeetingService { try { const meetings = await Meeting.findAll({ attributes: [ - 'id', 'title', 'description', 'time_idx_start', - 'time_idx_end', 'location', 'time_idx_deadline', + 'id', 'title', 'description', + 'time_idx_start', 'time_idx_end', + 'location', 'time_idx_deadline', 'type', 'max_num', 'cur_num', + 'created_at' ], include: [ { model: MeetingParticipant, as: 'participants', - required: false, - attributes: [] + where: { user_id: userId }, + required: true }, { model: User, as: 'creator', - attributes: ['name'] + attributes: ['name'], + required: false } ], - where: { - [Op.or]: [ - { created_by: userId }, - { '$participants.meeting_id$': { [Op.col]: 'Meeting.id' } }, - { '$participants.user_id$': userId } - ] - }, - subQuery: false, order: [['created_at', 'DESC']], limit: limit + 1, offset, @@ -417,29 +403,14 @@ class MeetingService { }); const hasNext = meetings.length > limit; - const content = await Promise.all( - meetings.slice(0, limit).map(async (meeting) => { - const isParticipant = await MeetingParticipant.findOne({ - where: { - meeting_id: meeting.id, - user_id: userId - } - }); - - const hasConflict = await ScheduleService.checkScheduleOverlapByTime( - userId, - meeting.time_idx_start, - meeting.time_idx_end - ); - - return { - ...meeting.toJSON(), - isParticipant: !!isParticipant, - hasConflict, - creatorName: meeting.creator?.name || 'Unknown' - }; - }) - ); + const content = meetings.slice(0, limit).map(meeting => { + return new MeetingResponseDTO( + meeting, + true, // 참여ìžë¡œ 조회했으므로 í•ìƒ true + false, // ì´ë¯¸ 참여 ì¤‘ì¸ ë¯¸íŒ…ì´ë¯€ë¡œ ì¶©ëŒ ì²´í¬ ë¶ˆí•„ìš” + meeting.creator?.name || 'Unknown' + ); + }); return { content, hasNext }; } catch (error) { @@ -447,6 +418,7 @@ class MeetingService { throw new Error('Failed to fetch my meetings'); } } + async getMeetingDetail(meetingId, userId) { const meeting = await Meeting.findByPk(meetingId, { include: [ -- GitLab