diff --git a/services/meetingService.js b/services/meetingService.js index dd1eaca3b219a1adb2e4f630af54a12fff9682d3..bc7b7f784f9027f83f0ae5f777e50384c0a82e1d 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: [