import { ApiProperty, ApiPropertyOptional } from '@nestjs/swagger'; import { IsEnum, IsNotEmpty, IsString } from 'class-validator'; /** * V2 DTO for capturing car angle or damaged part */ export class CapturePartV2Dto { @ApiProperty({ description: 'Type of capture: angle or part', example: 'angle', enum: ['angle', 'part'], }) @IsNotEmpty({ message: 'Capture type is required' }) @IsEnum(['angle', 'part'], { message: 'Capture type must be either "angle" or "part"', }) captureType: 'angle' | 'part'; @ApiProperty({ description: 'When captureType is angle: front | back | left | right. When part: catalog id as string (e.g. "101"), 0-based index (e.g. "0"), or full catalog key (e.g. left_backfender). Prefer id or index for parts.', example: 'front', }) @IsNotEmpty({ message: 'Capture key is required' }) @IsString({ message: 'Capture key must be a string' }) captureKey: string; @ApiProperty({ type: 'string', format: 'binary', description: 'Image file (JPG, PNG)', }) file: Express.Multer.File; } /** * Response DTO for capture part V2 */ export class CapturePartV2ResponseDto { @ApiProperty({ description: 'Claim request ID', example: '507f1f77bcf86cd799439011', }) claimRequestId: string; @ApiProperty({ description: 'Type of capture', example: 'angle', }) captureType: string; @ApiProperty({ description: 'Key of what was captured', example: 'front', }) captureKey: string; @ApiProperty({ description: 'File URL', example: 'http://localhost:3000/files/captures/front-1234567890.jpg', }) fileUrl: string; @ApiProperty({ description: 'Whether all captures are now complete', example: false, }) allCapturesComplete: boolean; @ApiProperty({ description: 'Current workflow step', example: 'CAPTURE_PART_DAMAGES', }) currentStep: string; @ApiProperty({ description: 'Success message', example: 'Angle captured successfully. 6 captures remaining.', }) message: string; @ApiPropertyOptional({ description: 'True when expert-requested part resends are complete and the claim returned to the expert queue.', }) expertResendComplete?: boolean; } /** * Response DTO for car walk-around video upload (V2) */ export class VideoCaptureV2ResponseDto { @ApiProperty({ description: 'Claim case ID', example: '507f1f77bcf86cd799439011', }) claimRequestId: string; @ApiProperty({ description: 'ID of the stored video document (claim-video-capture)', example: '507f1f77bcf86cd799439012', }) videoId: string; @ApiProperty({ description: 'Success message', example: 'Video capture uploaded successfully.', }) message: string; }