/** * 작업 관리 컨트롤러 * * 작업 CRUD API 엔드포인트 핸들러 * (공정=work_types에 속하는 세부 작업) * * @author TK-FB-Project * @since 2026-01-26 */ const taskModel = require('../models/taskModel'); const { ValidationError, NotFoundError, DatabaseError } = require('../utils/errors'); const { asyncHandler } = require('../middlewares/errorHandler'); const logger = require('../utils/logger'); // ==================== 작업 CRUD ==================== /** * 작업 생성 */ exports.createTask = asyncHandler(async (req, res) => { const taskData = req.body; if (!taskData.task_name) { throw new ValidationError('작업명은 필수 입력 항목입니다'); } logger.info('작업 생성 요청', { name: taskData.task_name }); const id = await taskModel.createTask(taskData); logger.info('작업 생성 성공', { task_id: id }); res.status(201).json({ success: true, data: { task_id: id }, message: '작업이 성공적으로 생성되었습니다' }); }); /** * 전체 작업 조회 (work_type_id 필터 지원) */ exports.getAllTasks = asyncHandler(async (req, res) => { const { work_type_id } = req.query; let rows; if (work_type_id) { // 특정 공정의 활성 작업만 조회 rows = await taskModel.getTasksByWorkType(work_type_id); } else { rows = await taskModel.getAllTasks(); } res.json({ success: true, data: rows, message: '작업 목록 조회 성공' }); }); /** * 활성 작업만 조회 */ exports.getActiveTasks = asyncHandler(async (req, res) => { const rows = await taskModel.getActiveTasks(); res.json({ success: true, data: rows, message: '활성 작업 목록 조회 성공' }); }); /** * 공정별 작업 조회 */ exports.getTasksByWorkType = asyncHandler(async (req, res) => { const workTypeId = req.params.work_type_id || req.query.work_type_id; if (!workTypeId) { throw new ValidationError('공정 ID가 필요합니다'); } const rows = await taskModel.getTasksByWorkType(workTypeId); res.json({ success: true, data: rows, message: '공정별 작업 목록 조회 성공' }); }); /** * 단일 작업 조회 */ exports.getTaskById = asyncHandler(async (req, res) => { const taskId = req.params.id; const task = await taskModel.getTaskById(taskId); if (!task) { throw new NotFoundError('작업을 찾을 수 없습니다'); } res.json({ success: true, data: task, message: '작업 조회 성공' }); }); /** * 작업 수정 */ exports.updateTask = asyncHandler(async (req, res) => { const taskId = req.params.id; const taskData = req.body; if (!taskData.task_name) { throw new ValidationError('작업명은 필수 입력 항목입니다'); } logger.info('작업 수정 요청', { task_id: taskId }); await taskModel.updateTask(taskId, taskData); logger.info('작업 수정 성공', { task_id: taskId }); res.json({ success: true, message: '작업이 성공적으로 수정되었습니다' }); }); /** * 작업 삭제 */ exports.deleteTask = asyncHandler(async (req, res) => { const taskId = req.params.id; logger.info('작업 삭제 요청', { task_id: taskId }); await taskModel.deleteTask(taskId); logger.info('작업 삭제 성공', { task_id: taskId }); res.json({ success: true, message: '작업이 성공적으로 삭제되었습니다' }); });