PD-15 — Plan d'implémentation¶
📚 Navigation User Story
| Document | | | ---------- | -- | | 📋 [Spécification](PD-15-specification.md) | | | 🛠️ **Plan d'implémentation** | *(ce document)* | | ✅ [Critères d'acceptation](PD-15-acceptability.md) | | | 📝 [Retour d'expérience](PD-15-rex.md) | | [← Retour à backend-core](../PD-186-epic.md) · [↑ Index User Story](index.md)Objectif¶
Créer le schéma PostgreSQL et l'entité TypeORM pour la table users avec support SRP-6a (salt + verifier).
Choix techniques retenus¶
- Table :
public.users - Auth : SRP-6a (salt + verifier, pas de hash password)
- Identifiant : UUID v4
- Contraintes : Email unique, validation format
Architecture ciblée¶
src/modules/auth/entities/
└── user.entity.ts # Entité TypeORM User
src/database/migrations/
└── 1731888000000-CreateUsersTable.ts
Découpage technique¶
Phase 1 : Migration¶
- Créer migration
CreateUsersTable:
CREATE TABLE public.users (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
email VARCHAR(255) NOT NULL UNIQUE,
salt VARCHAR(64) NOT NULL, -- SRP salt (hex)
verifier TEXT NOT NULL, -- SRP verifier (hex)
plan VARCHAR(50) DEFAULT 'free',
created_at TIMESTAMPTZ DEFAULT NOW(),
updated_at TIMESTAMPTZ DEFAULT NOW()
);
CREATE INDEX idx_users_email ON public.users(email);
CREATE INDEX idx_users_created_at ON public.users(created_at DESC);
- Créer trigger
updated_at
Phase 2 : Entité TypeORM¶
- Créer
user.entity.ts:
@Entity('users')
export class User {
@PrimaryGeneratedColumn('uuid')
id: string;
@Column({ unique: true })
email: string;
@Column()
salt: string;
@Column('text')
verifier: string;
@Column({ default: 'free' })
plan: string;
@CreateDateColumn()
createdAt: Date;
@UpdateDateColumn()
updatedAt: Date;
}
Phase 3 : Validation¶
- Contraintes niveau DB :
- Email format via CHECK
- Salt longueur 32-64 hex
-
Verifier non vide
-
Validation niveau DTO :
- class-validator decorators
- Regex email RFC 5322
Phase 4 : Repository¶
- Créer UserRepository si nécessaire
- Méthodes : findByEmail, create
- Pas de findByPassword (SRP)
Phase 5 : Tests¶
- Tests migration up/down
- Tests contraintes unicité
- Tests entité TypeORM
- Tests validation email
Points de vigilance¶
- Pas de password : Jamais stocké, même hashé
- Salt/Verifier : Format hex validé
- Email : Normaliser lowercase avant stockage
- GDPR : Prévoir soft delete si nécessaire
Hors périmètre¶
- Authentification SRP (→ PD-24)
- Gestion rôles/permissions (→ future US)
- Profile utilisateur étendu (→ future US)