fix: 배포 후 버그 수정 — 테이블명/컬럼명 불일치, navbar active, API 검증 강화, 대시보드 통계 라우트 추가

- checkinModel: partner_checkins → partner_work_checkins, countActive() 추가
- workReportModel: partner_work_reports → daily_work_reports
- partner-portal: check_out_at/check_in_at → check_out_time/check_in_time
- checkinModel findTodayByCompany: LEFT JOIN has_work_report
- tkpurchase-core/tksafety-core: navbar match '' 제거
- checkinController: checkOut에 업무현황 검증, stats() 추가
- workReportController: checkin_id 필수 + schedule 일치 검증
- checkinRoutes: GET / 대시보드 통계 라우트 추가
- nginx.conf: visit.html → tksafety 리다이렉트
- migration-purchase-safety.sql: DDL 동기화
- migration-purchase-safety-patch.sql: 신규 패치

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
Hyungi Ahn
2026-03-13 07:22:25 +09:00
parent b800792152
commit efc3c14db5
11 changed files with 77 additions and 29 deletions

View File

@@ -4,7 +4,7 @@ async function findAll({ company_id, date_from, date_to, schedule_id, confirmed,
const db = getPool();
let sql = `SELECT wr.*, pc.company_name, ps.work_description AS schedule_description,
su_reporter.name AS reporter_name, su_confirmer.name AS confirmed_by_name
FROM partner_work_reports wr
FROM daily_work_reports wr
LEFT JOIN partner_companies pc ON wr.company_id = pc.id
LEFT JOIN partner_schedules ps ON wr.schedule_id = ps.id
LEFT JOIN sso_users su_reporter ON wr.reporter_id = su_reporter.user_id
@@ -30,7 +30,7 @@ async function findById(id) {
const [rows] = await db.query(
`SELECT wr.*, pc.company_name, ps.work_description AS schedule_description,
su_reporter.name AS reporter_name, su_confirmer.name AS confirmed_by_name
FROM partner_work_reports wr
FROM daily_work_reports wr
LEFT JOIN partner_companies pc ON wr.company_id = pc.id
LEFT JOIN partner_schedules ps ON wr.schedule_id = ps.id
LEFT JOIN sso_users su_reporter ON wr.reporter_id = su_reporter.user_id
@@ -43,7 +43,7 @@ async function findByCheckin(checkinId) {
const db = getPool();
const [rows] = await db.query(
`SELECT wr.*, pc.company_name
FROM partner_work_reports wr
FROM daily_work_reports wr
LEFT JOIN partner_companies pc ON wr.company_id = pc.id
WHERE wr.checkin_id = ?`, [checkinId]);
return rows[0] || null;
@@ -52,7 +52,7 @@ async function findByCheckin(checkinId) {
async function create(data) {
const db = getPool();
const [result] = await db.query(
`INSERT INTO partner_work_reports (schedule_id, checkin_id, company_id, report_date, reporter_id, actual_workers, work_content, progress_rate, issues, next_plan)
`INSERT INTO daily_work_reports (schedule_id, checkin_id, company_id, report_date, reporter_id, actual_workers, work_content, progress_rate, issues, next_plan)
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`,
[data.schedule_id || null, data.checkin_id || null, data.company_id,
data.report_date, data.reporter_id, data.actual_workers || null,
@@ -72,14 +72,14 @@ async function update(id, data) {
if (data.next_plan !== undefined) { fields.push('next_plan = ?'); values.push(data.next_plan || null); }
if (fields.length === 0) return findById(id);
values.push(id);
await db.query(`UPDATE partner_work_reports SET ${fields.join(', ')} WHERE id = ?`, values);
await db.query(`UPDATE daily_work_reports SET ${fields.join(', ')} WHERE id = ?`, values);
return findById(id);
}
async function confirm(id, confirmedBy) {
const db = getPool();
await db.query(
'UPDATE partner_work_reports SET confirmed_by = ?, confirmed_at = NOW() WHERE id = ? AND confirmed_by IS NULL',
'UPDATE daily_work_reports SET confirmed_by = ?, confirmed_at = NOW() WHERE id = ? AND confirmed_by IS NULL',
[confirmedBy, id]);
return findById(id);
}