```dokuwiki
====== Modèle UML complet ======
===== Objectif =====
Le modèle UML constitue la représentation fonctionnelle et technique du système.
Il servira à :
* Valider le métier avec les parties prenantes.
* Concevoir les API.
* Structurer le backend NestJS.
* Générer la documentation technique.
* Préparer le backlog Agile.
----
====== Vue d'ensemble du système ======
┌──────────────┐
│ Client │
└──────┬───────┘
│
▼
┌────────────────────────────────────────────┐
│ Plateforme de Gestion Locative │
└────────────────────────────────────────────┘
▲ ▲ ▲ ▲
│ │ │ │
Propriétaire Gestionnaire Commercial Admin
----
====== Diagrammes UML à produire ======
===== Diagrammes de cas d'utilisation =====
* Front Office Client
* Extranet Propriétaire
* Back Office Agence
* Administration
* Paiement
* Signature électronique
* CRM
----
===== Diagrammes de classes =====
* Domaine Utilisateurs
* Domaine Biens
* Domaine Réservations
* Domaine Contrats
* Domaine Paiements
* Domaine CRM
* Domaine Messagerie
----
===== Diagrammes de séquence =====
* Authentification
* Réservation
* Signature contrat
* Paiement
* Création d'un bien
* Annulation réservation
----
===== Diagrammes d'états =====
* Bien immobilier
* Réservation
* Contrat
* Paiement
----
===== Diagrammes de composants =====
* Frontend
* Backend
* Services externes
----
===== Diagrammes de déploiement =====
* Infrastructure Cloud
* Base PostgreSQL
* Stockage S3
* Reverse Proxy
* Monitoring
----
====== Cas d'utilisation ======
===== Acteurs =====
Client
Propriétaire
Gestionnaire
Commercial
Administrateur
Super Administrateur
Services Externes
├─ Stripe
├─ Yousign
├─ Email SMTP
└─ Stockage S3
----
===== Cas d'utilisation Client =====
Client
├── Créer un compte
├── Se connecter
├── Modifier son profil
├── Rechercher un bien
├── Consulter une annonce
├── Ajouter aux favoris
├── Demander des informations
├── Réserver un bien
├── Signer un contrat
├── Effectuer un paiement
├── Télécharger une facture
├── Consulter ses réservations
├── Consulter ses contrats
└── Envoyer un message
----
===== Cas d'utilisation Propriétaire =====
Propriétaire
├── Consulter ses biens
├── Consulter le calendrier
├── Consulter les revenus
├── Télécharger les contrats
├── Télécharger les factures
├── Consulter les réservations
└── Communiquer avec l'agence
----
===== Cas d'utilisation Gestionnaire =====
Gestionnaire
├── Créer un bien
├── Modifier un bien
├── Publier un bien
├── Suspendre un bien
├── Gérer les disponibilités
├── Créer une réservation
├── Modifier une réservation
├── Annuler une réservation
├── Générer un contrat
├── Envoyer un contrat
├── Créer une facture
├── Enregistrer un paiement
└── Gérer les clients
----
====== Diagramme de classes principal ======
===== Domaine Utilisateurs =====
User
-------------------------
id
email
passwordHash
status
createdAt
updatedAt
-------------------------
UserProfile
-------------------------
id
firstName
lastName
phone
birthDate
-------------------------
Role
-------------------------
id
code
label
-------------------------
Permission
-------------------------
id
code
description
-------------------------
Relations :
User 1 ----- 1 UserProfile
User n ----- n Role
Role n ----- n Permission
----
===== Domaine Propriétaires =====
Owner
-------------------------
id
ownerCode
active
-------------------------
OwnerBankAccount
-------------------------
id
iban
bic
holder
-------------------------
Relations :
Owner 1 ----- n OwnerBankAccount
Owner 1 ----- n Property
----
===== Domaine Biens =====
Property
-------------------------
id
code
title
status
surface
capacity
-------------------------
PropertyAddress
-------------------------
PropertyPhoto
-------------------------
PropertyFeature
-------------------------
Feature
-------------------------
Availability
-------------------------
Relations :
Property 1 ----- 1 PropertyAddress
Property 1 ----- n PropertyPhoto
Property n ----- n Feature
Property 1 ----- n Availability
----
===== Domaine Réservation =====
Reservation
-------------------------
id
number
startDate
endDate
status
totalAmount
-------------------------
ReservationGuest
-------------------------
ReservationEvent
-------------------------
Relations :
User 1 ----- n Reservation
Property 1 ----- n Reservation
Reservation 1 ----- n ReservationGuest
Reservation 1 ----- n ReservationEvent
----
===== Domaine Contrats =====
Contract
-------------------------
id
number
version
signedAt
-------------------------
ContractSignature
-------------------------
ContractDocument
-------------------------
Relations :
Reservation 1 ----- 1 Contract
Contract 1 ----- n ContractSignature
Contract 1 ----- n ContractDocument
----
===== Domaine Paiements =====
Payment
-------------------------
id
amount
status
paymentDate
-------------------------
Invoice
-------------------------
InvoiceLine
-------------------------
Relations :
Reservation 1 ----- n Payment
Reservation 1 ----- n Invoice
Invoice 1 ----- n InvoiceLine
----
===== Domaine CRM =====
Lead
-------------------------
LeadStatus
-------------------------
CustomerActivity
-------------------------
CustomerNote
-------------------------
Relations :
Lead 1 ----- n CustomerActivity
Lead 1 ----- n CustomerNote
----
====== Diagrammes de séquence ======
===== Authentification =====
Utilisateur
│
├─ Login
│
▼
Frontend
│
├─ POST /auth/login
│
▼
AuthService
│
├─ Vérification utilisateur
│
├─ Vérification mot de passe
│
├─ Génération JWT
│
└─ Génération Refresh Token
│
▼
Réponse
----
===== Réservation =====
Client
│
├─ Choisit un bien
│
▼
Frontend
│
├─ POST /reservations
│
▼
ReservationService
│
├─ Vérifie disponibilité
│
├─ Calcule tarif
│
├─ Crée réservation
│
├─ Génère contrat
│
└─ Notifie client
│
▼
Réservation créée
----
===== Paiement =====
Client
│
├─ Paiement CB
│
▼
Frontend
│
▼
PaymentService
│
▼
Stripe
│
├─ Paiement accepté
│
▼
PaymentService
│
├─ Met à jour réservation
│
├─ Génère facture
│
└─ Envoie confirmation
----
====== Diagrammes d'états ======
===== Cycle de vie d'un bien =====
DRAFT
│
▼
PUBLISHED
│
├──────────────► MAINTENANCE
│
▼
RENTED
│
▼
ARCHIVED
----
===== Cycle de vie d'une réservation =====
PENDING
│
▼
CONFIRMED
│
▼
SIGNED
│
▼
COMPLETED
│
└────────► CANCELLED
----
===== Cycle de vie d'un contrat =====
DRAFT
│
▼
GENERATED
│
▼
SENT
│
▼
SIGNED
│
└────────► REFUSED
----
===== Cycle de vie d'un paiement =====
PENDING
│
▼
AUTHORIZED
│
▼
PAID
│
└────────► REFUNDED
│
└────────► FAILED
----
====== Diagrammes de composants ======
┌───────────────────────┐
│ Frontend │
│ Next.js │
└──────────┬────────────┘
│
▼
┌───────────────────────┐
│ API Gateway │
└──────────┬────────────┘
▼
┌────────────────────────────────────┐
│ Backend NestJS │
├────────────────────────────────────┤
│ Auth Module │
│ User Module │
│ Property Module │
│ Reservation Module │
│ Contract Module │
│ Payment Module │
│ CRM Module │
│ Messaging Module │
│ Reporting Module │
└────────────────────────────────────┘
▼
┌───────────────────────┐
│ PostgreSQL │
└───────────────────────┘
▼
┌───────────────────────┐
│ S3 │
└───────────────────────┘
----
====== Diagramme de déploiement ======
Internet
│
▼
Cloudflare
│
▼
Nginx Reverse Proxy
│
▼
Docker Cluster
├── Frontend NextJS
├── Backend NestJS
├── Worker Queue
├── Scheduler
│
▼
PostgreSQL
│
▼
Object Storage S3
│
▼
Monitoring
├── Prometheus
├── Grafana
└── Loki
----
====== Livrables UML produits ======
* Diagrammes de cas d'utilisation
* Diagrammes de classes
* Diagrammes de séquence
* Diagrammes d'états
* Diagrammes de composants
* Diagrammes de déploiement
----
====== Étape suivante ======
À partir de ce modèle UML, nous pouvons désormais produire :
* Architecture hexagonale NestJS complète
* Organisation des modules
* Bounded Contexts (DDD)
* Ports & Adapters
* CQRS
* Event Bus
* Repository Pattern
* Spécification OpenAPI 3.1 complète
* Backlog Agile détaillé
Le prochain livrable recommandé est :
**Architecture hexagonale du backend NestJS**, car elle servira directement à la génération des modules applicatifs et des API REST.
```