Files
lcbp3/specs/200-fullstacks/228-migration-arch-refactor/quickstart.md
T
admin a2973be208 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)
2026-05-22 17:10:07 +07:00

3.6 KiB

// File: specs/200-fullstacks/228-migration-arch-refactor/quickstart.md // Change Log: // - 2026-05-22: Phase 1 quickstart for ADR-028 Migration Architecture Refactor

Quickstart: ADR-028 Migration Architecture Refactor

Pre-requisites Checklist (ก่อนเริ่ม implement)

  • Branch 228-migration-arch-refactor ถูก checkout แล้ว
  • Staging DB พร้อม (MariaDB ตาม docker-compose)
  • Redis พร้อม (BullMQ)
  • Ollama บน Desk-5439 online — curl http://192.168.20.100:11434/api/tags → ได้ gemma4:e4b + nomic-embed-text
  • OCR Service (PaddleOCR container) บน Desk-5439 online

Scenario 1: Test POST /api/ai/jobs (MVP — US1)

# 1. ทดสอบ submit migration job
curl -X POST http://localhost:3000/api/ai/jobs \
  -H "Authorization: Bearer <MIGRATION_TOKEN>" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: test-001" \
  -d '{
    "type": "migrate-document",
    "payload": {
      "tempAttachmentId": "<uuid-ของ-temp-file>",
      "documentNumber": "LCP-GEN-COR-001-001",
      "title": "หนังสือทดสอบ",
      "existingTags": [],
      "systemCategories": ["Correspondence", "Drawing"],
      "batchId": "test_batch_001"
    }
  }'

# Expected: { "data": { "jobId": "...", "status": "queued" } }

# 2. Poll ผลลัพธ์
curl http://localhost:3000/api/ai/jobs/<jobId> \
  -H "Authorization: Bearer <MIGRATION_TOKEN>"

# Expected (after ~30s): { "data": { "status": "completed", "result": { "confidence": ..., "category": ... } } }

Scenario 2: Test Execute Import (US2)

# 1. ดึงรายการ PENDING จาก review queue
curl http://localhost:3000/api/ai/migration/review \
  -H "Authorization: Bearer <DC_OR_ADMIN_JWT>"

# 2. Execute Import
curl -X POST http://localhost:3000/api/ai/migration/review \
  -H "Authorization: Bearer <DC_OR_ADMIN_JWT>" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: commit-001" \
  -d '{
    "reviewQueueId": 1,
    "action": "approve",
    "overrideTags": []
  }'

# Expected: { "data": { "correspondencePublicId": "...", "tagsLinked": 2 } }

# 3. ตรวจสอบ RBAC (ต้อง 403)
curl -X POST http://localhost:3000/api/ai/migration/review \
  -H "Authorization: Bearer <VIEWER_JWT>" \
  ...
# Expected: 403 Forbidden

Scenario 3: Apply SQL Deltas (US3)

# Apply tags tables
mysql -h <DB_HOST> -u root -p lcbp3_production \
  < specs/03-Data-and-Storage/deltas/2026-05-22-create-tags-tables.sql

# Apply ai_job_id column
mysql -h <DB_HOST> -u root -p lcbp3_production \
  < specs/03-Data-and-Storage/deltas/2026-05-22-alter-migration-review-queue.sql

# Verify
mysql -e "DESCRIBE tags; DESCRIBE correspondence_tags; SHOW COLUMNS FROM migration_review_queue LIKE 'ai_job_id';" lcbp3_production

Scenario 4: Verify Temp File Auto-Cleanup

# ดู BullMQ scheduled jobs (admin UI หรือ Redis CLI)
redis-cli KEYS "bull:ai-batch:*cleanup*"

# ตรวจ temp files ที่ครบ 24h (สำหรับ test ปรับ interval เป็น 5 นาที)
mysql -e "SELECT id, created_at FROM attachments WHERE is_temporary=1 AND created_at < NOW() - INTERVAL 24 HOUR;" lcbp3_production

Reference Docs

ทำอะไร อ่านที่
API contracts contracts/ai-jobs-api.md
Data model / Schema data-model.md
Architecture decisions research.md
Full task list tasks.md
Migration docs specs/03-Data-and-Storage/03-04-legacy-data-migration.md