====== 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