feat(migration): ADR-028 migration architecture refactor
- เพิ่ม POST /api/ai/jobs + GET /api/ai/jobs/:jobId endpoints (FR-001, FR-002) - เพิ่ม BullMQ Worker MigrateDocumentWorker + OCR auto-detect (FR-003, FR-004) - เพิ่ม cleanup-temp-files + expire-pending-reviews workers (FR-005, FR-005a/b) - สร้าง SQL deltas: tags, correspondence_tags, alter migration_review_queue (FR-006, ADR-009) - เพิ่ม MigrationReviewService.commitRecord() + SELECT FOR UPDATE (FR-007, FR-007a) - เพิ่ม CASL permission migration.commit + MigrationReviewController (FR-007) - สร้าง TagsModule + TagsService + TagsController (US3) - สร้าง Migration Review Queue frontend page + ReviewQueueTable (US2) - อัปเดต n8n guide: deterministic Idempotency-Key + token pre-flight (FR-001a, FR-010a/b) - สร้าง spec.md, plan.md, tasks.md, data-model.md, contracts/, quickstart.md - สร้าง ADR-028 document + validation-report.md (PASS 32/32 tasks, 173/173 tests)
This commit is contained in:
@@ -0,0 +1,14 @@
|
||||
-- File: specs/03-Data-and-Storage/deltas/2026-05-22-alter-migration-review-queue.rollback.sql
|
||||
-- Change Log:
|
||||
-- - 2026-05-22: ลบคอลัมน์ ai_job_id ออกจากตาราง migration_review_queue ตาม ADR-028
|
||||
|
||||
-- Delta Rollback: ลบคอลัมน์ ai_job_id ในตาราง migration_review_queue
|
||||
-- Date: 2026-05-22
|
||||
-- Related ADR: ADR-028, ADR-023A
|
||||
|
||||
-- ------------------------------------------------------------
|
||||
-- การลบคอลัมน์ (Rollback changes)
|
||||
-- ------------------------------------------------------------
|
||||
|
||||
ALTER TABLE migration_review_queue
|
||||
DROP COLUMN ai_job_id;
|
||||
@@ -0,0 +1,16 @@
|
||||
-- File: specs/03-Data-and-Storage/deltas/2026-05-22-alter-migration-review-queue.sql
|
||||
-- Change Log:
|
||||
-- - 2026-05-22: เพิ่มคอลัมน์ ai_job_id ในตาราง migration_review_queue ตาม ADR-028
|
||||
|
||||
-- Delta: เพิ่มคอลัมน์ ai_job_id ในตาราง migration_review_queue
|
||||
-- Date: 2026-05-22
|
||||
-- Related ADR: ADR-028, ADR-023A
|
||||
-- Applied in: v1.9.0 -> v1.9.5
|
||||
|
||||
-- ------------------------------------------------------------
|
||||
-- การปรับปรุงตาราง migration_review_queue (Schema changes)
|
||||
-- ------------------------------------------------------------
|
||||
|
||||
ALTER TABLE migration_review_queue
|
||||
ADD COLUMN ai_job_id VARCHAR(36) NULL COMMENT 'BullMQ Job ID สำหรับงานประมวลผล AI'
|
||||
AFTER storage_temp_path;
|
||||
@@ -0,0 +1,14 @@
|
||||
-- File: specs/03-Data-and-Storage/deltas/2026-05-22-create-tags-tables.rollback.sql
|
||||
-- Change Log:
|
||||
-- - 2026-05-22: ย้อนกลับตาราง tags และ correspondence_tags ตาม ADR-028
|
||||
|
||||
-- Delta Rollback: ลบตาราง tags และ correspondence_tags
|
||||
-- Date: 2026-05-22
|
||||
-- Related ADR: ADR-028
|
||||
|
||||
-- ------------------------------------------------------------
|
||||
-- การลบตาราง (Rollback changes)
|
||||
-- ------------------------------------------------------------
|
||||
|
||||
DROP TABLE IF EXISTS correspondence_tags;
|
||||
DROP TABLE IF EXISTS tags;
|
||||
@@ -0,0 +1,47 @@
|
||||
-- File: specs/03-Data-and-Storage/deltas/2026-05-22-create-tags-tables.sql
|
||||
-- Change Log:
|
||||
-- - 2026-05-22: สร้างตาราง tags และ correspondence_tags ตาม ADR-028
|
||||
|
||||
-- Delta: สร้างตาราง tags และ correspondence_tags
|
||||
-- Date: 2026-05-22
|
||||
-- Related ADR: ADR-028, ADR-019
|
||||
-- Applied in: v1.9.0 -> v1.9.5
|
||||
|
||||
-- ------------------------------------------------------------
|
||||
-- การสร้างตาราง tags (Schema changes)
|
||||
-- ------------------------------------------------------------
|
||||
|
||||
CREATE TABLE IF NOT EXISTS tags (
|
||||
id INT PRIMARY KEY AUTO_INCREMENT COMMENT 'ID ภายในระบบ',
|
||||
public_id CHAR(36) NOT NULL UNIQUE COMMENT 'UUIDv7 สำหรับการใช้งานภายนอก (ADR-019)',
|
||||
project_id INT NULL COMMENT 'ID โครงการ (NULL = Global Tag)',
|
||||
tag_name VARCHAR(100) NOT NULL COMMENT 'ชื่อแท็ก',
|
||||
color_code VARCHAR(30) DEFAULT 'default' COMMENT 'รหัสสีสำหรับ UI',
|
||||
description TEXT COMMENT 'คำอธิบายเพิ่มเติม',
|
||||
created_by INT COMMENT 'ผู้สร้างแท็ก',
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT 'วันที่สร้าง',
|
||||
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'วันที่แก้ไขล่าสุด',
|
||||
deleted_at TIMESTAMP NULL COMMENT 'วันที่ลบ (Soft Delete)',
|
||||
FOREIGN KEY (project_id) REFERENCES projects(id) ON DELETE CASCADE,
|
||||
FOREIGN KEY (created_by) REFERENCES users(user_id) ON DELETE SET NULL,
|
||||
UNIQUE KEY uq_tag_project (project_id, tag_name),
|
||||
INDEX idx_tags_deleted_at (deleted_at)
|
||||
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = 'ตารางเก็บข้อมูลแท็กจัดหมวดหมู่เอกสาร';
|
||||
|
||||
-- ------------------------------------------------------------
|
||||
-- การสร้างตาราง correspondence_tags (Schema changes)
|
||||
-- ------------------------------------------------------------
|
||||
|
||||
CREATE TABLE IF NOT EXISTS correspondence_tags (
|
||||
correspondence_id INT NOT NULL COMMENT 'ID ของเอกสาร',
|
||||
tag_id INT NOT NULL COMMENT 'ID ของแท็ก',
|
||||
is_ai_suggested BOOLEAN DEFAULT FALSE COMMENT 'แท็กนี้แนะนำโดย AI หรือไม่',
|
||||
confidence DECIMAL(4,3) NULL COMMENT 'ค่าความมั่นใจของ AI (0.000–1.000)',
|
||||
created_by INT COMMENT 'ผู้เชื่อมโยงแท็ก',
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT 'วันที่เชื่อมโยง',
|
||||
PRIMARY KEY (correspondence_id, tag_id),
|
||||
FOREIGN KEY (correspondence_id) REFERENCES correspondences(id) ON DELETE CASCADE,
|
||||
FOREIGN KEY (tag_id) REFERENCES tags(id) ON DELETE CASCADE,
|
||||
FOREIGN KEY (created_by) REFERENCES users(user_id) ON DELETE SET NULL,
|
||||
INDEX idx_correspondence_tags_lookup (tag_id)
|
||||
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = 'ตารางเชื่อมโยงความสัมพันธ์แบบ M:N ระหว่างเอกสารและแท็ก';
|
||||
@@ -0,0 +1,95 @@
|
||||
-- File: specs/03-Data-and-Storage/deltas/2026-05-22-drop-migration-tables.rollback.sql
|
||||
-- Change Log:
|
||||
-- - 2026-05-22: กู้คืนโครงสร้างตาราง staging ทั้งหมด 5 ตารางสำหรับระบบย้ายข้อมูลกรณีเกิดเหตุฉุกเฉิน (Phase 6)
|
||||
|
||||
-- Delta Rollback: กู้คืนตาราง Staging ชั่วคราว (Recreate Staging Tables)
|
||||
-- Date: 2026-05-22
|
||||
-- Related ADR: ADR-028
|
||||
|
||||
-- ------------------------------------------------------------
|
||||
-- การกู้คืนตาราง Staging ทั้งหมด 5 ตาราง
|
||||
-- ------------------------------------------------------------
|
||||
|
||||
-- 1. กู้คืนตารางความคืบหน้าของ Migration Progress
|
||||
CREATE TABLE IF NOT EXISTS migration_progress (
|
||||
batch_id VARCHAR(50) PRIMARY KEY,
|
||||
last_processed_index INT DEFAULT 0,
|
||||
STATUS ENUM('RUNNING', 'COMPLETED', 'FAILED') DEFAULT 'RUNNING',
|
||||
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
|
||||
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = 'Migration: Batch Progress';
|
||||
|
||||
-- 2. กู้คืนตารางคิวตรวจสอบสำหรับเอกสาร (Review Queue)
|
||||
CREATE TABLE IF NOT EXISTS migration_review_queue (
|
||||
id INT NOT NULL AUTO_INCREMENT,
|
||||
uuid CHAR(36) NOT NULL DEFAULT (uuid()) COMMENT 'UUID Public Identifier (ADR-019)',
|
||||
document_number VARCHAR(100) NOT NULL,
|
||||
subject TEXT COMMENT 'หัวข้อเรื่องภาษาไทยหรืออังกฤษ',
|
||||
original_subject TEXT COMMENT 'หัวข้อเรื่องเดิมจากระบบจัดเก็บเดิม',
|
||||
body TEXT NULL COMMENT 'เนื้อความย่อจาก AI',
|
||||
ai_suggested_category VARCHAR(50),
|
||||
ai_confidence DECIMAL(4, 3),
|
||||
ai_issues JSON,
|
||||
review_reason VARCHAR(255),
|
||||
status ENUM('PENDING', 'APPROVED', 'IMPORTED', 'REJECTED') NOT NULL DEFAULT 'PENDING',
|
||||
reviewed_by VARCHAR(100),
|
||||
reviewed_at TIMESTAMP NULL,
|
||||
project_id INT NULL COMMENT 'Project ID ของโครงการ',
|
||||
sender_organization_id INT NULL COMMENT 'Sender ID ของผู้ส่ง',
|
||||
receiver_organization_id INT NULL COMMENT 'Receiver ID ของผู้รับ',
|
||||
received_date DATE NULL,
|
||||
issued_date DATE NULL,
|
||||
remarks TEXT,
|
||||
ai_summary TEXT,
|
||||
extracted_tags JSON,
|
||||
temp_attachment_id INT NULL,
|
||||
ai_job_id VARCHAR(36) NULL COMMENT 'BullMQ Job ID สำหรับงานประมวลผล AI',
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
PRIMARY KEY (id),
|
||||
UNIQUE KEY uq_doc_number (document_number),
|
||||
UNIQUE KEY uq_migration_review_uuid (uuid)
|
||||
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = 'Migration: Review Queue';
|
||||
|
||||
-- 3. กู้คืนตารางแสดงประวัติข้อผิดพลาดการย้ายข้อมูล (Error Log)
|
||||
CREATE TABLE IF NOT EXISTS migration_errors (
|
||||
id INT AUTO_INCREMENT PRIMARY KEY,
|
||||
batch_id VARCHAR(50),
|
||||
document_number VARCHAR(100),
|
||||
error_type ENUM(
|
||||
'FILE_NOT_FOUND',
|
||||
'MISSING_FILENAME',
|
||||
'FILE_ERROR',
|
||||
'AI_PARSE_ERROR',
|
||||
'API_ERROR',
|
||||
'DB_ERROR',
|
||||
'SECURITY',
|
||||
'UNKNOWN'
|
||||
),
|
||||
error_message TEXT,
|
||||
raw_ai_response TEXT,
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
INDEX idx_batch_id (batch_id),
|
||||
INDEX idx_error_type (error_type)
|
||||
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = 'Migration: Error Log';
|
||||
|
||||
-- 4. กู้คืนตารางสถานะสำหรับ AI Model Fallback State
|
||||
CREATE TABLE IF NOT EXISTS migration_fallback_state (
|
||||
id INT AUTO_INCREMENT PRIMARY KEY,
|
||||
batch_id VARCHAR(50) UNIQUE,
|
||||
recent_error_count INT DEFAULT 0,
|
||||
is_fallback_active BOOLEAN DEFAULT FALSE,
|
||||
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
|
||||
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = 'Migration: Fallback Model State';
|
||||
|
||||
-- 5. กู้คืนตารางแสดงข้อมูลสรุปรายวันของ Migration (Daily Summary)
|
||||
CREATE TABLE IF NOT EXISTS migration_daily_summary (
|
||||
id INT AUTO_INCREMENT PRIMARY KEY,
|
||||
batch_id VARCHAR(50),
|
||||
summary_date DATE,
|
||||
total_processed INT DEFAULT 0,
|
||||
auto_ingested INT DEFAULT 0,
|
||||
sent_to_review INT DEFAULT 0,
|
||||
rejected INT DEFAULT 0,
|
||||
errors INT DEFAULT 0,
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
UNIQUE KEY uq_batch_date (batch_id, summary_date)
|
||||
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = 'Migration: Daily Summary';
|
||||
@@ -0,0 +1,26 @@
|
||||
-- File: specs/03-Data-and-Storage/deltas/2026-05-22-drop-migration-tables.sql
|
||||
-- Change Log:
|
||||
-- - 2026-05-22: ดรอปตาราง staging ทั้งหมดหลังย้ายข้อมูลเสร็จสิ้น (Phase 6) โดยยังคงรักษาตาราง import_transactions ไว้ป้องกันการย้ายข้อมูลซ้ำ
|
||||
|
||||
-- Delta: ดรอปตาราง Staging ชั่วคราว (Post-Migration Cleanup)
|
||||
-- Date: 2026-05-22
|
||||
-- Related ADR: ADR-028
|
||||
|
||||
-- ------------------------------------------------------------
|
||||
-- การล้างตาราง Staging เพื่อประหยัดพื้นที่ระบบจัดเก็บข้อมูล (Cleanups)
|
||||
-- ------------------------------------------------------------
|
||||
|
||||
-- ลบตารางแสดงข้อมูลสรุปรายวันของ Migration
|
||||
DROP TABLE IF EXISTS migration_daily_summary;
|
||||
|
||||
-- ลบตารางสถานะสำหรับ AI Model Fallback State
|
||||
DROP TABLE IF EXISTS migration_fallback_state;
|
||||
|
||||
-- ลบตารางแสดงประวัติข้อผิดพลาดการย้ายข้อมูล
|
||||
DROP TABLE IF EXISTS migration_errors;
|
||||
|
||||
-- ลบตารางคิวตรวจสอบสำหรับเอกสาร
|
||||
DROP TABLE IF EXISTS migration_review_queue;
|
||||
|
||||
-- ลบตารางความคืบหน้าของ Migration Progress
|
||||
DROP TABLE IF EXISTS migration_progress;
|
||||
Reference in New Issue
Block a user