import { ApiProperty, ApiPropertyOptional } from '@nestjs/swagger'; import { IsBoolean, IsInt, IsOptional, IsString, IsUUID, MaxLength, Min } from 'class-validator'; const ROLES = ['LINE_STAFF', 'DIRECTOR', 'CEO'] as const; export class CreateApprovalRuleDto { @ApiProperty({ description: 'True = Director+CEO chain; False = LineStaff+Director chain' }) @IsBoolean() requiresDirectorApproval!: boolean; @ApiPropertyOptional({ description: 'Step sequence number (auto-assigned if omitted)', minimum: 1 }) @IsOptional() @IsInt() @Min(1) stepOrder?: number; @ApiPropertyOptional({ description: 'Insert after this step ID within the same chain' }) @IsOptional() @IsUUID('4') insertAfterId?: string; @ApiProperty({ enum: ROLES, description: 'Role required to action this step' }) @IsString() @MaxLength(30) requiredRole!: string; @ApiProperty({ description: 'Label shown in UI, e.g. "Review & Approve"', maxLength: 50 }) @IsString() @MaxLength(50) actionLabel!: string; @ApiPropertyOptional({ enum: ROLES, description: 'Role explicitly blocked from actioning this step' }) @IsOptional() @IsString() @MaxLength(30) blocksRole?: string; }