Files
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

115 lines
3.6 KiB
Markdown

// 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)
```bash
# 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)
```bash
# 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)
```bash
# 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
```bash
# ดู 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` |