diff --git a/controllers/inviteController.js b/controllers/inviteController.js new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/routes/inviteRoutes.js b/routes/inviteRoutes.js new file mode 100644 index 0000000000000000000000000000000000000000..cef8ad9a65e62f1112487bb1cc20973782c4cea1 --- /dev/null +++ b/routes/inviteRoutes.js @@ -0,0 +1,32 @@ +// routes/inviteRoutes.js +const express = require('express'); +const router = express.Router(); +const inviteController = require('../controllers/inviteController'); +const { isLoggedIn } = require('../middlewares/auth'); + + +router.use(isLoggedIn); +// 초대 응답 +router.post('/respond', async (req, res) => { + const { inviteId, response } = req.body; + const userId = req.user.id; // 인증된 사용자 ID + try { + const result = await inviteController.respondToInvite(inviteId, userId, response); + res.status(200).json({ success: true, result }); + } catch (error) { + res.status(400).json({ success: false, message: error.message }); + } +}); + +// 받은 초대 조회 +router.get('/received', async (req, res) => { + const userId = req.user.id; // 인증된 사용자 ID + try { + const invites = await inviteController.getReceivedInvites(userId); + res.status(200).json({ success: true, invites }); + } catch (error) { + res.status(400).json({ success: false, message: error.message }); + } +}); + +module.exports = router; diff --git a/services/meetingService.js b/services/meetingService.js index 44ed51915cf082f1cb7439b618138c4c5b5892dd..389942dd439ba2b9e5c61bd1dcc61708d3beedf2 100644 --- a/services/meetingService.js +++ b/services/meetingService.js @@ -26,11 +26,6 @@ class MeetingService { return totalIdx; } - /** - * 번개 모임 생성 - * @param {object} meetingData - 모임 생성 데이터 - * @returns {Promise<object>} - 생성된 모임 ID와 채팅방 ID, 초대된 친구 ID 목록 - */ async createMeeting(meetingData) { // DTO를 사용하여 요청 데이터 검증 const createMeetingDTO = new CreateMeetingRequestDTO(meetingData); @@ -179,12 +174,7 @@ class MeetingService { return availableFriendIds; } - /** - * 번개 모임 참가 - * @param {number} meetingId - 모임 ID - * @param {number} userId - 사용자 ID - * @returns {Promise<void>} - */ + async joinMeeting(meetingId, userId) { const meeting = await Meeting.findByPk(meetingId); console.log(`참여하려는 모임: ${JSON.stringify(meeting)}`); @@ -209,7 +199,6 @@ class MeetingService { // 트랜잭션을 사용하여 참가자 추가 및 스케줄 업데이트를 원자적으로 처리 await sequelize.transaction(async (transaction) => { - // 현재 인원 수 확인 if (meeting.cur_num >= meeting.max_num) { throw new Error("모임 인원이 모두 찼습니다."); } @@ -225,7 +214,6 @@ class MeetingService { throw new Error("스케줄이 겹칩니다. 다른 모임에 참가하세요."); } - // 참가자 추가 await MeetingParticipant.create( { meeting_id: meetingId, user_id: userId }, { transaction } @@ -271,11 +259,7 @@ class MeetingService { }); } - /** - * 번개 모임 목록 조회 - * @param {number} userId - 사용자 ID - * @returns {Promise<Array<MeetingResponseDTO>>} - 모임 목록 DTO 배열 - */ + async getMeetings(userId) { const meetings = await Meeting.findAll({ attributes: [ @@ -295,7 +279,7 @@ class MeetingService { model: MeetingParticipant, as: 'participants', where: { user_id: userId }, // userId와 매핑된 미팅만 가져옴 - attributes: [], // MeetingParticipant 테이블의 데이터는 필요 없으므로 제외 + attributes: [], }, { model: User, @@ -311,11 +295,7 @@ class MeetingService { }); } - /** - * 번개 모임 마감 - * @param {number} meetingId - 모임 ID - * @returns {Promise<Meeting>} - 마감된 모임 객체 - */ + async closeMeeting(meetingId) { const meeting = await Meeting.findByPk(meetingId); if (!meeting) { @@ -329,12 +309,7 @@ class MeetingService { return meeting; } - /** - * 번개 모임 참가 - * @param {number} meetingId - 모임 ID - * @param {number} userId - 사용자 ID - * @returns {Promise<void>} - */ + async joinMeeting(meetingId, userId) { const meeting = await Meeting.findByPk(meetingId); console.log(`참여하려는 모임: ${JSON.stringify(meeting)}`); @@ -422,11 +397,7 @@ class MeetingService { }); } - /** - * 번개 모임 상세 조회 - * @param {number} meetingId - 모임 ID - * @returns {Promise<MeetingDetailResponseDTO>} - 모임 상세 DTO - */ + async getMeetingDetail(meetingId) { const meeting = await Meeting.findByPk(meetingId, { include: [