- monthly_worker_status 조회 시 GROUP BY로 중복 데이터 합산 - 작업보고서 삭제 권한을 그룹장 이상으로 제한 (admin, system, group_leader) - 중복 데이터 정리를 위한 마이그레이션 SQL 추가 (009_fix_duplicate_monthly_status.sql) - synology_deployment 버전에도 동일 수정 적용
137 lines
4.4 KiB
JavaScript
137 lines
4.4 KiB
JavaScript
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
|
|
}; |