a2973be208
- เพิ่ม 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)
115 lines
3.6 KiB
Markdown
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` |
|