const taskModel = require('../models/taskModel'); const { ApiError, asyncHandler, handleDatabaseError, handleNotFoundError } = require('../utils/errorHandler'); const { validateSchema, schemas } = require('../utils/validator'); // 1. 생성 exports.createTask = asyncHandler(async (req, res) => { const taskData = req.body; try { const lastID = await new Promise((resolve, reject) => { taskModel.create(taskData, (err, id) => (err ? reject(err) : resolve(id))); }); res.created({ task_id: lastID }, '작업이 성공적으로 생성되었습니다.'); } catch (err) { handleDatabaseError(err, '작업 생성'); } }); // 2. 전체 조회 exports.getAllTasks = asyncHandler(async (req, res) => { try { const rows = await new Promise((resolve, reject) => { taskModel.getAll((err, data) => (err ? reject(err) : resolve(data))); }); res.list(rows, '작업 목록 조회 성공'); } catch (err) { handleDatabaseError(err, '작업 목록 조회'); } }); // 3. 단일 조회 exports.getTaskById = asyncHandler(async (req, res) => { const id = parseInt(req.params.task_id, 10); if (isNaN(id)) { throw new ApiError('유효하지 않은 작업 ID입니다.', 400); } try { const row = await new Promise((resolve, reject) => { taskModel.getById(id, (err, data) => (err ? reject(err) : resolve(data))); }); if (!row) { handleNotFoundError('작업', id); } res.success(row, '작업 조회 성공'); } catch (err) { handleDatabaseError(err, '작업 조회'); } }); // 4. 수정 exports.updateTask = asyncHandler(async (req, res) => { const id = parseInt(req.params.task_id, 10); if (isNaN(id)) { throw new ApiError('유효하지 않은 작업 ID입니다.', 400); } const taskData = { ...req.body, task_id: id }; try { const changes = await new Promise((resolve, reject) => { taskModel.update(taskData, (err, ch) => (err ? reject(err) : resolve(ch))); }); if (changes === 0) { handleNotFoundError('작업', id); } res.updated({ changes }, '작업 정보가 성공적으로 수정되었습니다.'); } catch (err) { handleDatabaseError(err, '작업 수정'); } }); // 5. 삭제 exports.removeTask = asyncHandler(async (req, res) => { const id = parseInt(req.params.task_id, 10); if (isNaN(id)) { throw new ApiError('유효하지 않은 작업 ID입니다.', 400); } try { const changes = await new Promise((resolve, reject) => { taskModel.remove(id, (err, ch) => (err ? reject(err) : resolve(ch))); }); if (changes === 0) { handleNotFoundError('작업', id); } res.deleted('작업이 성공적으로 삭제되었습니다.'); } catch (err) { handleDatabaseError(err, '작업 삭제'); } });