Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion .idea/workspace.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

25 changes: 16 additions & 9 deletions src/controllers/category.controller.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,12 @@ import {createCategoryService,
createTaskCategory,
createTaskCategoryBulk,
createCategoryBulk
} from '../services/category.service.js'
} from '../services/category.service.js';
import { transformCategoryListResponse,
transformCategoryResponse,
transformTaskResponse,
transformTaskListResponse
} from '../dtos/task.dto.js';
import { createTaskBulkDto, createTaskDto } from '../dtos/task.dto.js';
import { deleteCategoryRepository } from '../repositories/category.repository.js';
import { DuplicateCategoryError, AuthError } from '../errors.js';
Expand Down Expand Up @@ -47,10 +52,12 @@ export const handleCreateCategory = async (req, res, next) => {
throw new AuthError;
}

// 생성된 카테고리 반환
const createdCategory = await createCategoryService({ userId, name }); // 서비스 호출

const createdTaskCategory = await createCategoryService({ userId, name }); // 서비스 호출

res.success(createdTaskCategory); // 성공 응답
res.success(
transformCategoryResponse(createdCategory)
); // 성공 응답
} catch (error) {
next(error); // 전역 오류 처리 미들웨어로 전달
}
Expand Down Expand Up @@ -97,7 +104,7 @@ export const handleCreateCategoryBulk = async (req, res, next) => {

const createdCategories = await createCategoryBulk({ userId, names }); // 서비스 호출
// 성공 응답
res.success(createdCategories);
res.success(transformCategoryListResponse(createdCategories));
} catch (error) {
next(error);
}
Expand Down Expand Up @@ -147,8 +154,8 @@ export const handleUpdateCategory = async (req, res, next) => {
});
}

const updatedTaskCategory = await updateCategoryService(task_category_id, name, userId); // 서비스 호출
res.success(updatedTaskCategory); // 성공 응답
const updatedCategory = await updateCategoryService(task_category_id, name, userId); // 서비스 호출
res.success(transformCategoryResponse(updatedCategory)); // 성공 응답
} catch (error) {
next(error); // 전역 오류 처리 미들웨어로 전달
}
Expand Down Expand Up @@ -214,7 +221,7 @@ export const handleViewCategory = async (req, res, next) => {


const taskCategories = await getCategoriesByUser(userId); // 서비스 호출
res.success(taskCategories); // 성공 응답
res.success(transformCategoryListResponse(taskCategories)); // 성공 응답
} catch (error) {
next(error); // 전역 오류 처리 미들웨어로 전달
}
Expand Down Expand Up @@ -395,7 +402,7 @@ export const handleCreateTaskCategoryBulk = async (req, res, next) => {
return res.status(200).json({
resultType: "SUCCESS",
error: null,
success: createdTaskCategory,
success: transformTaskResponse(createdTaskCategory),
});
} catch (error) {
next(error); // 전역 오류 처리 미들웨어로 전달
Expand Down
12 changes: 7 additions & 5 deletions src/controllers/task.controller.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
import { StatusCodes } from "http-status-codes";
import { createTask,createTaskBulk} from "../services/task.service.js";
import { createTaskBulkDto, createTaskDto, getTaskDto, responseFromToggledTask, updateTaskDto } from "../dtos/task.dto.js";
import { createTaskBulkDto, createTaskDto, getTaskDto, responseFromToggledTask, updateTaskDto,
transformTaskListResponse, transformTaskResponse
} from "../dtos/task.dto.js";
import { updateTask, getTask, deleteTask } from "../services/task.service.js";
import { toggleTaskCompletion } from "../services/task.service.js";
import { findTaskWithPlanner } from "../repositories/task.repository.js";
Expand Down Expand Up @@ -57,7 +59,7 @@ export const handleCreateTask = async (req, res, next) => {
const newTask = await createTask({ ...validTaskData, userId });

// 성공 응답 반환
res.success(newTask);
res.success(transformTaskResponse(newTask));

} catch (error) {
next(error);
Expand Down Expand Up @@ -110,7 +112,7 @@ export const handleCreateTaskBulk = async (req, res, next) => {
//여러개 생성
const newTasks= await createTaskBulk (validTaskData, userId);

res.success(newTasks);
res.success(transformTaskListResponse(newTasks));
} catch (error) {
next(error);
}
Expand Down Expand Up @@ -185,7 +187,7 @@ export const handleUpdateTask = async (req, res, next) => {
});

// 성공 응답
res.success(updatedTask);
res.success(transformTaskResponse(updatedTask));
} catch (error) {
next(error);
}
Expand Down Expand Up @@ -223,7 +225,7 @@ export const handleGetTask = async (req, res, next) => {

const tasks = await getTask(validDate, userId);

res.success(tasks);
res.success(transformTaskListResponse(tasks));
}
catch (error) {
console.log(error);
Expand Down
32 changes: 32 additions & 0 deletions src/dtos/task.dto.js
Original file line number Diff line number Diff line change
@@ -1,3 +1,35 @@
// YYYY-MM-DDTHH:mm:ss.sssZ 형식으로 변환하는 함수 (UTC+9 적용)
const formatDateTime = (date) => {
if (!date) return null;
const validDate = date instanceof Date ? date : new Date(date); // 문자열이면 Date 객체로 변환
if (isNaN(validDate.getTime())) {
console.error("Invalid date detected:", date);
return null;
}
const KST = new Date(validDate.getTime() + 9 * 60 * 60 * 1000); // UTC+9 적용
return KST.toISOString(); // ISO 형식 유지
};

export const transformCategoryResponse = (category) => ({
...category,
createdAt: formatDateTime(category.createdAt),
updatedAt: formatDateTime(category.updatedAt)
});

export const transformCategoryListResponse = (categories) =>
Array.isArray(categories) ? categories.map(transformCategoryResponse) : categories;


export const transformTaskResponse = (task) => ({
...task,
createdAt: formatDateTime(task.createdAt),
updatedAt: formatDateTime(task.updatedAt)
});

export const transformTaskListResponse = (tasks) =>
tasks.map(transformTaskResponse);


export const createTaskDto = (body) => {

// 1. Validate title
Expand Down