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