import { ContentStatus, VideoProvider } from '@prisma/client'; import { Type } from 'class-transformer'; import { IsArray, IsEnum, IsInt, IsOptional, IsString, Matches, Min, MinLength, } from 'class-validator'; export class ListInstructionsDto { @IsOptional() @Type(() => Number) @IsInt() @Min(1) page?: number; @IsOptional() @Type(() => Number) @IsInt() @Min(1) pageSize?: number; @IsOptional() @IsEnum(ContentStatus) status?: ContentStatus; @IsOptional() @IsEnum(VideoProvider) provider?: VideoProvider; @IsOptional() @IsString() categoryId?: string; @IsOptional() @IsString() title?: string; } export class ListPublicInstructionsDto { @IsOptional() @Type(() => Number) @IsInt() @Min(1) page?: number; @IsOptional() @Type(() => Number) @IsInt() @Min(1) pageSize?: number; @IsOptional() @IsEnum(VideoProvider) provider?: VideoProvider; @IsOptional() @IsString() categoryId?: string; @IsOptional() @IsString() title?: string; } export class CreateInstructionDto { @IsString() @MinLength(2) titleFa!: string; @IsOptional() @IsString() titleEn?: string; /** @deprecated use titleFa */ @IsOptional() @IsString() title?: string; @IsOptional() @IsString() abstract?: string; @IsOptional() @IsString() descriptionHtml?: string; @IsOptional() @IsEnum(VideoProvider) videoProvider?: VideoProvider; @IsOptional() @IsString() @MinLength(10) embedCode?: string; @IsOptional() @IsString() categoryId?: string; @IsOptional() @IsEnum(ContentStatus) status?: ContentStatus; @IsOptional() @IsString() featuredMediaId?: string; @IsOptional() @IsArray() @IsString({ each: true }) tags?: string[]; @IsOptional() @IsString() authorId?: string; @IsOptional() @IsString() @Matches(/^[a-z0-9]+(?:-[a-z0-9]+)*$/) slug?: string; } export class UpdateInstructionDto { @IsOptional() @IsString() @MinLength(2) titleFa?: string; @IsOptional() @IsString() titleEn?: string | null; /** @deprecated use titleFa */ @IsOptional() @IsString() title?: string; @IsOptional() @IsString() abstract?: string | null; @IsOptional() @IsString() descriptionHtml?: string | null; @IsOptional() @IsEnum(VideoProvider) videoProvider?: VideoProvider; @IsOptional() @IsString() @MinLength(10) embedCode?: string; @IsOptional() @IsString() categoryId?: string | null; @IsOptional() @IsEnum(ContentStatus) status?: ContentStatus; @IsOptional() @IsString() featuredMediaId?: string | null; @IsOptional() @IsArray() @IsString({ each: true }) tags?: string[]; @IsOptional() @IsString() authorId?: string | null; @IsOptional() @IsString() @Matches(/^[a-z0-9]+(?:-[a-z0-9]+)*$/) slug?: string; } export class CreateInstructionCommentDto { @IsString() @MinLength(2) authorName!: string; @IsOptional() @IsString() authorEmail?: string; @IsString() @MinLength(1) text!: string; }