From 454bf03649f7f7642a376b5f3672b08b344fcf1b 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: Mon, 25 Nov 2024 20:36:10 +0900 Subject: [PATCH] =?UTF-8?q?fix:=20=EC=A4=91=EB=B3=B5=20=EC=BD=94=EB=93=9C?= =?UTF-8?q?=20=EC=82=AD=EC=A0=9C=20/=20=EA=B3=A0=EC=A0=95=20=EC=8B=9C?= =?UTF-8?q?=EA=B0=84=EB=8C=80=20=EC=84=A4=EC=A0=95=20=EB=B3=80=EA=B2=BD=20?= =?UTF-8?q?(#19)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- services/meetingService.js | 123 +------------------------------------ 1 file changed, 1 insertion(+), 122 deletions(-) diff --git a/services/meetingService.js b/services/meetingService.js index 653b73a..befefae 100644 --- a/services/meetingService.js +++ b/services/meetingService.js @@ -253,7 +253,7 @@ class MeetingService { { userId: userId, title: `번개 모임: ${meeting.title}`, - is_fixed: true, + is_fixed: false, events: events, }, transaction @@ -342,127 +342,6 @@ class MeetingService { await meeting.save(); return meeting; } - - - async joinMeeting(meetingId, userId) { - const meeting = await Meeting.findByPk(meetingId); - console.log(`참여하려는 모임: ${JSON.stringify(meeting)}`); - if (!meeting) { - throw new Error('모임을 찾을 수 없습니다.'); - } - if (meeting.type === 'CLOSE') { - throw new Error('이미 마감된 모임입니다.'); - } - if (meeting.time_idx_deadline !== undefined) { - const currentTimeIdx = this.getCurrentTimeIdx(); // 현재 시간 인덱스 - if (currentTimeIdx >= meeting.time_idx_deadline) { - throw new Error('참가 신청이 마감되었습니다.'); - } - } - const existingParticipant = await MeetingParticipant.findOne({ - where: { meeting_id: meetingId, user_id: userId }, - }); - if (existingParticipant) { - throw new Error('이미 참가한 사용자입니다.'); - } - - // 트랜잭션을 사용하여 참가자 추가 및 스케줄 업데이트를 원자적으로 처리 - await sequelize.transaction(async (transaction) => { - // 스케줄 충돌 확인 - // 현재 인원 수 확인 - if (meeting.cur_num >= meeting.max_num) { - throw new Error("모임 인원이 모두 찼습니다."); - } - - const hasConflict = await ScheduleService.checkScheduleOverlapByTime( - userId, - meeting.time_idx_start, - meeting.time_idx_end, - transaction - ); - console.log(`스케줄 충돌 결과: ${hasConflict}`); - if (hasConflict) { - throw new Error("스케줄이 겹칩니다. 다른 모임에 참가하세요."); - } - - // 참가자 추가 - await MeetingParticipant.create( - { meeting_id: meetingId, user_id: userId }, - { transaction } - ); - - // 스케줄 생성 (모임 시간 범위 내 모든 time_idx에 대해 생성) - const events = []; - for ( - let idx = meeting.time_idx_start; - idx <= meeting.time_idx_end; - idx++ - ) { - events.push({ time_idx: idx }); - } - await ScheduleService.createSchedules( - { - userId: userId, - title: `번개 모임: ${meeting.title}`, - is_fixed: true, - events: events, - }, - transaction - ); - - // 채팅방 참가 (MongoDB) - const user = await User.findOne({ - where: { id: userId }, - transaction, - }); - const chatRoom = await ChatRooms.findOne({ - chatRoomId: meeting.chatRoomId, - }); - if (chatRoom && !chatRoom.participants.includes(user.name)) { - chatRoom.participants.push(user.name); - chatRoom.isOnline.set(user.name, true); - chatRoom.lastReadAt.set(user.name, new Date()); - chatRoom.lastReadLogId.set(user.name, null); - await chatRoom.save(); - } - - // 현재 인원 수 증가 - await meeting.increment("cur_num", { by: 1, transaction }); - await Meeting.sequelize.transaction(async (transaction) => { - const hasConflict = await ScheduleService.checkScheduleOverlap( - userId, - new Date(meeting.start_time), - new Date(meeting.end_time) - ); - if (hasConflict) { - throw new Error('스케줄이 겹칩니다. 다른 모임에 참가하세요.'); - } - - await MeetingParticipant.create({ meeting_id: meetingId, user_id: userId }, { transaction }); - - await ScheduleService.createSchedule({ - userId, - title: `번개 모임: ${meeting.title}`, - start_time: new Date(meeting.start_time), - end_time: new Date(meeting.end_time), - is_fixed: true, - }); - - // 사용자와 FCM 토큰 조회 - const user = await this._findUserWithFcmTokens(userId); - const userFcmTokens = user.fcmTokenList.map((fcmToken) => fcmToken.token); - - const chatRoom = await ChatRoom.findOne({ chatRoomId: meeting.chatRoomId }); - - if (chatRoom) { - console.log("채팅방 찾음"); - this._addParticipantToChatRoom(chatRoom, user, userFcmTokens); - } - }); - }); - } - - async getMeetingDetail(meetingId, userId) { const meeting = await Meeting.findByPk(meetingId, { -- GitLab