const { getDb } = require('../dbPool'); // 1. 작업자 생성 const create = async (worker, callback) => { try { const db = await getDb(); const { worker_name, job_type = 'worker', phone_number = null, email = null, hire_date = null, department = null, notes = null, status = 'active' } = worker; const [result] = await db.query( `INSERT INTO workers (worker_name, job_type, phone_number, email, hire_date, department, notes, status) VALUES (?, ?, ?, ?, ?, ?, ?, ?)`, [worker_name, job_type, phone_number, email, hire_date, department, notes, status] ); callback(null, result.insertId); } catch (err) { callback(err); } }; // 2. 전체 조회 const getAll = async (callback) => { try { const db = await getDb(); const [rows] = await db.query(`SELECT * FROM workers ORDER BY worker_id DESC`); callback(null, rows); } catch (err) { callback(err); } }; // 3. 단일 조회 const getById = async (worker_id, callback) => { try { const db = await getDb(); const [rows] = await db.query(`SELECT * FROM workers WHERE worker_id = ?`, [worker_id]); callback(null, rows[0]); } catch (err) { callback(err); } }; // 4. 작업자 수정 const update = async (worker, callback) => { try { const db = await getDb(); const { worker_id, worker_name, join_date, job_type, salary, annual_leave, status } = worker; const [result] = await db.query( `UPDATE workers SET worker_name = ?, join_date = ?, job_type = ?, salary = ?, annual_leave = ?, status = ? WHERE worker_id = ?`, [worker_name, join_date, job_type, salary, annual_leave, status, worker_id] ); callback(null, result.affectedRows); } catch (err) { callback(new Error(err.message || String(err))); } }; // 5. 삭제 (외래키 제약조건 처리) const remove = async (worker_id, callback) => { const db = await getDb(); const conn = await db.getConnection(); try { await conn.beginTransaction(); console.log(`🗑️ 작업자 삭제 시작: worker_id=${worker_id}`); // 안전한 삭제: 각 테이블을 개별적으로 처리하고 오류가 발생해도 계속 진행 const tables = [ { name: 'users', query: 'UPDATE users SET worker_id = NULL WHERE worker_id = ?', action: '업데이트' }, { name: 'Users', query: 'UPDATE Users SET worker_id = NULL WHERE worker_id = ?', action: '업데이트' }, { name: 'daily_issue_reports', query: 'DELETE FROM daily_issue_reports WHERE worker_id = ?', action: '삭제' }, { name: 'DailyIssueReports', query: 'DELETE FROM DailyIssueReports WHERE worker_id = ?', action: '삭제' }, { name: 'work_reports', query: 'DELETE FROM work_reports WHERE worker_id = ?', action: '삭제' }, { name: 'WorkReports', query: 'DELETE FROM WorkReports WHERE worker_id = ?', action: '삭제' }, { name: 'daily_work_reports', query: 'DELETE FROM daily_work_reports WHERE worker_id = ?', action: '삭제' }, { name: 'monthly_worker_status', query: 'DELETE FROM monthly_worker_status WHERE worker_id = ?', action: '삭제' }, { name: 'worker_groups', query: 'DELETE FROM worker_groups WHERE worker_id = ?', action: '삭제' } ]; for (const table of tables) { try { const [result] = await conn.query(table.query, [worker_id]); if (result.affectedRows > 0) { console.log(`✅ ${table.name} 테이블 ${table.action}: ${result.affectedRows}건`); } } catch (tableError) { console.log(`⚠️ ${table.name} 테이블 ${table.action} 실패 (무시): ${tableError.message}`); } } // 마지막으로 작업자 삭제 const [result] = await conn.query( `DELETE FROM workers WHERE worker_id = ?`, [worker_id] ); console.log(`✅ 작업자 삭제 완료: ${result.affectedRows}건`); await conn.commit(); callback(null, result.affectedRows); } catch (err) { await conn.rollback(); console.error(`❌ 작업자 삭제 오류 (worker_id: ${worker_id}):`, err); callback(new Error(`작업자 삭제 중 오류가 발생했습니다: ${err.message}`)); } finally { conn.release(); } }; // ✅ 모듈 내보내기 (정상 구조) module.exports = { create, getAll, getById, update, remove };