From 2fc4179052c67298b0bfccc10f70cebbdea793ab Mon Sep 17 00:00:00 2001 From: Hyungi Ahn Date: Fri, 13 Mar 2026 14:51:06 +0900 Subject: [PATCH] =?UTF-8?q?fix(tksafety):=20DB=20=EC=8A=A4=ED=82=A4?= =?UTF-8?q?=EB=A7=88=20=EB=B6=88=EC=9D=BC=EC=B9=98=EB=A1=9C=20=EC=9D=B8?= =?UTF-8?q?=ED=95=9C=20API=20500=20=EC=97=90=EB=9F=AC=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - departments.name → department_name (3곳) - users → sso_users 테이블 참조 수정 (7곳) - tbm_sessions.start_time → created_at (존재하지 않는 컬럼) - tbm_team_assignments JOIN: ta.user_id → ta.worker_id - workers leader JOIN: leader.worker_id → leader.user_id - tbm_weather_conditions → weather_conditions 테이블명 수정 Co-Authored-By: Claude Opus 4.6 --- tksafety/api/models/checklistModel.js | 2 +- tksafety/api/models/visitRequestModel.js | 28 ++++++++++++------------ 2 files changed, 15 insertions(+), 15 deletions(-) diff --git a/tksafety/api/models/checklistModel.js b/tksafety/api/models/checklistModel.js index 453805d..c03446f 100644 --- a/tksafety/api/models/checklistModel.js +++ b/tksafety/api/models/checklistModel.js @@ -46,7 +46,7 @@ async function deleteCheck(checkId) { // Get weather conditions async function getWeatherConditions() { const db = getPool(); - const [rows] = await db.query('SELECT * FROM tbm_weather_conditions ORDER BY display_order, condition_code'); + const [rows] = await db.query('SELECT * FROM weather_conditions ORDER BY display_order, condition_code'); return rows; } diff --git a/tksafety/api/models/visitRequestModel.js b/tksafety/api/models/visitRequestModel.js index 1eb3caf..42a6404 100644 --- a/tksafety/api/models/visitRequestModel.js +++ b/tksafety/api/models/visitRequestModel.js @@ -97,13 +97,13 @@ const getAllVisitRequests = async (filters = {}) => { wc.category_name, w.workplace_name, vpt.purpose_name, approver.username as approver_name, - d.name as department_name + d.department_name FROM workplace_visit_requests vr - INNER JOIN users u ON vr.requester_id = u.user_id + INNER JOIN sso_users u ON vr.requester_id = u.user_id INNER JOIN workplace_categories wc ON vr.category_id = wc.category_id INNER JOIN workplaces w ON vr.workplace_id = w.workplace_id INNER JOIN visit_purpose_types vpt ON vr.purpose_id = vpt.purpose_id - LEFT JOIN users approver ON vr.approved_by = approver.user_id + LEFT JOIN sso_users approver ON vr.approved_by = approver.user_id LEFT JOIN departments d ON vr.department_id = d.department_id WHERE 1=1 `; @@ -157,13 +157,13 @@ const getVisitRequestById = async (requestId) => { wc.category_name, w.workplace_name, vpt.purpose_name, approver.username as approver_name, - d.name as department_name + d.department_name FROM workplace_visit_requests vr - INNER JOIN users u ON vr.requester_id = u.user_id + INNER JOIN sso_users u ON vr.requester_id = u.user_id INNER JOIN workplace_categories wc ON vr.category_id = wc.category_id INNER JOIN workplaces w ON vr.workplace_id = w.workplace_id INNER JOIN visit_purpose_types vpt ON vr.purpose_id = vpt.purpose_id - LEFT JOIN users approver ON vr.approved_by = approver.user_id + LEFT JOIN sso_users approver ON vr.approved_by = approver.user_id LEFT JOIN departments d ON vr.department_id = d.department_id WHERE vr.request_id = ?`, [requestId] @@ -318,7 +318,7 @@ const getTrainingRecordByRequestId = async (requestId) => { str.signature_data, str.completed_at, str.created_at, str.updated_at, u.username as trainer_name, u.name as trainer_full_name FROM safety_training_records str - INNER JOIN users u ON str.trainer_id = u.user_id + INNER JOIN sso_users u ON str.trainer_id = u.user_id WHERE str.request_id = ?`, [requestId] ); @@ -360,7 +360,7 @@ const getTrainingRecords = async (filters = {}) => { u.username as trainer_name, u.name as trainer_full_name, vr.visitor_company, vr.visitor_count, vr.visit_date FROM safety_training_records str - INNER JOIN users u ON str.trainer_id = u.user_id + INNER JOIN sso_users u ON str.trainer_id = u.user_id INNER JOIN workplace_visit_requests vr ON str.request_id = vr.request_id WHERE 1=1 `; @@ -470,7 +470,7 @@ const getEntryDashboard = async (date) => { FROM workplace_visit_requests vr LEFT JOIN workplace_categories wc ON vr.category_id = wc.category_id LEFT JOIN workplaces w ON vr.workplace_id = w.workplace_id - LEFT JOIN users u ON vr.requester_id = u.user_id + LEFT JOIN sso_users u ON vr.requester_id = u.user_id LEFT JOIN visit_purpose_types vpt ON vr.purpose_id = vpt.purpose_id WHERE vr.visit_date = ? AND vr.status NOT IN ('pending','rejected') @@ -478,14 +478,14 @@ const getEntryDashboard = async (date) => { SELECT 'tbm' as source, 'internal' as request_type, NULL as visitor_company, wk.worker_name as visitor_name, 1 as visitor_count, NULL as category_name, ts.work_location as workplace_name, - ts.session_date as entry_date, ts.start_time as entry_time, - ts.start_time as check_in_time, ts.end_time as check_out_time, + ts.session_date as entry_date, TIME(ts.created_at) as entry_time, + ts.created_at as check_in_time, ts.end_time as check_out_time, CASE WHEN ta.is_present=1 THEN 'checked_in' ELSE 'absent' END as status, leader.worker_name as reporter_name, '작업(TBM)' as purpose_name, 'TBM 세션 기준' as source_note FROM tbm_team_assignments ta JOIN tbm_sessions ts ON ta.session_id = ts.session_id - JOIN workers wk ON ta.user_id = wk.worker_id - LEFT JOIN workers leader ON ts.leader_user_id = leader.worker_id + JOIN workers wk ON ta.worker_id = wk.worker_id + LEFT JOIN workers leader ON ts.leader_user_id = leader.user_id WHERE ts.session_date = ? AND ts.status != 'cancelled' UNION ALL @@ -554,7 +554,7 @@ const getEntryStats = async (date) => { const getAllDepartments = async () => { const db = getPool(); const [rows] = await db.query( - 'SELECT department_id, name FROM departments WHERE is_active = 1 ORDER BY name' + 'SELECT department_id, department_name FROM departments WHERE is_active = 1 ORDER BY department_name' ); return rows; };