====== Sprint 1 — Module Authentification ====== ===== Objectif du Sprint ===== Mettre en place l'ensemble des fondations de sécurité de la plateforme. À l'issue du Sprint 1 : * Un utilisateur peut créer un compte * Un utilisateur peut se connecter * Un utilisateur peut rafraîchir sa session * Un utilisateur peut gérer son profil * Les rôles sont opérationnels * Les permissions sont opérationnelles * Les routes sont protégées * Swagger documente l'ensemble du module * Les tests sont automatisés Ce sprint débloque l'ensemble des autres développements métiers. ---- ====== Périmètre ====== ===== Module Auth ===== AuthModule UsersModule RolesModule PermissionsModule ---- ====== User Stories ====== ===== US-001 : Création de compte ===== **En tant que visiteur** Je souhaite créer un compte Afin de pouvoir utiliser la plateforme. ---- ===== Critères d'acceptation ===== * Email obligatoire * Email unique * Mot de passe obligatoire * Hash BCrypt * Compte créé en base * Profil créé automatiquement ---- ===== Endpoint ===== POST /auth/register ---- ===== DTO ===== export class RegisterDto { email: string; password: string; firstName: string; lastName: string; } ---- ====== US-002 : Connexion ====== **En tant qu'utilisateur** Je souhaite me connecter Afin d'accéder à mon espace. ---- ===== Critères d'acceptation ===== * Vérification email * Vérification mot de passe * JWT généré * Refresh Token généré ---- ===== Endpoint ===== POST /auth/login ---- ===== Réponse ===== { "accessToken": "...", "refreshToken": "...", "expiresIn": 3600 } ---- ====== US-003 : Rafraîchissement du token ====== ===== Endpoint ===== POST /auth/refresh ---- ===== Critères ===== * Refresh valide * Nouveau JWT * Nouveau Refresh Token ---- ====== US-004 : Déconnexion ====== ===== Endpoint ===== POST /auth/logout ---- ===== Critères ===== * Refresh Token invalidé * Session fermée ---- ====== US-005 : Consultation profil ====== ===== Endpoint ===== GET /users/me ---- ===== Réponse ===== { "id": "uuid", "email": "user@test.com", "profile": { "firstName": "John", "lastName": "Doe" } } ---- ====== US-006 : Modification profil ====== ===== Endpoint ===== PUT /users/me ---- ====== US-007 : Gestion des rôles ====== ===== Rôles ===== SUPER_ADMIN ADMIN_AGENCE GESTIONNAIRE COMMERCIAL PROPRIETAIRE CLIENT ---- ===== Tables ===== roles permissions user_roles role_permissions ---- ====== US-008 : Contrôle d'accès RBAC ====== ===== Exemple ===== @Roles('ADMIN_AGENCE') @Get() findAll() {} ---- ===== Critères ===== * Vérification rôle * Vérification permission * Refus si accès interdit ---- ====== Architecture Backend ====== ===== Module Auth ===== src/modules/auth ├── controllers │ ├── services │ ├── guards │ ├── strategies │ ├── dto │ ├── entities │ └── tests ---- ===== Controllers ===== AuthController UserController ---- ===== Services ===== AuthService TokenService PasswordService UserService ---- ===== Guards ===== JwtAuthGuard RolesGuard PermissionsGuard ---- ===== Strategies ===== JwtStrategy RefreshTokenStrategy ---- ====== Entités Prisma ====== ===== User ===== model User { id String @id @default(uuid()) email String @unique passwordHash String status UserStatus profile UserProfile? roles UserRole[] } ---- ===== UserProfile ===== model UserProfile { id String @id @default(uuid()) userId String @unique firstName String lastName String phone String? } ---- ===== Role ===== model Role { id String @id @default(uuid()) code String @unique name String } ---- ====== Sécurité ====== ===== JWT ===== Durée : 1 heure ---- ===== Refresh Token ===== Durée : 30 jours ---- ===== Hash ===== bcrypt 12 rounds ---- ===== Headers ===== Authorization: Bearer ---- ====== Swagger ====== ===== Tags ===== Auth Users Roles ---- ===== Endpoints documentés ===== POST /auth/register POST /auth/login POST /auth/refresh POST /auth/logout GET /users/me PUT /users/me ---- ====== Frontend ====== ===== Pages ===== /login /register /forgot-password /profile ---- ===== Forms ===== RegisterForm LoginForm ProfileForm ---- ===== Hooks ===== useLogin() useRegister() useProfile() useRefreshToken() ---- ====== Tests ====== ===== Unitaires ===== AuthService UserService TokenService ---- ===== Intégration ===== Register Flow Login Flow Refresh Flow ---- ===== E2E ===== Register ↓ Login ↓ Access Protected Route ↓ Logout ---- ====== Définition de terminé ====== Le Sprint 1 est terminé lorsque : * Register fonctionne * Login fonctionne * JWT fonctionne * Refresh fonctionne * RBAC fonctionne * Profil fonctionne * Swagger fonctionne * Tests verts * CI verte ---- ====== Livrables ====== * AuthModule * UserModule * RoleModule * DTO * Prisma Models * Swagger * Tests * Documentation ---- ====== Démonstration Sprint ====== Scénario de validation : 1. Création compte 2. Connexion 3. Réception JWT 4. Consultation profil 5. Modification profil 6. Vérification rôle 7. Déconnexion Tous les flux doivent être démontrables depuis Swagger et le Frontend. ---- ====== Sprint suivant ====== ===== Sprint 2 — Gestion Utilisateurs ===== Objectifs : * Documents utilisateurs * Adresses * Vérification identité * Préférences utilisateur * Notifications utilisateur * Historique de connexion * Gestion des sessions Ce sprint finalise le domaine Utilisateurs avant de commencer le domaine principal : ===== Sprint 3 ===== Catalogue Immobilier * Création Bien * Modification Bien * Photos * Équipements * Disponibilités * Publication