feat(training): 안전교육 실시 페이지 수정/삭제 기능 추가

대기 목록·완료 이력 양쪽에 수정/삭제 버튼 추가.
교육 기록 삭제 시 트랜잭션으로 출입 신청 상태를 approved로 복원.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
Hyungi Ahn
2026-03-13 20:31:29 +09:00
parent e236883c64
commit 3e50639914
5 changed files with 249 additions and 0 deletions

View File

@@ -280,6 +280,19 @@ exports.updateTrainingRecord = async (req, res) => {
}
};
exports.deleteTrainingRecord = async (req, res) => {
try {
const result = await visitRequestModel.deleteTrainingRecord(req.params.id);
if (result.affectedRows === 0) {
return res.status(404).json({ success: false, message: '안전교육 기록을 찾을 수 없습니다.' });
}
res.json({ success: true, message: '안전교육 기록이 삭제되었습니다.' });
} catch (err) {
console.error('안전교육 기록 삭제 오류:', err);
res.status(500).json({ success: false, message: '안전교육 기록 삭제 중 오류가 발생했습니다.' });
}
};
exports.completeTraining = async (req, res) => {
try {
const trainingId = req.params.id;

View File

@@ -350,6 +350,42 @@ const completeTraining = async (trainingId, signatureData) => {
return result;
};
const deleteTrainingRecord = async (trainingId) => {
const db = getPool();
const connection = await db.getConnection();
try {
await connection.beginTransaction();
// 1. training record 조회 → request_id 획득
const [rows] = await connection.query(
'SELECT training_id, request_id FROM safety_training_records WHERE training_id = ?',
[trainingId]
);
if (!rows.length) {
await connection.rollback();
return { affectedRows: 0 };
}
const requestId = rows[0].request_id;
// 2. training record 삭제
await connection.query('DELETE FROM safety_training_records WHERE training_id = ?', [trainingId]);
// 3. 출입 신청 상태를 approved로 복원
await connection.query(
"UPDATE workplace_visit_requests SET status = 'approved', updated_at = NOW() WHERE request_id = ?",
[requestId]
);
await connection.commit();
return { affectedRows: 1 };
} catch (err) {
await connection.rollback();
throw err;
} finally {
connection.release();
}
};
const getTrainingRecords = async (filters = {}) => {
const db = getPool();
let query = `
@@ -581,6 +617,7 @@ module.exports = {
createTrainingRecord,
getTrainingRecordByRequestId,
updateTrainingRecord,
deleteTrainingRecord,
completeTraining,
getTrainingRecords,
getAllCategories,

View File

@@ -41,6 +41,7 @@ router.post('/training', requireAdmin, visitRequestController.createTrainingReco
router.get('/training', visitRequestController.getTrainingRecords);
router.get('/training/request/:requestId', visitRequestController.getTrainingRecordByRequestId);
router.put('/training/:id', requireAdmin, visitRequestController.updateTrainingRecord);
router.delete('/training/:id', requireAdmin, visitRequestController.deleteTrainingRecord);
router.post('/training/:id/complete', requireAdmin, visitRequestController.completeTraining);
module.exports = router;