Files
lcbp3/backend/src/modules/ai/dto/submit-ai-job.dto.ts
T
admin 4391bbe61d
CI / CD Pipeline / build (push) Failing after 4m14s
CI / CD Pipeline / deploy (push) Has been skipped
690528:1524 ADR-030-230 context aware #02
2026-05-28 15:24:41 +07:00

122 lines
3.5 KiB
TypeScript

// File: src/modules/ai/dto/submit-ai-job.dto.ts
// Change Log:
// - 2026-05-22: สร้าง SubmitAiJobDto สำหรับรับงานประมวลผลการย้ายเอกสารของ AI (ADR-028)
import { ApiProperty, ApiPropertyOptional } from '@nestjs/swagger';
import {
IsUUID,
IsString,
IsNotEmpty,
IsOptional,
IsArray,
ValidateNested,
IsObject,
IsIn,
} from 'class-validator';
import { Type } from 'class-transformer';
/**
* ตัวเลือกแท็กประกอบการวิเคราะห์ของ AI
*/
export class TagOptionDto {
@ApiPropertyOptional({ description: 'UUID ของแท็กที่มีอยู่แล้วในโครงการ' })
@IsUUID()
@IsOptional()
publicId?: string;
@ApiProperty({ description: 'ชื่อแท็ก' })
@IsString()
@IsNotEmpty()
tagName!: string;
@ApiPropertyOptional({ description: 'รหัสสีของแท็ก' })
@IsString()
@IsOptional()
colorCode?: string;
}
/**
* ตัวกรองบริบท Master Data สำหรับ Migration AI โดยใช้ public UUID เท่านั้น
*/
export class MigrationContextOverrideDto {
@ApiPropertyOptional({ description: 'UUID สาธารณะของโครงการ' })
@IsUUID()
@IsOptional()
projectPublicId?: string;
@ApiPropertyOptional({ description: 'UUID สาธารณะของสัญญา' })
@IsUUID()
@IsOptional()
contractPublicId?: string;
}
/**
* Payload ข้อมูลเอกสารเก่าสำหรับการทำ Migration
*/
export class MigrateDocumentPayloadDto {
@ApiProperty({ description: 'UUID ของ temp attachment ในระบบ' })
@IsUUID()
tempAttachmentId!: string;
@ApiProperty({ description: 'เลขที่เอกสารเก่า' })
@IsString()
@IsNotEmpty()
documentNumber!: string;
@ApiProperty({ description: 'ชื่อเรื่องเอกสาร' })
@IsString()
@IsNotEmpty()
title!: string;
@ApiProperty({
type: [TagOptionDto],
description: 'รายการแท็กโครงการที่มีอยู่ก่อนแล้ว',
})
@IsArray()
@IsOptional()
@ValidateNested({ each: true })
@Type(() => TagOptionDto)
existingTags?: TagOptionDto[];
@ApiProperty({ type: [String], description: 'หมวดหมู่เอกสารหลักที่มีในระบบ' })
@IsArray()
@IsString({ each: true })
@IsOptional()
systemCategories?: string[];
@ApiProperty({ description: 'รหัสกลุ่มการนำเข้า (Batch ID)' })
@IsString()
@IsNotEmpty()
batchId!: string;
@ApiPropertyOptional({
type: MigrationContextOverrideDto,
description: 'ตัวกรอง Master Data Context ตาม ADR-030',
})
@IsObject()
@ValidateNested()
@Type(() => MigrationContextOverrideDto)
@IsOptional()
contextOverride?: MigrationContextOverrideDto;
}
/**
* DTO สำหรับส่งคำขอเปิดงานประมวลผล AI (AI processing job submission)
*/
export class SubmitAiJobDto {
@ApiProperty({
example: 'migrate-document',
description: 'ชนิดงานประมวลผล AI',
})
@IsString()
@IsNotEmpty()
@IsIn(['migrate-document'])
type!: string;
@ApiProperty({ type: MigrateDocumentPayloadDto })
@IsObject()
@ValidateNested()
@Type(() => MigrateDocumentPayloadDto)
payload!: MigrateDocumentPayloadDto;
}