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:
2026-05-22 17:10:07 +07:00
parent 990d80e16d
commit a2973be208
55 changed files with 4256 additions and 107 deletions
+9
View File
@@ -5,6 +5,7 @@
// - 2026-05-19: เพิ่ม IntentClassifierModule (ADR-024 Intent Classification).
// - 2026-05-19: เพิ่ม AiToolModule (ADR-025 AI Tool Layer).
// - 2026-05-21: ลงทะเบียน SystemSetting, AiSettingsService และ AiEnabledGuard สำหรับ ADR-027.
// - 2026-05-22: นำเข้าและลงทะเบียน CleanupTempFilesWorker (T016) เพื่อลบไฟล์แนบชั่วคราวหมดอายุ
// Module สำหรับ AI Gateway — ลงทะเบียน Services และ Controllers (ADR-023)
import { Logger, Module, OnModuleInit } from '@nestjs/common';
@@ -36,7 +37,10 @@ import { SystemSetting } from './entities/system-setting.entity';
import { AiEnabledGuard } from './guards/ai-enabled.guard';
import { UserModule } from '../user/user.module';
import { MigrationModule } from '../migration/migration.module';
import { TagsModule } from '../tags/tags.module';
import { FileStorageModule } from '../../common/file-storage/file-storage.module';
import { ImportTransaction } from '../migration/entities/import-transaction.entity';
import { MigrationReviewQueue } from '../migration/entities/migration-review-queue.entity';
import { AuditLogModule } from '../audit-log/audit-log.module';
import { AuditLog } from '../../common/entities/audit-log.entity';
import { Attachment } from '../../common/file-storage/entities/attachment.entity';
@@ -46,6 +50,7 @@ import { CorrespondenceType } from '../correspondence/entities/correspondence-ty
import { RbacGuard } from '../../common/guards/rbac.guard';
import { IntentClassifierModule } from './intent-classifier/intent-classifier.module';
import { AiToolModule } from './tool/ai-tool.module';
import { CleanupTempFilesWorker } from './workers/cleanup-temp-files.worker';
import {
QUEUE_AI_BATCH,
QUEUE_AI_INGEST,
@@ -67,6 +72,8 @@ import {
Project,
Organization,
CorrespondenceType,
ImportTransaction,
MigrationReviewQueue,
]),
BullModule.registerQueue(
@@ -108,6 +115,7 @@ import {
// UserModule สำหรับ RbacGuard (ต้องการ UserService)
UserModule,
MigrationModule,
TagsModule,
FileStorageModule,
AuditLogModule,
@@ -137,6 +145,7 @@ import {
// RbacGuard ต้องการ UserService จาก UserModule
RbacGuard,
AiEnabledGuard,
CleanupTempFilesWorker,
],
exports: [
AiService,