```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. ```