import { Request, Response } from "express"; import { TodoService } from "../services/todoService"; import { logger } from "../utils/logger"; const todoService = TodoService.getInstance(); /** * 모든 To-Do 항목 조회 */ export const getTodos = async (req: Request, res: Response): Promise => { try { const { status, priority, assignedTo } = req.query; const result = await todoService.getAllTodos({ status: status as string, priority: priority as string, assignedTo: assignedTo as string, }); res.status(200).json({ success: true, data: result.todos, stats: result.stats, }); } catch (error) { logger.error("❌ To-Do 목록 조회 실패:", error); res.status(500).json({ success: false, message: "To-Do 목록 조회에 실패했습니다.", error: error instanceof Error ? error.message : String(error), }); } }; /** * To-Do 항목 생성 */ export const createTodo = async (req: Request, res: Response): Promise => { try { const newTodo = await todoService.createTodo(req.body); res.status(201).json({ success: true, data: newTodo, message: "To-Do가 생성되었습니다.", }); } catch (error) { logger.error("❌ To-Do 생성 실패:", error); res.status(500).json({ success: false, message: "To-Do 생성에 실패했습니다.", error: error instanceof Error ? error.message : String(error), }); } }; /** * To-Do 항목 수정 */ export const updateTodo = async (req: Request, res: Response): Promise => { try { const { id } = req.params; const updatedTodo = await todoService.updateTodo(id, req.body); res.status(200).json({ success: true, data: updatedTodo, message: "To-Do가 수정되었습니다.", }); } catch (error) { logger.error("❌ To-Do 수정 실패:", error); res.status(500).json({ success: false, message: "To-Do 수정에 실패했습니다.", error: error instanceof Error ? error.message : String(error), }); } }; /** * To-Do 항목 삭제 */ export const deleteTodo = async (req: Request, res: Response): Promise => { try { const { id } = req.params; await todoService.deleteTodo(id); res.status(200).json({ success: true, message: "To-Do가 삭제되었습니다.", }); } catch (error) { logger.error("❌ To-Do 삭제 실패:", error); res.status(500).json({ success: false, message: "To-Do 삭제에 실패했습니다.", error: error instanceof Error ? error.message : String(error), }); } }; /** * To-Do 항목 순서 변경 */ export const reorderTodos = async (req: Request, res: Response): Promise => { try { const { todoIds } = req.body; if (!Array.isArray(todoIds)) { res.status(400).json({ success: false, message: "todoIds는 배열이어야 합니다.", }); return; } await todoService.reorderTodos(todoIds); res.status(200).json({ success: true, message: "To-Do 순서가 변경되었습니다.", }); } catch (error) { logger.error("❌ To-Do 순서 변경 실패:", error); res.status(500).json({ success: false, message: "To-Do 순서 변경에 실패했습니다.", error: error instanceof Error ? error.message : String(error), }); } };