🧹 NETTOYAGE CODE ÉTUDIANT: - Suppression console.log/error (4 occurrences) - Suppression code commenté inutile - Suppression champs obsolètes (mobile, telephone_fixe) - Correction password nullable dans Users entity ✨ NOUVELLES FONCTIONNALITÉS: - Ajout champs token_creation_mdp dans Users entity - Création RegisterParentDto (validation complète) - Endpoint POST /auth/register/parent - Méthode registerParent() avec transaction - Gestion Parent 1 + Parent 2 (co-parent optionnel) - Génération tokens UUID pour création MDP - Lecture durée token depuis AppConfigService - Création automatique entités Parents - Statut EN_ATTENTE par défaut - Intégration AppConfigModule dans AuthModule - Amélioration méthode login() (vérif statut + password null) 📋 WORKFLOW CDC CONFORME: - Inscription SANS mot de passe - Token envoyé par email (TODO) - Validation gestionnaire requise - Support co-parent avec même adresse Réf: docs/20_WORKFLOW-CREATION-COMPTE.md Ticket: #9 (ou #16)
122 lines
3.3 KiB
TypeScript
122 lines
3.3 KiB
TypeScript
import { ApiProperty } from '@nestjs/swagger';
|
|
import {
|
|
IsEmail,
|
|
IsNotEmpty,
|
|
IsOptional,
|
|
IsString,
|
|
IsDateString,
|
|
IsEnum,
|
|
MinLength,
|
|
MaxLength,
|
|
Matches,
|
|
} from 'class-validator';
|
|
import { SituationFamilialeType } from 'src/entities/users.entity';
|
|
|
|
export class RegisterParentDto {
|
|
// === Informations obligatoires ===
|
|
@ApiProperty({ example: 'claire.martin@ptits-pas.fr' })
|
|
@IsEmail({}, { message: 'Email invalide' })
|
|
@IsNotEmpty({ message: 'L\'email est requis' })
|
|
email: string;
|
|
|
|
@ApiProperty({ example: 'Claire' })
|
|
@IsString()
|
|
@IsNotEmpty({ message: 'Le prénom est requis' })
|
|
@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' })
|
|
@IsString()
|
|
@IsNotEmpty({ message: 'Le nom est requis' })
|
|
@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: '0689567890' })
|
|
@IsString()
|
|
@IsNotEmpty({ message: 'Le téléphone est requis' })
|
|
@Matches(/^(\+33|0)[1-9](\d{2}){4}$/, {
|
|
message: 'Le numéro de téléphone doit être valide (ex: 0689567890 ou +33689567890)',
|
|
})
|
|
telephone: string;
|
|
|
|
// === Informations optionnelles ===
|
|
@ApiProperty({ example: '5 Avenue du Général de Gaulle', required: false })
|
|
@IsOptional()
|
|
@IsString()
|
|
adresse?: string;
|
|
|
|
@ApiProperty({ example: '95870', required: false })
|
|
@IsOptional()
|
|
@IsString()
|
|
@MaxLength(10)
|
|
code_postal?: string;
|
|
|
|
@ApiProperty({ example: 'Bezons', required: false })
|
|
@IsOptional()
|
|
@IsString()
|
|
@MaxLength(150)
|
|
ville?: string;
|
|
|
|
@ApiProperty({ example: 'Infirmière', required: false })
|
|
@IsOptional()
|
|
@IsString()
|
|
@MaxLength(150)
|
|
profession?: string;
|
|
|
|
@ApiProperty({ enum: SituationFamilialeType, example: SituationFamilialeType.MARIE, required: false })
|
|
@IsOptional()
|
|
@IsEnum(SituationFamilialeType)
|
|
situation_familiale?: SituationFamilialeType;
|
|
|
|
@ApiProperty({ example: '1990-04-03', required: false })
|
|
@IsOptional()
|
|
@IsDateString()
|
|
date_naissance?: string;
|
|
|
|
// === Informations co-parent (optionnel) ===
|
|
@ApiProperty({ example: 'thomas.martin@ptits-pas.fr', required: false })
|
|
@IsOptional()
|
|
@IsEmail({}, { message: 'Email du co-parent invalide' })
|
|
co_parent_email?: string;
|
|
|
|
@ApiProperty({ example: 'Thomas', required: false })
|
|
@IsOptional()
|
|
@IsString()
|
|
co_parent_prenom?: string;
|
|
|
|
@ApiProperty({ example: 'MARTIN', required: false })
|
|
@IsOptional()
|
|
@IsString()
|
|
co_parent_nom?: string;
|
|
|
|
@ApiProperty({ example: '0612345678', required: false })
|
|
@IsOptional()
|
|
@IsString()
|
|
@Matches(/^(\+33|0)[1-9](\d{2}){4}$/, {
|
|
message: 'Le numéro de téléphone du co-parent doit être valide',
|
|
})
|
|
co_parent_telephone?: string;
|
|
|
|
@ApiProperty({ example: 'true', description: 'Le co-parent habite à la même adresse', required: false })
|
|
@IsOptional()
|
|
co_parent_meme_adresse?: boolean;
|
|
|
|
@ApiProperty({ required: false })
|
|
@IsOptional()
|
|
@IsString()
|
|
co_parent_adresse?: string;
|
|
|
|
@ApiProperty({ required: false })
|
|
@IsOptional()
|
|
@IsString()
|
|
co_parent_code_postal?: string;
|
|
|
|
@ApiProperty({ required: false })
|
|
@IsOptional()
|
|
@IsString()
|
|
co_parent_ville?: string;
|
|
}
|
|
|