fix(tksafety): DB 스키마 불일치로 인한 API 500 에러 수정

- 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 <noreply@anthropic.com>
This commit is contained in:
Hyungi Ahn
2026-03-13 14:51:06 +09:00
parent 0211889636
commit 2fc4179052
2 changed files with 15 additions and 15 deletions

View File

@@ -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;
}

View File

@@ -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;
};