```dokuwiki
Le modèle UML constitue la représentation fonctionnelle et technique du système.
Il servira à :
┌──────────────┐
│ Client │
└──────┬───────┘
│
▼
┌────────────────────────────────────────────┐
│ Plateforme de Gestion Locative │
└────────────────────────────────────────────┘
▲ ▲ ▲ ▲
│ │ │ │
Propriétaire Gestionnaire Commercial Admin
Client Propriétaire Gestionnaire Commercial Administrateur Super Administrateur Services Externes ├─ Stripe ├─ Yousign ├─ Email SMTP └─ Stockage S3
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
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
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
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
Owner ------------------------- id ownerCode active ------------------------- OwnerBankAccount ------------------------- id iban bic holder -------------------------
Relations :
Owner 1 ----- n OwnerBankAccount Owner 1 ----- n Property
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
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
Contract ------------------------- id number version signedAt ------------------------- ContractSignature ------------------------- ContractDocument -------------------------
Relations :
Reservation 1 ----- 1 Contract Contract 1 ----- n ContractSignature Contract 1 ----- n ContractDocument
Payment ------------------------- id amount status paymentDate ------------------------- Invoice ------------------------- InvoiceLine -------------------------
Relations :
Reservation 1 ----- n Payment Reservation 1 ----- n Invoice Invoice 1 ----- n InvoiceLine
Lead ------------------------- LeadStatus ------------------------- CustomerActivity ------------------------- CustomerNote -------------------------
Relations :
Lead 1 ----- n CustomerActivity Lead 1 ----- n CustomerNote
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
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
Client │ ├─ Paiement CB │ ▼ Frontend │ ▼ PaymentService │ ▼ Stripe │ ├─ Paiement accepté │ ▼ PaymentService │ ├─ Met à jour réservation │ ├─ Génère facture │ └─ Envoie confirmation
DRAFT │ ▼ PUBLISHED │ ├──────────────► MAINTENANCE │ ▼ RENTED │ ▼ ARCHIVED
PENDING │ ▼ CONFIRMED │ ▼ SIGNED │ ▼ COMPLETED │ └────────► CANCELLED
DRAFT │ ▼ GENERATED │ ▼ SENT │ ▼ SIGNED │ └────────► REFUSED
PENDING │ ▼ AUTHORIZED │ ▼ PAID │ └────────► REFUNDED │ └────────► FAILED
┌───────────────────────┐
│ 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 │
└───────────────────────┘
Internet │ ▼ Cloudflare │ ▼ Nginx Reverse Proxy │ ▼ Docker Cluster ├── Frontend NextJS ├── Backend NestJS ├── Worker Queue ├── Scheduler │ ▼ PostgreSQL │ ▼ Object Storage S3 │ ▼ Monitoring ├── Prometheus ├── Grafana └── Loki
À partir de ce modèle UML, nous pouvons désormais produire :
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. ```