import { ApiProperty } from '@nestjs/swagger'; import { IsString, IsNotEmpty, IsOptional, IsEnum, IsDateString, IsBoolean, MinLength, MaxLength, } from 'class-validator'; import { GenreType } from 'src/entities/children.entity'; export class EnfantInscriptionDto { @ApiProperty({ example: 'Emma', required: false, description: 'Prénom de l\'enfant (obligatoire si déjà né)' }) @IsOptional() @IsString() @MinLength(2, { message: 'Le prénom doit contenir au moins 2 caractères' }) @MaxLength(100, { message: 'Le prénom ne peut pas dépasser 100 caractères' }) prenom?: string; @ApiProperty({ example: 'MARTIN', required: false, description: 'Nom de l\'enfant (hérité des parents si non fourni)' }) @IsOptional() @IsString() @MinLength(2, { message: 'Le nom doit contenir au moins 2 caractères' }) @MaxLength(100, { message: 'Le nom ne peut pas dépasser 100 caractères' }) nom?: string; @ApiProperty({ example: '2023-02-15', required: false, description: 'Date de naissance (si enfant déjà né)' }) @IsOptional() @IsDateString() date_naissance?: string; @ApiProperty({ example: '2025-06-15', required: false, description: 'Date prévisionnelle de naissance (si enfant à naître)' }) @IsOptional() @IsDateString() date_previsionnelle_naissance?: string; @ApiProperty({ enum: GenreType, example: GenreType.F }) @IsEnum(GenreType, { message: 'Le genre doit être H, F ou Autre' }) @IsNotEmpty({ message: 'Le genre est requis' }) genre: GenreType; @ApiProperty({ example: 'data:image/jpeg;base64,/9j/4AAQSkZJRg...', required: false, description: 'Photo de l\'enfant en base64 (obligatoire si déjà né)' }) @IsOptional() @IsString() photo_base64?: string; @ApiProperty({ example: 'emma_martin.jpg', required: false, description: 'Nom du fichier photo' }) @IsOptional() @IsString() photo_filename?: string; @ApiProperty({ example: false, required: false, description: 'Grossesse multiple (jumeaux, triplés, etc.)' }) @IsOptional() @IsBoolean() grossesse_multiple?: boolean; @ApiProperty({ example: true, required: false, description: 'Consentement affichage / stockage photo (colonne enfants.consentement_photo)', }) @IsOptional() @IsBoolean() consent_photo?: boolean; }