Skip to content
Snippets Groups Projects
Commit 6958b3d4 authored by 조대희's avatar 조대희
Browse files

refactor: 스케줄 서비스 수정에 따른 컨트롤러, 미팅 서비스 수정

parent d28f525a
No related branches found
No related tags found
1 merge request!42[#25] 배포코드 master브랜치로 이동
...@@ -22,22 +22,19 @@ class scheduleController { ...@@ -22,22 +22,19 @@ class scheduleController {
async createSchedule(req, res) { async createSchedule(req, res) {
try { try {
const userId = req.user.id; const userId = req.user.id;
const scheduleRequestDTO = new ScheduleRequestDTO(req.body); const { title, is_fixed, time_indices } = req.body;
const validatedData = scheduleRequestDTO.validate('create'); // 'create' 타입 검증
const { title, is_fixed, events } = validatedData; const schedule = await ScheduleService.createSchedules({
const schedules = await ScheduleService.createSchedules({
userId, userId,
title, title,
is_fixed, is_fixed,
events time_indices
}); });
return res.status(201).json({ return res.status(201).json({
success: true, success: true,
data: { data: {
schedules schedule
} }
}); });
} catch (error) { } catch (error) {
...@@ -57,31 +54,32 @@ class scheduleController { ...@@ -57,31 +54,32 @@ class scheduleController {
* Bulk update 지원 * Bulk update 지원
* 요청 본문 예시: * 요청 본문 예시:
* { * {
* updates: [ * "originalTitle": "알고리즘 스터디", // 기존 스케줄의 제목
* { time_idx: 36, title: 'New Title', is_fixed: true }, * "title": "알고리즘 스터디 2.0", // 변경할 제목 (제목 변경 안할거면 기존 제목을 넣어야함 * -> title로 동일 스케줄을 찾아서)
* { time_idx: 44, title: 'Another Title' }, * "is_fixed": true,
* // ... * "time_indices": [36, 37, 38, 40] // 변경할 time_indices 배열
* ]
* } * }
*/ */
async updateSchedules(req, res) { async updateSchedules(req, res) {
try { try {
const userId = req.user.id; const userId = req.user.id;
const scheduleRequestDTO = new ScheduleRequestDTO(req.body); const { originalTitle, title, is_fixed, time_indices } = req.body;
const validatedData = scheduleRequestDTO.validate('bulk_update'); // 'bulk_update' 타입 검증
const { updates } = validatedData; const updatedSchedule = await ScheduleService.updateSchedules(userId, {
originalTitle,
const updatedSchedules = await ScheduleService.updateSchedules(userId, updates); title,
is_fixed,
time_indices
});
return res.status(200).json({ return res.status(200).json({
success: true, success: true,
data: { data: {
schedules: updatedSchedules schedule: updatedSchedule
} }
}); });
} catch (error) { } catch (error) {
if (error.code === 'SCHEDULE_NOT_FOUND') { if (error.message === 'Schedule not found') {
return res.status(404).json({ return res.status(404).json({
success: false, success: false,
error: { error: {
...@@ -106,24 +104,21 @@ class scheduleController { ...@@ -106,24 +104,21 @@ class scheduleController {
* Bulk delete 지원 * Bulk delete 지원
* 요청 본문 예시: * 요청 본문 예시:
* { * {
* time_idxs: [36, 44, ...] * "title": "알고리즘 스터디"
* } * }
*/ */
async deleteSchedules(req, res) { async deleteSchedules(req, res) {
try { try {
const userId = req.user.id; const userId = req.user.id;
const scheduleRequestDTO = new ScheduleRequestDTO(req.body); const { title } = req.body;
const validatedData = scheduleRequestDTO.validate('bulk_delete'); // 'bulk_delete' 타입 검증
const { time_idxs } = validatedData;
const result = await ScheduleService.deleteSchedules(userId, time_idxs); const result = await ScheduleService.deleteSchedules(userId, title);
return res.status(200).json({ return res.status(200).json({
success: true, success: true,
data: { data: {
message: 'Schedules successfully deleted', message: 'Schedule successfully deleted',
deleted_time_idxs: result.deleted_time_idxs deletedCount: result.deletedCount
} }
}); });
} catch (error) { } catch (error) {
...@@ -136,7 +131,6 @@ class scheduleController { ...@@ -136,7 +131,6 @@ class scheduleController {
}); });
} }
} }
/** /**
* 해당 사용자 전체 스케줄 조회 * 해당 사용자 전체 스케줄 조회
* GET /api/schedule/all * GET /api/schedule/all
...@@ -148,7 +142,9 @@ class scheduleController { ...@@ -148,7 +142,9 @@ class scheduleController {
return res.status(200).json({ return res.status(200).json({
success: true, success: true,
data: schedules data: {
schedules
}
}); });
} catch (error) { } catch (error) {
return res.status(500).json({ return res.status(500).json({
...@@ -175,7 +171,9 @@ class scheduleController { ...@@ -175,7 +171,9 @@ class scheduleController {
return res.status(200).json({ return res.status(200).json({
success: true, success: true,
data: schedule data: {
schedule
}
}); });
} catch (error) { } catch (error) {
if (error.message === 'Schedule not found') { if (error.message === 'Schedule not found') {
......
...@@ -118,20 +118,16 @@ class MeetingService { ...@@ -118,20 +118,16 @@ class MeetingService {
{ transaction } { transaction }
); );
// 스케줄 생성 (모임 시간 범위 내 모든 time_idx에 대해 생성) const time_indices = Array.from(
const events = []; { length: time_idx_end - time_idx_start + 1 },
for (let idx = time_idx_start; idx <= time_idx_end; idx++) { (_, i) => time_idx_start + i
events.push({ time_idx: idx }); );
} await ScheduleService.createSchedules({
await ScheduleService.createSchedules(
{
userId: created_by, userId: created_by,
title: `번개 모임: ${title}`, title: `번개 모임: ${title}`,
is_fixed: false, is_fixed: false,
events: events, time_indices: time_indices,
}, }, transaction);
transaction
);
// 친구 초대 로직 호출 // 친구 초대 로직 호출
const invitedFriendIds = await this.sendInvites({ const invitedFriendIds = await this.sendInvites({
...@@ -264,24 +260,17 @@ class MeetingService { ...@@ -264,24 +260,17 @@ class MeetingService {
{ transaction } { transaction }
); );
// 스케줄 생성 (모임 시간 범위 내 모든 time_idx에 대해 생성) const time_indices = Array.from(
const events = []; { length: meeting.time_idx_end - meeting.time_idx_start + 1 },
for ( (_, i) => meeting.time_idx_start + i
let idx = meeting.time_idx_start; );
idx <= meeting.time_idx_end;
idx++ await ScheduleService.createSchedules({
) {
events.push({ time_idx: idx });
}
await ScheduleService.createSchedules(
{
userId: userId, userId: userId,
title: `번개 모임: ${meeting.title}`, title: `번개 모임: ${meeting.title}`,
is_fixed: false, is_fixed: false,
events: events, time_indices: time_indices,
}, }, transaction);
transaction
);
// 채팅방 참가 (MongoDB) // 채팅방 참가 (MongoDB)
const user = await User.findOne({ const user = await User.findOne({
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment