Module 05
ââ Moyen
~2h
â SystĂšme de Formulaires Dynamiques
Créer une API de formulaires dynamiques avec validation stricte, DTOs imbriqués, pipes personnalisés et sérialisation des réponses.
đ§ DTOs Ă crĂ©er
// Champ de formulaire
export class FormFieldDto {
@IsString() @IsNotEmpty() name: string;
@IsEnum(['text', 'email', 'number', 'date', 'select', 'checkbox']) type: string;
@IsString() @IsNotEmpty() label: string;
@IsBoolean() required: boolean;
@IsOptional() @IsArray() @IsString({ each: true }) options?: string[]; // Pour 'select'
@IsOptional() @Min(0) minLength?: number;
@IsOptional() @Max(10000) maxLength?: number;
}
// Formulaire complet
export class CreateFormDto {
@IsString() @MinLength(3) @MaxLength(100) title: string;
@IsOptional() @IsString() @MaxLength(500) description?: string;
@IsArray() @ArrayMinSize(1) @ValidateNested({ each: true }) @Type(() => FormFieldDto)
fields: FormFieldDto[];
@IsBoolean() isPublic: boolean;
@IsOptional() @IsDateString() expiresAt?: string;
}
// Réponse à un formulaire
export class SubmitFormDto {
@IsObject() @IsNotEmpty() responses: Record<string, any>;
}
â FonctionnalitĂ©s
- CRUD formulaires avec DTOs imbriqués (FormField)
- Validation conditionnelle selon le type de champ
- Pipe
SlugifyPipepour générer le slug depuis le titre - DTO de réponse qui exclut les champs sensibles (
@Exclude) - Validation des réponses contre le schéma du formulaire
- Stats : nombre de soumissions, taux de complétion