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
48 changes: 48 additions & 0 deletions src/controllers/folder.controller.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
import * as folderService from "../services/folder.service.js";

// 1. 폴더 생성
export const createFolder = async (req, res, next) => {
try {
const userId = req.user.id; // 토큰에서 추출한 내 ID
const result = await folderService.createFolder(userId, req.body);

res.status(201).json({
resultType: "SUCCESS",
message: "폴더 생성 성공",
data: result });
} catch (err) {
next(err);
}
};

// 2. 폴더 수정
export const updateFolder = async (req, res, next) => {
try {
const userId = req.user.id;
const { folderId } = req.params;
const result = await folderService.updateFolder(userId, folderId, req.body);

res.status(200).json({
resultType: "SUCCESS",
message: "폴더 수정 성공",
data: result });
} catch (err) {
next(err);
}
};

// 3. 폴더 삭제
export const deleteFolder = async (req, res, next) => {
try {
const userId = req.user.id;
const { folderId } = req.params;

await folderService.deleteFolder(userId, folderId);

res.status(200).json({
resultType: "SUCCESS",
message: "폴더 삭제 성공" });
} catch (err) {
next(err);
}
};
18 changes: 18 additions & 0 deletions src/dtos/folder.dto.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
export const bodyToFolderDto = (body) => {
if (!body.folderTitle) {
throw new Error("폴더 이름(folderTitle)은 필수입니다.");
}

return {
folderTitle: body.folderTitle,
color: body.color || "#000000", // 색상 없으면 기본 검정
};
};

export const responseFromFolder = (folder) => {
return {
folderId: folder.id,
folderTitle: folder.folderTitle,
color: folder.color
};
};
49 changes: 49 additions & 0 deletions src/repositories/folder.repository.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
import { prisma } from "../db.config.js";

// 1. 폴더 생성
export const addFolder = async (userId, data) => {
const newFolder = await prisma.folder.create({
data: {
userId: userId,
folderTitle: data.folderTitle,
color: data.color,
},
select: {
id: true,
folderTitle: true,
color: true,
}
});
return newFolder;
};

// 2. 폴더 수정
export const updateFolder = async (userId, folderId, data) => {
const updatedFolder = await prisma.folder.update({
where: {
id: parseInt(folderId),
userId: userId, // 내 폴더인지 확인
},
data: {
folderTitle: data.folderTitle,
color: data.color,
},
select: {
id: true,
folderTitle: true,
color: true,
}
});
return updatedFolder;
};

// 3. 폴더 삭제
export const removeFolder = async (userId, folderId) => {
const deletedFolder = await prisma.folder.delete({
where: {
id: parseInt(folderId),
userId: userId,
},
});
return deletedFolder;
};
11 changes: 11 additions & 0 deletions src/routes/folder.route.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
import express from "express";
import * as folderController from "../controllers/folder.controller.js";
import authenticate from "../middlewares/authenticate.middleware.js";

const router = express.Router();

router.post("/", authenticate, folderController.createFolder);
router.patch("/:folderId", authenticate, folderController.updateFolder);
router.delete("/:folderId", authenticate, folderController.deleteFolder);

export default router;
2 changes: 2 additions & 0 deletions src/routes/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,12 @@ import express from "express";
import userRouter from "./user.route.js";
import alarmRouter from "./alarm.route.js";
import modalRouter from "./modal.route.js";
import folderRouter from "./folder.route.js";

const router = express.Router();

// 각 도메인별 라우터 등록
router.use("/user/folder", folderRouter);
router.use("/user", userRouter);
router.use("/alarm", alarmRouter);
router.use("/reference", modalRouter);
Expand Down
22 changes: 22 additions & 0 deletions src/services/folder.service.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
import * as folderRepository from "../repositories/folder.repository.js";
import * as folderDto from "../dtos/folder.dto.js";

// 1. 폴더 생성
export const createFolder = async (userId, body) => {
const folderData = folderDto.bodyToFolderDto(body);
const newFolder = await folderRepository.addFolder(userId, folderData);
return folderDto.responseFromFolder(newFolder);
};

// 2. 폴더 수정
export const updateFolder = async (userId, folderId, body) => {
const folderData = folderDto.bodyToFolderDto(body);
const updatedFolder = await folderRepository.updateFolder(userId, folderId, folderData);
return folderDto.responseFromFolder(updatedFolder);
};

// 3. 폴더 삭제
export const deleteFolder = async (userId, folderId) => {
await folderRepository.removeFolder(userId, folderId);
return;
};