hunk.code_window:       - name: Generate new migrations
           continue-on-error: true
           run: npm --prefix server run typeorm:migrations:generate ./src/infra/migrations/TestMigration
         - name: Find file changes
           uses: tj-actions/verify-changed-files@v13.1
           id: verify-changed-files
           with:
             files: |
  
hunk.labels: keep keep replace keep keep keep keep keep
hunk.after_edit:         run: npm run typeorm:migrations:generate ./src/infra/migrations/TestMigration
  
hunk.file_path: .github/workflows/test.yml
hunk.type: replace
file: import { ApiProperty } from '@nestjs/swagger';
  import { IsBoolean, IsEnum, IsNotEmpty } from 'class-validator';
  import { Optional } from '../domain.util';
  import { JobCommand, QueueName } from './job.constants';
  
  export class JobIdParamDto {
    @IsNotEmpty()
    @IsEnum(QueueName)
    @ApiProperty({ type: String, enum: QueueName, enumName: 'JobName' })
    id!: QueueName;
  }
  
  export class JobCommandDto {
    @IsNotEmpty()
    @IsEnum(JobCommand)
    @ApiProperty({ type: 'string', enum: JobCommand, enumName: 'JobCommand' })
    command!: JobCommand;
  
    @Optional()
    @IsBoolean()
    force!: boolean;
  }
  
  export class JobCountsDto {
    @ApiProperty({ type: 'integer' })
    active!: number;
    @ApiProperty({ type: 'integer' })
    completed!: number;
    @ApiProperty({ type: 'integer' })
    failed!: number;
    @ApiProperty({ type: 'integer' })
    delayed!: number;
    @ApiProperty({ type: 'integer' })
    waiting!: number;
    @ApiProperty({ type: 'integer' })
    paused!: number;
  }
  
  export class QueueStatusDto {
    isActive!: boolean;
    isPaused!: boolean;
  }
  
  export class JobStatusDto {
    @ApiProperty({ type: JobCountsDto })
    jobCounts!: JobCountsDto;
  
    @ApiProperty({ type: QueueStatusDto })
    queueStatus!: QueueStatusDto;
  }
  
  export class AllJobStatusResponseDto implements Record<QueueName, JobStatusDto> {
    @ApiProperty({ type: JobStatusDto })
    [QueueName.THUMBNAIL_GENERATION]!: JobStatusDto;
  
    @ApiProperty({ type: JobStatusDto })
    [QueueName.METADATA_EXTRACTION]!: JobStatusDto;
  
    @ApiProperty({ type: JobStatusDto })
    [QueueName.VIDEO_CONVERSION]!: JobStatusDto;
  
    @ApiProperty({ type: JobStatusDto })
    [QueueName.OBJECT_TAGGING]!: JobStatusDto;
  
    @ApiProperty({ type: JobStatusDto })
    [QueueName.CLIP_ENCODING]!: JobStatusDto;
  
    @ApiProperty({ type: JobStatusDto })
    [QueueName.STORAGE_TEMPLATE_MIGRATION]!: JobStatusDto;
  
    @ApiProperty({ type: JobStatusDto })
    [QueueName.MIGRATION]!: JobStatusDto;
  
    @ApiProperty({ type: JobStatusDto })
    [QueueName.BACKGROUND_TASK]!: JobStatusDto;
  
    @ApiProperty({ type: JobStatusDto })
    [QueueName.SEARCH]!: JobStatusDto;
  
    @ApiProperty({ type: JobStatusDto })
    [QueueName.RECOGNIZE_FACES]!: JobStatusDto;
  
    @ApiProperty({ type: JobStatusDto })
    [QueueName.SIDECAR]!: JobStatusDto;
  
    @ApiProperty({ type: JobStatusDto })
    [QueueName.LIBRARY]!: JobStatusDto;
  }
  