// controllers/equipmentController.js const EquipmentModel = require('../models/equipmentModel'); const EquipmentController = { // CREATE - 설비 생성 createEquipment: async (req, res) => { try { const equipmentData = req.body; // 필수 필드 검증 if (!equipmentData.equipment_code || !equipmentData.equipment_name) { return res.status(400).json({ success: false, message: '설비 코드와 설비명은 필수입니다.' }); } // 설비 코드 중복 확인 EquipmentModel.checkDuplicateCode(equipmentData.equipment_code, null, (error, isDuplicate) => { if (error) { console.error('설비 코드 중복 확인 오류:', error); return res.status(500).json({ success: false, message: '설비 코드 중복 확인 중 오류가 발생했습니다.' }); } if (isDuplicate) { return res.status(409).json({ success: false, message: '이미 사용 중인 설비 코드입니다.' }); } // 설비 생성 EquipmentModel.create(equipmentData, (error, result) => { if (error) { console.error('설비 생성 오류:', error); return res.status(500).json({ success: false, message: '설비 생성 중 오류가 발생했습니다.' }); } res.status(201).json({ success: true, message: '설비가 성공적으로 생성되었습니다.', data: result }); }); }); } catch (error) { console.error('설비 생성 오류:', error); res.status(500).json({ success: false, message: '서버 오류가 발생했습니다.' }); } }, // READ ALL - 모든 설비 조회 (필터링 가능) getAllEquipments: (req, res) => { try { const filters = { workplace_id: req.query.workplace_id, equipment_type: req.query.equipment_type, status: req.query.status, search: req.query.search }; EquipmentModel.getAll(filters, (error, results) => { if (error) { console.error('설비 조회 오류:', error); return res.status(500).json({ success: false, message: '설비 조회 중 오류가 발생했습니다.' }); } res.json({ success: true, data: results }); }); } catch (error) { console.error('설비 조회 오류:', error); res.status(500).json({ success: false, message: '서버 오류가 발생했습니다.' }); } }, // READ ONE - 특정 설비 조회 getEquipmentById: (req, res) => { try { const equipmentId = req.params.id; EquipmentModel.getById(equipmentId, (error, result) => { if (error) { console.error('설비 조회 오류:', error); return res.status(500).json({ success: false, message: '설비 조회 중 오류가 발생했습니다.' }); } if (!result) { return res.status(404).json({ success: false, message: '설비를 찾을 수 없습니다.' }); } res.json({ success: true, data: result }); }); } catch (error) { console.error('설비 조회 오류:', error); res.status(500).json({ success: false, message: '서버 오류가 발생했습니다.' }); } }, // READ BY WORKPLACE - 특정 작업장의 설비 조회 getEquipmentsByWorkplace: (req, res) => { try { const workplaceId = req.params.workplaceId; EquipmentModel.getByWorkplace(workplaceId, (error, results) => { if (error) { console.error('작업장 설비 조회 오류:', error); return res.status(500).json({ success: false, message: '작업장 설비 조회 중 오류가 발생했습니다.' }); } res.json({ success: true, data: results }); }); } catch (error) { console.error('작업장 설비 조회 오류:', error); res.status(500).json({ success: false, message: '서버 오류가 발생했습니다.' }); } }, // READ ACTIVE - 활성 설비만 조회 getActiveEquipments: (req, res) => { try { EquipmentModel.getActive((error, results) => { if (error) { console.error('활성 설비 조회 오류:', error); return res.status(500).json({ success: false, message: '활성 설비 조회 중 오류가 발생했습니다.' }); } res.json({ success: true, data: results }); }); } catch (error) { console.error('활성 설비 조회 오류:', error); res.status(500).json({ success: false, message: '서버 오류가 발생했습니다.' }); } }, // UPDATE - 설비 수정 updateEquipment: async (req, res) => { try { const equipmentId = req.params.id; const equipmentData = req.body; // 필수 필드 검증 if (!equipmentData.equipment_code || !equipmentData.equipment_name) { return res.status(400).json({ success: false, message: '설비 코드와 설비명은 필수입니다.' }); } // 설비 존재 확인 EquipmentModel.getById(equipmentId, (error, existingEquipment) => { if (error) { console.error('설비 조회 오류:', error); return res.status(500).json({ success: false, message: '설비 조회 중 오류가 발생했습니다.' }); } if (!existingEquipment) { return res.status(404).json({ success: false, message: '설비를 찾을 수 없습니다.' }); } // 설비 코드 중복 확인 (자신 제외) EquipmentModel.checkDuplicateCode(equipmentData.equipment_code, equipmentId, (error, isDuplicate) => { if (error) { console.error('설비 코드 중복 확인 오류:', error); return res.status(500).json({ success: false, message: '설비 코드 중복 확인 중 오류가 발생했습니다.' }); } if (isDuplicate) { return res.status(409).json({ success: false, message: '이미 사용 중인 설비 코드입니다.' }); } // 설비 수정 EquipmentModel.update(equipmentId, equipmentData, (error, result) => { if (error) { console.error('설비 수정 오류:', error); return res.status(500).json({ success: false, message: '설비 수정 중 오류가 발생했습니다.' }); } res.json({ success: true, message: '설비가 성공적으로 수정되었습니다.', data: result }); }); }); }); } catch (error) { console.error('설비 수정 오류:', error); res.status(500).json({ success: false, message: '서버 오류가 발생했습니다.' }); } }, // UPDATE MAP POSITION - 지도상 위치 업데이트 updateMapPosition: (req, res) => { try { const equipmentId = req.params.id; const positionData = { map_x_percent: req.body.map_x_percent, map_y_percent: req.body.map_y_percent, map_width_percent: req.body.map_width_percent, map_height_percent: req.body.map_height_percent }; // workplace_id가 있으면 포함 (설비를 다른 작업장으로 이동 가능) if (req.body.workplace_id !== undefined) { positionData.workplace_id = req.body.workplace_id; } EquipmentModel.updateMapPosition(equipmentId, positionData, (error, result) => { if (error) { console.error('설비 위치 업데이트 오류:', error); return res.status(500).json({ success: false, message: '설비 위치 업데이트 중 오류가 발생했습니다.' }); } res.json({ success: true, message: '설비 위치가 성공적으로 업데이트되었습니다.', data: result }); }); } catch (error) { console.error('설비 위치 업데이트 오류:', error); res.status(500).json({ success: false, message: '서버 오류가 발생했습니다.' }); } }, // DELETE - 설비 삭제 deleteEquipment: (req, res) => { try { const equipmentId = req.params.id; EquipmentModel.delete(equipmentId, (error, result) => { if (error) { console.error('설비 삭제 오류:', error); return res.status(500).json({ success: false, message: '설비 삭제 중 오류가 발생했습니다.' }); } res.json({ success: true, message: '설비가 성공적으로 삭제되었습니다.', data: result }); }); } catch (error) { console.error('설비 삭제 오류:', error); res.status(500).json({ success: false, message: '서버 오류가 발생했습니다.' }); } }, // GET EQUIPMENT TYPES - 사용 중인 설비 유형 목록 조회 getEquipmentTypes: (req, res) => { try { EquipmentModel.getEquipmentTypes((error, results) => { if (error) { console.error('설비 유형 조회 오류:', error); return res.status(500).json({ success: false, message: '설비 유형 조회 중 오류가 발생했습니다.' }); } res.json({ success: true, data: results }); }); } catch (error) { console.error('설비 유형 조회 오류:', error); res.status(500).json({ success: false, message: '서버 오류가 발생했습니다.' }); } }, // GET NEXT EQUIPMENT CODE - 다음 관리번호 자동 생성 getNextEquipmentCode: (req, res) => { try { const prefix = req.query.prefix || 'TKP'; EquipmentModel.getNextEquipmentCode(prefix, (error, nextCode) => { if (error) { console.error('다음 관리번호 조회 오류:', error); return res.status(500).json({ success: false, message: '다음 관리번호 조회 중 오류가 발생했습니다.' }); } res.json({ success: true, data: { next_code: nextCode, prefix: prefix } }); }); } catch (error) { console.error('다음 관리번호 조회 오류:', error); res.status(500).json({ success: false, message: '서버 오류가 발생했습니다.' }); } } }; module.exports = EquipmentController;