diff --git a/scripts/migration-purchase-safety-patch.sql b/scripts/migration-purchase-safety-patch.sql index 093bbf3..8c65011 100644 --- a/scripts/migration-purchase-safety-patch.sql +++ b/scripts/migration-purchase-safety-patch.sql @@ -6,6 +6,27 @@ ALTER TABLE partner_work_checkins MODIFY check_in_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP; --- 4-b. 일정당 하루 1건 업무보고 보장 -ALTER TABLE daily_work_reports - ADD UNIQUE INDEX uq_schedule_report_date (schedule_id, report_date); +-- 4-b. partner_work_reports 테이블 생성 (daily_work_reports 이름 충돌 → 별도 이름) +CREATE TABLE IF NOT EXISTS partner_work_reports ( + id INT AUTO_INCREMENT PRIMARY KEY, + schedule_id INT NOT NULL, + checkin_id INT NOT NULL, + company_id INT NOT NULL, + report_date DATE NOT NULL, + reporter_id INT NOT NULL, + actual_workers INT, + work_content TEXT, + progress_rate TINYINT, + issues TEXT, + next_plan TEXT, + confirmed_by INT, + confirmed_at DATETIME, + created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + INDEX idx_pwr_report_date (report_date), + INDEX idx_pwr_schedule (schedule_id), + UNIQUE INDEX uq_pwr_schedule_report_date (schedule_id, report_date), + CONSTRAINT fk_pwr_schedule FOREIGN KEY (schedule_id) REFERENCES partner_schedules(id), + CONSTRAINT fk_pwr_checkin FOREIGN KEY (checkin_id) REFERENCES partner_work_checkins(id), + CONSTRAINT fk_pwr_company FOREIGN KEY (company_id) REFERENCES partner_companies(id) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; diff --git a/scripts/migration-purchase-safety.sql b/scripts/migration-purchase-safety.sql index 3bccef2..0d4d628 100644 --- a/scripts/migration-purchase-safety.sql +++ b/scripts/migration-purchase-safety.sql @@ -98,9 +98,9 @@ CREATE TABLE IF NOT EXISTS partner_work_checkins ( ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; -- ============================================================ --- 5. daily_work_reports (일일 작업 보고) +-- 5. partner_work_reports (협력업체 일일 작업 보고) -- ============================================================ -CREATE TABLE IF NOT EXISTS daily_work_reports ( +CREATE TABLE IF NOT EXISTS partner_work_reports ( id INT AUTO_INCREMENT PRIMARY KEY, schedule_id INT NOT NULL, checkin_id INT NOT NULL, diff --git a/tkpurchase/api/models/checkinModel.js b/tkpurchase/api/models/checkinModel.js index 100e4b1..7eae82d 100644 --- a/tkpurchase/api/models/checkinModel.js +++ b/tkpurchase/api/models/checkinModel.js @@ -30,7 +30,7 @@ async function findTodayByCompany(companyId) { (dwr.id IS NOT NULL) AS has_work_report FROM partner_work_checkins pc LEFT JOIN partner_schedules ps ON pc.schedule_id = ps.id - LEFT JOIN daily_work_reports dwr ON dwr.checkin_id = pc.id + LEFT JOIN partner_work_reports dwr ON dwr.checkin_id = pc.id WHERE pc.company_id = ? AND DATE(pc.check_in_time) = CURDATE() ORDER BY pc.check_in_time DESC`, [companyId]); return rows; diff --git a/tkpurchase/api/models/workReportModel.js b/tkpurchase/api/models/workReportModel.js index 4c8fdac..1b90801 100644 --- a/tkpurchase/api/models/workReportModel.js +++ b/tkpurchase/api/models/workReportModel.js @@ -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 daily_work_reports wr + FROM partner_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 daily_work_reports wr + FROM partner_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 daily_work_reports wr + FROM partner_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 daily_work_reports (schedule_id, checkin_id, company_id, report_date, reporter_id, actual_workers, work_content, progress_rate, issues, next_plan) + `INSERT INTO partner_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 daily_work_reports SET ${fields.join(', ')} WHERE id = ?`, values); + await db.query(`UPDATE partner_work_reports SET ${fields.join(', ')} WHERE id = ?`, values); return findById(id); } async function confirm(id, confirmedBy) { const db = getPool(); await db.query( - 'UPDATE daily_work_reports SET confirmed_by = ?, confirmed_at = NOW() WHERE id = ? AND confirmed_by IS NULL', + 'UPDATE partner_work_reports SET confirmed_by = ?, confirmed_at = NOW() WHERE id = ? AND confirmed_by IS NULL', [confirmedBy, id]); return findById(id); }