diff --git a/src/routes/user/dto/create_user.dto.ts b/src/routes/user/dto/create_user.dto.ts new file mode 100644 index 0000000..68b9a97 --- /dev/null +++ b/src/routes/user/dto/create_user.dto.ts @@ -0,0 +1,85 @@ +import { ApiProperty } from '@nestjs/swagger'; +import { + IsBoolean, + IsDateString, + IsEmail, + IsEnum, + IsNotEmpty, + IsOptional, + IsString, + MinLength, + MaxLength +} from 'class-validator'; +import { RoleType, GenreType, StatutUtilisateurType } from 'src/entities/users.entity'; + +export class CreateUserDto { + @ApiProperty({ example: 'sosso.test@example.com' }) + @IsEmail() + @IsNotEmpty() + email: string; + + @ApiProperty({ + minLength: 6, + description: 'Mot de passe en clair (hashé côté serveur)' + }) + @IsString() + @MinLength(6) + password: string; + + @ApiProperty({ example: 'Julien' }) + @IsString() + @IsNotEmpty() + @MaxLength(100) + first_name: string; + + @ApiProperty({ example: 'Dupont' }) + @IsString() + @IsNotEmpty() + @MaxLength(100) + last_name: string; + + @ApiProperty({ enum: GenreType, required: false, default: GenreType.AUTRE }) + @IsOptional() + @IsEnum(GenreType) + gender?: GenreType = GenreType.AUTRE; + + @ApiProperty({ enum: RoleType, default: RoleType.PARENT }) + @IsEnum(RoleType) + role: RoleType = RoleType.PARENT; + + @ApiProperty({ enum: StatutUtilisateurType, required: false, default: StatutUtilisateurType.EN_ATTENTE }) + @IsOptional() + @IsEnum(StatutUtilisateurType) + status?: StatutUtilisateurType = StatutUtilisateurType.EN_ATTENTE; + + @ApiProperty({ example: '+33123456789' }) + @IsString() + @IsNotEmpty() + @MaxLength(20) + phone: string; + + @ApiProperty({ example: '10 rue de la paix, 75000 Paris' }) + @IsString() + @IsNotEmpty() + address: string; + + @ApiProperty({ example: 'https://example.com/photo.jpg', required: false }) + @IsOptional() + @IsString() + photo_url?: string; + + @ApiProperty({ default: false }) + @IsOptional() + @IsBoolean() + consent_photo?: boolean = false; + + @ApiProperty({ required: false }) + @IsOptional() + @IsDateString() + consent_photo_at?: string; + + @ApiProperty({ default: false }) + @IsOptional() + @IsBoolean() + must_change_password?: boolean = false; +}