ujusum:3-codage:1-repository:2-prisma-schema
Différences
Ci-dessous, les différences entre deux révisions de la page.
| Prochaine révision | Révision précédente | ||
| ujusum:3-codage:1-repository:2-prisma-schema [2026/06/07 04:44] – créée 91.170.108.99 | ujusum:3-codage:1-repository:2-prisma-schema [2026/06/07 05:27] (Version actuelle) – 91.170.108.99 | ||
|---|---|---|---|
| Ligne 1: | Ligne 1: | ||
| - | ====== | + | ====== |
| ===== Objectif ===== | ===== Objectif ===== | ||
| - | Mettre en place un dépôt Git professionnel prêt pour : | + | Construire le schéma Prisma qui deviendra la source de vérité unique du système. |
| - | * Développement multi-développeurs | + | À partir |
| - | * CI/CD | + | |
| - | * Revue de code | + | |
| - | * Releases | + | |
| - | * Hotfixes | + | |
| - | * Déploiements automatiques | + | |
| - | À la fin de cette procédure | + | * PostgreSQL |
| + | * Prisma Client | ||
| + | * DTO | ||
| + | * Entités NestJS | ||
| + | * OpenAPI | ||
| + | * SDK TypeScript | ||
| + | * Migrations SQL | ||
| + | |||
| + | Le schéma doit refléter l' | ||
| + | |||
| + | ---- | ||
| + | |||
| + | ====== Objectifs techniques ====== | ||
| + | |||
| + | Le schéma Prisma doit supporter | ||
| < | < | ||
| - | Git local | + | Multi-tenant |
| - | GitHub | + | Audit |
| - | Branches | + | Historisation |
| - | Protection | + | Soft Delete |
| - | CI | + | RBAC |
| - | Versioning | + | CRM |
| - | Templates | + | Catalogue |
| - | Hooks | + | Réservations |
| - | Documentation | + | Paiements |
| + | |||
| + | Contrats | ||
| + | |||
| + | OTA | ||
| + | |||
| + | IA | ||
| + | |||
| + | Revenue Management | ||
| + | |||
| + | Internationalisation | ||
| + | |||
| + | Sécurité Enterprise | ||
| </ | </ | ||
| - | seront opérationnels. | + | ---- |
| + | |||
| + | ====== Ordre de construction recommandé ====== | ||
| + | |||
| + | Ne jamais commencer par les 80 tables. | ||
| + | |||
| + | Construire par couches. | ||
| ---- | ---- | ||
| - | ====== Étape | + | ===== Couche |
| - | ===== Création du dépôt ===== | + | Construire en premier : |
| - | < | + | < |
| - | mkdir rental-platform | + | Tenant |
| + | |||
| + | User | ||
| + | |||
| + | Role | ||
| + | |||
| + | Permission | ||
| - | cd rental-platform | + | UserRole |
| - | git init | + | RolePermission |
| </ | </ | ||
| + | |||
| + | Ces tables sont nécessaires partout. | ||
| ---- | ---- | ||
| - | ===== Vérification | + | ===== Couche 2 — Référentiels |
| - | < | + | Créer : |
| - | git status | + | |
| + | < | ||
| + | Address | ||
| + | |||
| + | Country | ||
| + | |||
| + | Language | ||
| + | |||
| + | Currency | ||
| + | |||
| + | Timezone | ||
| </ | </ | ||
| - | Résultat | + | ---- |
| + | |||
| + | ===== Couche 3 — Catalogue ===== | ||
| + | |||
| + | Créer | ||
| < | < | ||
| - | On branch main | + | Property |
| + | |||
| + | PropertyType | ||
| + | |||
| + | PropertyMedia | ||
| + | |||
| + | PropertyFeature | ||
| + | |||
| + | PropertyAvailability | ||
| - | No commits yet | + | PropertyRate |
| </ | </ | ||
| ---- | ---- | ||
| - | ====== Étape 2 — Configuration Git globale ====== | + | ===== Couche 4 — Réservations |
| - | ===== Vérifier ===== | + | Créer : |
| - | < | + | < |
| - | git config --global user.name | + | Reservation |
| + | |||
| + | ReservationGuest | ||
| + | |||
| + | ReservationStatus | ||
| - | git config --global user.email | + | ReservationEvent |
| </ | </ | ||
| ---- | ---- | ||
| - | ===== Configurer | + | ===== Couche 5 — Contrats |
| - | <code bash> | + | Créer : |
| - | git config --global user.name "Votre Nom" | + | |
| - | git config --global user.email " | + | < |
| + | Contract | ||
| + | |||
| + | ContractTemplate | ||
| + | |||
| + | ContractSignature | ||
| + | |||
| + | Document | ||
| </ | </ | ||
| ---- | ---- | ||
| - | ===== Configuration utile ===== | + | ===== Couche 6 — Paiements |
| - | < | + | Créer : |
| - | git config --global init.defaultBranch main | + | |
| + | < | ||
| + | Payment | ||
| + | |||
| + | Invoice | ||
| - | git config --global pull.rebase false | + | Refund |
| - | git config --global core.autocrlf input | + | AccountingEntry |
| </ | </ | ||
| ---- | ---- | ||
| - | ====== Étape 3 — Création du dépôt GitHub ====== | + | ===== Couche 7 — CRM ===== |
| Créer : | Créer : | ||
| < | < | ||
| - | rental-platform | + | Lead |
| + | |||
| + | Customer | ||
| + | |||
| + | Activity | ||
| + | |||
| + | Task | ||
| + | |||
| + | Pipeline | ||
| </ | </ | ||
| - | Options : | + | ---- |
| - | < | + | ===== Couche 8 — Propriétaires ===== |
| - | Private | + | |
| - | README | + | Créer : |
| + | |||
| + | < | ||
| + | Owner | ||
| - | .gitignore = Node | + | OwnerProperty |
| - | License = MIT (ou propriétaire) | + | OwnerDocument |
| </ | </ | ||
| ---- | ---- | ||
| - | ===== Ajouter le remote | + | ===== Couche 9 — Notifications |
| - | < | + | Créer : |
| - | git remote add origin git@github.com: | + | |
| + | < | ||
| + | Notification | ||
| + | |||
| + | NotificationTemplate | ||
| + | |||
| + | Message | ||
| + | |||
| + | Campaign | ||
| </ | </ | ||
| ---- | ---- | ||
| - | ===== Vérifier | + | ===== Couche 10 — Administration |
| - | < | + | Créer : |
| - | git remote -v | + | |
| + | < | ||
| + | AuditLog | ||
| + | |||
| + | FeatureFlag | ||
| + | |||
| + | CustomField | ||
| + | |||
| + | Workflow | ||
| </ | </ | ||
| ---- | ---- | ||
| - | ====== Étape 4 — Génération de la clé SSH ====== | + | ===== Couche 11 — IA ===== |
| - | ===== Vérifier ===== | + | Créer : |
| - | < | + | < |
| - | ls ~/.ssh | + | AiConversation |
| + | |||
| + | AiMessage | ||
| + | |||
| + | KnowledgeDocument | ||
| + | |||
| + | AutomationRule | ||
| </ | </ | ||
| ---- | ---- | ||
| - | ===== Générer | + | ===== Couche 12 — OTA ===== |
| - | < | + | Créer : |
| - | ssh-keygen -t ed25519 \ | + | |
| - | -C " | + | < |
| + | Channel | ||
| + | |||
| + | ChannelConnection | ||
| + | |||
| + | PropertyDistribution | ||
| + | |||
| + | ChannelReservation | ||
| </ | </ | ||
| ---- | ---- | ||
| - | ===== Afficher | + | ===== Couche 13 — Revenue Management |
| - | < | + | Créer : |
| - | cat ~/ | + | |
| + | < | ||
| + | PricingRule | ||
| + | |||
| + | DynamicPrice | ||
| + | |||
| + | RevenueSimulation | ||
| + | |||
| + | CompetitorSnapshot | ||
| </ | </ | ||
| ---- | ---- | ||
| - | ===== Ajouter dans GitHub | + | ===== Couche 14 — Sécurité |
| + | |||
| + | Créer : | ||
| < | < | ||
| - | Settings | + | Consent |
| - | SSH Keys | + | SecurityPolicy |
| - | New SSH Key | + | Risk |
| + | |||
| + | ComplianceAudit | ||
| </ | </ | ||
| ---- | ---- | ||
| - | ===== Tester | + | ===== Couche 15 — Internationalisation |
| - | < | + | Créer : |
| - | ssh -T git@github.com | + | |
| + | < | ||
| + | Translation | ||
| + | |||
| + | CurrencyRate | ||
| + | |||
| + | Region | ||
| + | |||
| + | EnterpriseLicense | ||
| </ | </ | ||
| ---- | ---- | ||
| - | ====== | + | ====== |
| - | ===== Racine ===== | + | Au lieu d'un unique fichier géant : |
| < | < | ||
| - | .gitignore | + | prisma/ |
| + | |||
| + | ├── schema.prisma | ||
| + | │ | ||
| + | ├── models/ | ||
| + | │ | ||
| + | │ | ||
| + | │ | ||
| + | │ | ||
| + | │ | ||
| + | │ | ||
| + | │ | ||
| + | │ | ||
| + | │ | ||
| + | │ | ||
| + | │ | ||
| + | │ | ||
| + | │ | ||
| + | │ | ||
| + | │ | ||
| + | │ | ||
| </ | </ | ||
| ---- | ---- | ||
| - | ===== Contenu | + | ====== |
| + | |||
| + | ===== schema.prisma ===== | ||
| + | |||
| + | Version minimale : | ||
| + | |||
| + | <code prisma> | ||
| + | generator client { | ||
| + | provider = " | ||
| + | } | ||
| + | |||
| + | datasource db { | ||
| + | provider = " | ||
| + | url = env(" | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | ---- | ||
| + | |||
| + | ====== Première implémentation ====== | ||
| + | |||
| + | ===== Étape 1 ===== | ||
| + | |||
| + | Créer : | ||
| < | < | ||
| - | node_modules/ | + | prisma/models/ |
| + | </ | ||
| - | dist/ | + | ---- |
| - | .next/ | + | ===== Tenant ===== |
| - | coverage/ | + | <code prisma> |
| + | model Tenant { | ||
| - | .env | + | id String |
| - | .env.* | + | code String |
| - | *.log | + | name String |
| - | .prisma/ | + | status |
| - | .idea/ | + | createdAt |
| - | .vscode/ | + | updatedAt |
| - | .DS_Store | + | users |
| - | tmp/ | + | properties |
| - | .cache/ | + | } |
| </ | </ | ||
| ---- | ---- | ||
| - | ====== Étape 6 — README principal ====== | + | ===== Enum ===== |
| - | ===== Créer | + | <code prisma> |
| + | enum TenantStatus { | ||
| + | |||
| + | ACTIVE | ||
| + | |||
| + | SUSPENDED | ||
| + | |||
| + | TRIAL | ||
| + | |||
| + | ARCHIVED | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | ---- | ||
| + | |||
| + | ====== | ||
| + | |||
| + | Créer : | ||
| < | < | ||
| - | README.md | + | prisma/ |
| </ | </ | ||
| ---- | ---- | ||
| - | ===== Contenu minimal | + | ===== User ===== |
| - | < | + | < |
| - | # Rental Platform | + | model User { |
| - | Property Management System | + | id String @id @default(uuid()) |
| - | ## Installation | + | tenantId |
| - | docker compose up | + | email |
| - | ## Documentation | + | passwordHash |
| - | /swagger | + | firstName |
| - | ## Architecture | + | lastName |
| - | NestJS | + | active |
| - | NextJS | + | |
| - | Prisma | + | |
| - | PostgreSQL | + | |
| - | Redis | + | |
| + | |||
| + | tenant | ||
| + | fields: | ||
| + | references: | ||
| + | ) | ||
| + | |||
| + | roles | ||
| + | |||
| + | } | ||
| </ | </ | ||
| ---- | ---- | ||
| - | ====== | + | ===== Role ===== |
| + | |||
| + | <code prisma> | ||
| + | model Role { | ||
| + | |||
| + | id String @id @default(uuid()) | ||
| + | |||
| + | code String @unique | ||
| + | |||
| + | name String | ||
| + | |||
| + | userRoles | ||
| + | |||
| + | permissions | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | ---- | ||
| + | |||
| + | ===== Permission ===== | ||
| + | |||
| + | <code prisma> | ||
| + | model Permission { | ||
| + | |||
| + | id String @id @default(uuid()) | ||
| + | |||
| + | code String @unique | ||
| + | |||
| + | name String | ||
| + | |||
| + | rolePermissions RolePermission[] | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | ---- | ||
| + | |||
| + | ===== UserRole ===== | ||
| + | |||
| + | <code prisma> | ||
| + | model UserRole { | ||
| + | |||
| + | userId | ||
| + | |||
| + | roleId | ||
| + | |||
| + | assignedAt | ||
| + | |||
| + | user User @relation( | ||
| + | fields: | ||
| + | references: | ||
| + | ) | ||
| + | |||
| + | role Role @relation( | ||
| + | fields: | ||
| + | references: | ||
| + | ) | ||
| + | |||
| + | @@id([userId, | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | ---- | ||
| + | |||
| + | ===== RolePermission ===== | ||
| + | |||
| + | <code prisma> | ||
| + | model RolePermission { | ||
| + | |||
| + | roleId | ||
| + | |||
| + | permissionId | ||
| + | |||
| + | role Role @relation( | ||
| + | fields: | ||
| + | references: | ||
| + | ) | ||
| + | |||
| + | permission | ||
| + | fields: | ||
| + | references: | ||
| + | ) | ||
| + | |||
| + | @@id([roleId, | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | ---- | ||
| + | |||
| + | ====== Génération ====== | ||
| + | |||
| + | Après chaque bloc important : | ||
| <code bash> | <code bash> | ||
| - | git add . | + | npx prisma format |
| + | </ | ||
| - | git commit | + | ---- |
| + | |||
| + | ===== Validation ===== | ||
| + | |||
| + | <code bash> | ||
| + | npx prisma validate | ||
| </ | </ | ||
| ---- | ---- | ||
| - | ===== Push ===== | + | ===== Génération Client |
| <code bash> | <code bash> | ||
| - | git push -u origin main | + | npx prisma generate |
| </ | </ | ||
| ---- | ---- | ||
| - | ====== Étape 8 — Protection de branche ====== | + | ===== Migration |
| - | ===== GitHub | + | <code bash> |
| + | npx prisma migrate dev \ | ||
| + | --name init_security | ||
| + | </ | ||
| + | |||
| + | ---- | ||
| + | |||
| + | ====== | ||
| + | |||
| + | Ouvrir : | ||
| + | |||
| + | <code bash> | ||
| + | npx prisma studio | ||
| + | </ | ||
| + | |||
| + | Vérifier la présence : | ||
| < | < | ||
| - | Settings | + | Tenant |
| + | |||
| + | User | ||
| + | |||
| + | Role | ||
| + | |||
| + | Permission | ||
| - | Branches | + | UserRole |
| - | Add Rule | + | RolePermission |
| </ | </ | ||
| ---- | ---- | ||
| - | ===== Branche | + | ====== Phase 2-A — Fondation complète (Tenant + RBAC + Propriétés de sécurité) ====== |
| + | |||
| + | Vous avez raison. | ||
| + | |||
| + | La version précédente contient : | ||
| + | |||
| + | * Tenant | ||
| + | * User | ||
| + | * Role | ||
| + | * Permission | ||
| + | * UserRole | ||
| + | * RolePermission | ||
| + | |||
| + | mais il manque plusieurs éléments indispensables pour un véritable système Enterprise : | ||
| + | |||
| + | * propriétés du compte utilisateur | ||
| + | * préférences utilisateur | ||
| + | * sessions | ||
| + | * refresh tokens | ||
| + | * MFA | ||
| + | * audit de connexion | ||
| + | * catalogue complet des permissions | ||
| + | |||
| + | Sans ces éléments, le Sprint 1 (Authentification) et le Sprint 19 (Sécurité Enterprise) ne pourront pas être implémentés proprement. | ||
| + | |||
| + | ---- | ||
| + | |||
| + | ====== Modèle User complet ====== | ||
| + | |||
| + | ===== User ===== | ||
| + | |||
| + | <code prisma> | ||
| + | model User { | ||
| + | |||
| + | id String | ||
| + | |||
| + | tenantId | ||
| + | |||
| + | email | ||
| + | |||
| + | passwordHash | ||
| + | |||
| + | firstName | ||
| + | |||
| + | lastName | ||
| + | |||
| + | phone | ||
| + | |||
| + | avatarUrl | ||
| + | |||
| + | languageCode | ||
| + | |||
| + | timezoneCode | ||
| + | |||
| + | active | ||
| + | |||
| + | emailVerified | ||
| + | |||
| + | lastLoginAt | ||
| + | |||
| + | createdAt | ||
| + | |||
| + | updatedAt | ||
| + | |||
| + | deletedAt | ||
| + | |||
| + | tenant | ||
| + | fields: | ||
| + | references: | ||
| + | ) | ||
| + | |||
| + | roles | ||
| + | |||
| + | sessions | ||
| + | |||
| + | refreshTokens | ||
| + | |||
| + | preferences | ||
| + | |||
| + | loginHistory | ||
| + | |||
| + | mfaMethods | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | ---- | ||
| + | |||
| + | ====== Préférences utilisateur ====== | ||
| + | |||
| + | ===== UserPreference ===== | ||
| + | |||
| + | <code prisma> | ||
| + | model UserPreference { | ||
| + | |||
| + | id String | ||
| + | |||
| + | userId | ||
| + | |||
| + | theme | ||
| + | |||
| + | language | ||
| + | |||
| + | timezone | ||
| + | |||
| + | notifications | ||
| + | |||
| + | createdAt | ||
| + | |||
| + | updatedAt | ||
| + | |||
| + | user User @relation( | ||
| + | fields: | ||
| + | references: | ||
| + | ) | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | ---- | ||
| + | |||
| + | ====== Gestion des sessions ====== | ||
| + | |||
| + | ===== UserSession ===== | ||
| + | |||
| + | <code prisma> | ||
| + | model UserSession { | ||
| + | |||
| + | id String | ||
| + | |||
| + | userId | ||
| + | |||
| + | ipAddress | ||
| + | |||
| + | userAgent | ||
| + | |||
| + | country | ||
| + | |||
| + | city String? | ||
| + | |||
| + | lastActivityAt | ||
| + | |||
| + | expiresAt | ||
| + | |||
| + | revokedAt | ||
| + | |||
| + | createdAt | ||
| + | |||
| + | user User @relation( | ||
| + | fields: | ||
| + | references: | ||
| + | ) | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | ---- | ||
| + | |||
| + | ====== Refresh Tokens ====== | ||
| + | |||
| + | ===== RefreshToken ===== | ||
| + | |||
| + | <code prisma> | ||
| + | model RefreshToken { | ||
| + | |||
| + | id String | ||
| + | |||
| + | userId | ||
| + | |||
| + | tokenHash | ||
| + | |||
| + | expiresAt | ||
| + | |||
| + | revokedAt | ||
| + | |||
| + | createdAt | ||
| + | |||
| + | user User @relation( | ||
| + | fields: | ||
| + | references: | ||
| + | ) | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | ---- | ||
| + | |||
| + | ====== Historique des connexions ====== | ||
| + | |||
| + | ===== LoginHistory ===== | ||
| + | |||
| + | <code prisma> | ||
| + | model LoginHistory { | ||
| + | |||
| + | id String | ||
| + | |||
| + | userId | ||
| + | |||
| + | success | ||
| + | |||
| + | ipAddress | ||
| + | |||
| + | userAgent | ||
| + | |||
| + | country | ||
| + | |||
| + | city String? | ||
| + | |||
| + | createdAt | ||
| + | |||
| + | user User @relation( | ||
| + | fields: | ||
| + | references: | ||
| + | ) | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | ---- | ||
| + | |||
| + | ====== MFA ====== | ||
| + | |||
| + | ===== UserMfaMethod ===== | ||
| + | |||
| + | <code prisma> | ||
| + | model UserMfaMethod { | ||
| + | |||
| + | id String | ||
| + | |||
| + | userId | ||
| + | |||
| + | methodType | ||
| + | |||
| + | secret | ||
| + | |||
| + | enabled | ||
| + | |||
| + | createdAt | ||
| + | |||
| + | user User @relation( | ||
| + | fields: | ||
| + | references: | ||
| + | ) | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | ---- | ||
| + | |||
| + | ====== RBAC Enterprise ====== | ||
| + | |||
| + | ===== Role ===== | ||
| + | |||
| + | <code prisma> | ||
| + | model Role { | ||
| + | |||
| + | id String | ||
| + | |||
| + | code String | ||
| + | |||
| + | name String | ||
| + | |||
| + | description | ||
| + | |||
| + | systemRole | ||
| + | |||
| + | createdAt | ||
| + | |||
| + | updatedAt | ||
| + | |||
| + | userRoles | ||
| + | |||
| + | permissions | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | ---- | ||
| + | |||
| + | ===== Permission ===== | ||
| + | |||
| + | <code prisma> | ||
| + | model Permission { | ||
| + | |||
| + | id String | ||
| + | |||
| + | code String | ||
| + | |||
| + | name String | ||
| + | |||
| + | description | ||
| + | |||
| + | module | ||
| + | |||
| + | createdAt | ||
| + | |||
| + | rolePermissions | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | ---- | ||
| + | |||
| + | ====== Catalogue initial des permissions ====== | ||
| + | |||
| + | ===== Auth ===== | ||
| < | < | ||
| - | main | + | AUTH_LOGIN |
| + | |||
| + | AUTH_REGISTER | ||
| + | |||
| + | AUTH_RESET_PASSWORD | ||
| + | |||
| + | AUTH_MANAGE_USERS | ||
| </ | </ | ||
| ---- | ---- | ||
| - | ===== Activer | + | ===== Users ===== |
| < | < | ||
| - | Require Pull Request | + | USER_READ |
| - | Require Status Checks | + | USER_CREATE |
| - | Require Review | + | USER_UPDATE |
| - | Dismiss Stale Reviews | + | USER_DELETE |
| + | </ | ||
| + | |||
| + | ---- | ||
| + | |||
| + | ===== Properties ===== | ||
| + | |||
| + | < | ||
| + | PROPERTY_READ | ||
| + | |||
| + | PROPERTY_CREATE | ||
| + | |||
| + | PROPERTY_UPDATE | ||
| + | |||
| + | PROPERTY_DELETE | ||
| - | Prevent Force Push | + | PROPERTY_PUBLISH |
| </ | </ | ||
| ---- | ---- | ||
| - | ====== Étape 9 — Stratégie Git ====== | + | ===== Reservations |
| - | ===== Branches permanentes | + | < |
| + | RESERVATION_READ | ||
| + | |||
| + | RESERVATION_CREATE | ||
| + | |||
| + | RESERVATION_UPDATE | ||
| + | |||
| + | RESERVATION_CANCEL | ||
| + | </ | ||
| + | |||
| + | ---- | ||
| + | |||
| + | ===== Contracts | ||
| < | < | ||
| - | main | + | CONTRACT_READ |
| + | |||
| + | CONTRACT_CREATE | ||
| - | develop | + | CONTRACT_SIGN |
| </ | </ | ||
| ---- | ---- | ||
| - | ===== Création | + | ===== Payments |
| - | < | + | < |
| - | git checkout -b develop | + | PAYMENT_READ |
| + | |||
| + | PAYMENT_CREATE | ||
| - | git push -u origin develop | + | PAYMENT_REFUND |
| </ | </ | ||
| ---- | ---- | ||
| - | ===== Branches temporaires | + | ===== CRM ===== |
| < | < | ||
| - | feature/ | + | CRM_READ |
| - | feature/ | + | CRM_WRITE |
| - | feature/property-module | + | CRM_EXPORT |
| + | </code> | ||
| - | bugfix/ | + | ---- |
| - | hotfix/security | + | ===== Administration ===== |
| + | |||
| + | < | ||
| + | ADMIN_READ | ||
| + | |||
| + | ADMIN_WRITE | ||
| + | |||
| + | ADMIN_AUDIT | ||
| + | |||
| + | ADMIN_TENANT | ||
| + | </code> | ||
| + | |||
| + | ---- | ||
| + | |||
| + | ====== Rôles système ====== | ||
| + | |||
| + | ===== SUPER_ADMIN ===== | ||
| + | |||
| + | Accès complet plateforme. | ||
| + | |||
| + | ---- | ||
| + | |||
| + | ===== TENANT_ADMIN ===== | ||
| + | |||
| + | Administration d' | ||
| + | |||
| + | ---- | ||
| + | |||
| + | ===== AGENCY_MANAGER ===== | ||
| + | |||
| + | Gestion opérationnelle. | ||
| + | |||
| + | ---- | ||
| + | |||
| + | ===== OWNER ===== | ||
| + | |||
| + | Extranet propriétaire. | ||
| + | |||
| + | ---- | ||
| + | |||
| + | ===== AGENT ===== | ||
| + | |||
| + | Collaborateur. | ||
| + | |||
| + | ---- | ||
| + | |||
| + | ===== CUSTOMER ===== | ||
| + | |||
| + | Client final. | ||
| + | |||
| + | ---- | ||
| + | |||
| + | ====== Indexes recommandés ====== | ||
| + | |||
| + | ===== User ===== | ||
| + | |||
| + | <code prisma> | ||
| + | @@index([tenantId]) | ||
| + | |||
| + | @@index([email]) | ||
| + | |||
| + | @@index([active]) | ||
| + | </ | ||
| + | |||
| + | ---- | ||
| + | |||
| + | ===== LoginHistory ===== | ||
| + | |||
| + | <code prisma> | ||
| + | @@index([userId]) | ||
| + | |||
| + | @@index([createdAt]) | ||
| + | </ | ||
| + | |||
| + | ---- | ||
| + | |||
| + | ===== UserSession ===== | ||
| + | |||
| + | <code prisma> | ||
| + | @@index([userId]) | ||
| + | |||
| + | @@index([expiresAt]) | ||
| </ | </ | ||
| ---- | ---- | ||
| - | ====== | + | ====== |
| - | ===== Format | + | ===== Entités |
| < | < | ||
| - | type(scope): description | + | Property |
| + | |||
| + | PropertyType | ||
| + | |||
| + | PropertyStatus | ||
| + | |||
| + | PropertyAddress | ||
| + | |||
| + | PropertyFeature | ||
| + | |||
| + | PropertyMedia | ||
| + | |||
| + | PropertyAvailability | ||
| + | |||
| + | PropertyRate | ||
| + | |||
| + | PropertyOwner | ||
| + | </ | ||
| + | |||
| + | ---- | ||
| + | |||
| + | ====== Property ====== | ||
| + | |||
| + | ===== Table principale ===== | ||
| + | |||
| + | <code prisma> | ||
| + | model Property { | ||
| + | |||
| + | id String @id @default(uuid()) | ||
| + | |||
| + | tenantId | ||
| + | |||
| + | propertyTypeId | ||
| + | |||
| + | code String @unique | ||
| + | |||
| + | reference | ||
| + | |||
| + | title | ||
| + | |||
| + | slug String @unique | ||
| + | |||
| + | | ||
| + | |||
| + | shortDescription | ||
| + | |||
| + | maxGuests | ||
| + | |||
| + | bedrooms | ||
| + | |||
| + | bathrooms | ||
| + | |||
| + | area Decimal? @db.Decimal(10, | ||
| + | |||
| + | floor | ||
| + | |||
| + | constructionYear | ||
| + | |||
| + | checkInTime | ||
| + | |||
| + | checkOutTime | ||
| + | |||
| + | active | ||
| + | |||
| + | published | ||
| + | |||
| + | createdAt | ||
| + | |||
| + | updatedAt | ||
| + | |||
| + | deletedAt | ||
| + | |||
| + | tenant | ||
| + | fields: | ||
| + | references: | ||
| + | ) | ||
| + | |||
| + | propertyType | ||
| + | fields: | ||
| + | references: | ||
| + | ) | ||
| + | |||
| + | address | ||
| + | |||
| + | features | ||
| + | |||
| + | media | ||
| + | |||
| + | availabilities | ||
| + | |||
| + | rates | ||
| + | |||
| + | owners | ||
| + | |||
| + | reservations | ||
| + | |||
| + | } | ||
| + | </ | ||
| + | |||
| + | ---- | ||
| + | |||
| + | ====== PropertyType ====== | ||
| + | |||
| + | ===== Référentiel ===== | ||
| + | |||
| + | <code prisma> | ||
| + | model PropertyType { | ||
| + | |||
| + | id String @id @default(uuid()) | ||
| + | |||
| + | code String @unique | ||
| + | |||
| + | name String | ||
| + | |||
| + | properties | ||
| + | } | ||
| </ | </ | ||
| ---- | ---- | ||
| - | ===== Types ===== | + | ===== Valeurs |
| < | < | ||
| - | feat | + | HOUSE |
| - | fix | + | APARTMENT |
| - | refactor | + | VILLA |
| - | perf | + | STUDIO |
| - | docs | + | LOFT |
| - | test | + | CHALET |
| - | chore | + | COTTAGE |
| - | build | + | MOBILE_HOME |
| + | </ | ||
| - | ci | + | ---- |
| + | |||
| + | ====== PropertyAddress ====== | ||
| + | |||
| + | ===== Adresse du bien ===== | ||
| + | |||
| + | <code prisma> | ||
| + | model PropertyAddress { | ||
| + | |||
| + | id String @id @default(uuid()) | ||
| + | |||
| + | propertyId | ||
| + | |||
| + | addressLine1 | ||
| + | |||
| + | addressLine2 | ||
| + | |||
| + | postalCode | ||
| + | |||
| + | city String | ||
| + | |||
| + | state | ||
| + | |||
| + | countryCode | ||
| + | |||
| + | latitude | ||
| + | |||
| + | longitude | ||
| + | |||
| + | property | ||
| + | fields: | ||
| + | references: | ||
| + | ) | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | ---- | ||
| + | |||
| + | ====== PropertyFeature ====== | ||
| + | |||
| + | ===== Équipements ===== | ||
| + | |||
| + | <code prisma> | ||
| + | model PropertyFeature { | ||
| + | |||
| + | id String @id @default(uuid()) | ||
| + | |||
| + | propertyId | ||
| + | |||
| + | featureCode | ||
| + | |||
| + | featureValue | ||
| + | |||
| + | property | ||
| + | fields: | ||
| + | references: | ||
| + | ) | ||
| + | } | ||
| </ | </ | ||
| Ligne 396: | Ligne 1302: | ||
| < | < | ||
| - | feat(auth): add login endpoint | + | POOL |
| + | |||
| + | WIFI | ||
| + | |||
| + | PARKING | ||
| + | |||
| + | AIR_CONDITIONING | ||
| - | feat(users): | + | TERRACE |
| - | fix(jwt): refresh token validation | + | SEA_VIEW |
| - | docs(api): update swagger | + | PET_ALLOWED |
| </ | </ | ||
| ---- | ---- | ||
| - | ====== | + | ====== |
| - | ===== Installation | + | ===== Médias |
| - | < | + | < |
| - | npm install -D \ | + | model PropertyMedia { |
| - | @commitlint/ | + | |
| - | @commitlint/ | + | id String |
| + | |||
| + | propertyId | ||
| + | |||
| + | fileName | ||
| + | |||
| + | fileUrl | ||
| + | |||
| + | mediaType | ||
| + | |||
| + | position | ||
| + | |||
| + | isCover | ||
| + | |||
| + | createdAt | ||
| + | |||
| + | property | ||
| + | fields: | ||
| + | references: | ||
| + | ) | ||
| + | } | ||
| </ | </ | ||
| ---- | ---- | ||
| - | ===== commitlint.config.js | + | ===== MediaType |
| - | < | + | < |
| - | module.exports | + | IMAGE |
| - | | + | |
| - | ' | + | VIDEO |
| - | ] | + | |
| + | VIRTUAL_TOUR | ||
| + | |||
| + | DOCUMENT | ||
| + | </ | ||
| + | |||
| + | ---- | ||
| + | |||
| + | ====== PropertyAvailability ====== | ||
| + | |||
| + | ===== Calendrier ===== | ||
| + | |||
| + | <code prisma> | ||
| + | model PropertyAvailability | ||
| + | |||
| + | | ||
| + | |||
| + | | ||
| + | |||
| + | startDate | ||
| + | |||
| + | endDate | ||
| + | |||
| + | status | ||
| + | |||
| + | property | ||
| + | fields: | ||
| + | references: | ||
| + | ) | ||
| } | } | ||
| </ | </ | ||
| Ligne 431: | Ligne 1391: | ||
| ---- | ---- | ||
| - | ====== Étape 12 — Husky ====== | + | ===== Enum ===== |
| - | ===== Installation ===== | + | <code prisma> |
| + | enum AvailabilityStatus { | ||
| - | <code bash> | + | AVAILABLE |
| - | npm install -D husky | + | |
| + | RESERVED | ||
| + | |||
| + | BLOCKED | ||
| + | |||
| + | MAINTENANCE | ||
| + | } | ||
| </ | </ | ||
| ---- | ---- | ||
| - | ===== Initialisation | + | ====== PropertyRate ====== |
| - | < | + | ===== Tarification ===== |
| - | npx husky init | + | |
| + | < | ||
| + | model PropertyRate { | ||
| + | |||
| + | id String @id @default(uuid()) | ||
| + | |||
| + | propertyId | ||
| + | |||
| + | startDate | ||
| + | |||
| + | endDate | ||
| + | |||
| + | nightlyRate | ||
| + | |||
| + | weekendRate | ||
| + | |||
| + | cleaningFee | ||
| + | |||
| + | securityDeposit | ||
| + | |||
| + | currencyCode | ||
| + | |||
| + | property | ||
| + | fields: | ||
| + | references: | ||
| + | ) | ||
| + | } | ||
| </ | </ | ||
| ---- | ---- | ||
| - | ===== Hook pre-commit | + | ====== PropertyOwner ====== |
| - | < | + | ===== Association propriétaire ===== |
| - | .husky/ | + | |
| + | < | ||
| + | model PropertyOwner { | ||
| + | |||
| + | propertyId | ||
| + | |||
| + | ownerId | ||
| + | |||
| + | ownershipRate | ||
| + | |||
| + | property | ||
| + | fields: | ||
| + | references: | ||
| + | ) | ||
| + | |||
| + | owner Owner @relation( | ||
| + | fields: | ||
| + | references: | ||
| + | ) | ||
| + | |||
| + | @@id([propertyId, | ||
| + | } | ||
| </ | </ | ||
| - | < | + | ---- |
| - | npm run lint | + | |
| + | ====== Indexes ====== | ||
| + | |||
| + | ===== Property ===== | ||
| + | |||
| + | < | ||
| + | @@index([tenantId]) | ||
| + | |||
| + | @@index([propertyTypeId]) | ||
| + | |||
| + | @@index([published]) | ||
| + | |||
| + | @@index([active]) | ||
| + | |||
| + | @@index([title]) | ||
| - | npm run test | + | @@index([slug]) |
| </ | </ | ||
| ---- | ---- | ||
| - | ===== Hook commit-msg | + | ===== PropertyAvailability |
| - | < | + | < |
| - | .husky/ | + | @@index([propertyId]) |
| + | |||
| + | @@index([startDate]) | ||
| + | |||
| + | @@index([endDate]) | ||
| </ | </ | ||
| - | < | + | ---- |
| - | npx commitlint --edit $1 | + | |
| + | ===== PropertyRate ===== | ||
| + | |||
| + | < | ||
| + | @@index([propertyId]) | ||
| + | |||
| + | @@index([startDate]) | ||
| + | |||
| + | @@index([endDate]) | ||
| </ | </ | ||
| ---- | ---- | ||
| - | ====== | + | ====== |
| - | ===== Créer | + | ===== Architecture |
| < | < | ||
| - | .github/ | + | Owner |
| + | |||
| + | OwnerAddress | ||
| + | |||
| + | OwnerDocument | ||
| + | |||
| + | OwnerBankAccount | ||
| + | |||
| + | PropertyOwner | ||
| </ | </ | ||
| ---- | ---- | ||
| - | ===== Contenu | + | ====== Owner ====== |
| - | < | + | < |
| - | ## Description | + | model Owner { |
| - | ## Changes | + | id String @id @default(uuid()) |
| - | ## Screenshots | + | tenantId |
| - | ## Tests | + | code String @unique |
| - | ## Checklist | + | companyName |
| - | - [ ] Tests OK | + | firstName |
| - | - [ ] Swagger OK | + | lastName |
| - | - [ ] Migration OK | + | email |
| + | |||
| + | phone | ||
| + | |||
| + | mobile | ||
| + | |||
| + | taxIdentifier | ||
| + | |||
| + | vatNumber | ||
| + | |||
| + | active | ||
| + | |||
| + | createdAt | ||
| + | |||
| + | updatedAt | ||
| + | |||
| + | deletedAt | ||
| + | |||
| + | tenant | ||
| + | fields:[tenantId], | ||
| + | references: | ||
| + | ) | ||
| + | |||
| + | address | ||
| + | |||
| + | documents | ||
| + | |||
| + | bankAccounts | ||
| + | |||
| + | properties | ||
| + | } | ||
| </ | </ | ||
| ---- | ---- | ||
| - | ====== | + | ====== |
| - | ===== Créer ===== | + | <code prisma> |
| + | model OwnerAddress { | ||
| - | < | + | id String @id @default(uuid()) |
| - | .github/ | + | |
| + | ownerId | ||
| + | |||
| + | addressLine1 | ||
| + | |||
| + | addressLine2 | ||
| + | |||
| + | postalCode | ||
| + | |||
| + | city String | ||
| + | |||
| + | state | ||
| + | |||
| + | countryCode | ||
| + | |||
| + | owner Owner @relation( | ||
| + | fields: | ||
| + | references: | ||
| + | ) | ||
| + | } | ||
| </ | </ | ||
| ---- | ---- | ||
| - | ===== Bug ===== | + | ====== OwnerDocument ====== |
| - | < | + | < |
| - | bug_report.yml | + | model OwnerDocument { |
| + | |||
| + | id String @id @default(uuid()) | ||
| + | |||
| + | ownerId | ||
| + | |||
| + | documentType | ||
| + | |||
| + | fileUrl | ||
| + | |||
| + | createdAt | ||
| + | |||
| + | owner Owner @relation( | ||
| + | fields: | ||
| + | references: | ||
| + | ) | ||
| + | } | ||
| </ | </ | ||
| ---- | ---- | ||
| - | ===== Feature | + | ===== Document Types ===== |
| < | < | ||
| - | feature_request.yml | + | IDENTITY |
| + | |||
| + | TAX_DOCUMENT | ||
| + | |||
| + | MANDATE | ||
| + | |||
| + | BANK_DETAILS | ||
| + | |||
| + | INSURANCE | ||
| </ | </ | ||
| ---- | ---- | ||
| - | ====== | + | ====== |
| - | Créer | + | <code prisma> |
| + | model OwnerBankAccount { | ||
| + | |||
| + | id String @id @default(uuid()) | ||
| + | |||
| + | ownerId | ||
| + | |||
| + | iban String | ||
| + | |||
| + | bic | ||
| + | |||
| + | accountHolder | ||
| + | |||
| + | active | ||
| + | |||
| + | owner Owner @relation( | ||
| + | fields:[ownerId], | ||
| + | references: | ||
| + | ) | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | ---- | ||
| + | |||
| + | ====== Domaine Reservation ====== | ||
| + | |||
| + | ===== Architecture ===== | ||
| < | < | ||
| - | bug | + | Reservation |
| - | feature | + | ReservationGuest |
| - | enhancement | + | ReservationStatusHistory |
| - | documentation | + | ReservationEvent |
| - | security | + | ReservationPricing |
| + | </ | ||
| - | performance | + | ---- |
| - | infra | + | ====== Reservation ====== |
| - | backend | + | ===== Table centrale ===== |
| - | frontend | + | <code prisma> |
| + | model Reservation { | ||
| - | api | + | id String @id @default(uuid()) |
| - | database | + | tenantId |
| + | |||
| + | propertyId | ||
| + | |||
| + | customerId | ||
| + | |||
| + | reference | ||
| + | |||
| + | status | ||
| + | |||
| + | checkInDate | ||
| + | |||
| + | checkOutDate | ||
| + | |||
| + | nights | ||
| + | |||
| + | adults | ||
| + | |||
| + | children | ||
| + | |||
| + | infants | ||
| + | |||
| + | totalGuests | ||
| + | |||
| + | notes | ||
| + | |||
| + | source | ||
| + | |||
| + | createdAt | ||
| + | |||
| + | updatedAt | ||
| + | |||
| + | cancelledAt | ||
| + | |||
| + | tenant | ||
| + | fields: | ||
| + | references: | ||
| + | ) | ||
| + | |||
| + | property | ||
| + | fields: | ||
| + | references: | ||
| + | ) | ||
| + | |||
| + | guests | ||
| + | |||
| + | events | ||
| + | |||
| + | statusHistory | ||
| + | |||
| + | pricing | ||
| + | } | ||
| </ | </ | ||
| ---- | ---- | ||
| - | ====== | + | ====== |
| - | ===== Colonnes ===== | + | <code prisma> |
| + | enum ReservationStatus { | ||
| - | < | + | DRAFT |
| - | Backlog | + | |
| - | Ready | + | PENDING |
| - | In Progress | + | CONFIRMED |
| - | Review | + | SIGNED |
| - | Testing | + | PAID |
| - | Done | + | CHECKED_IN |
| + | |||
| + | COMPLETED | ||
| + | |||
| + | CANCELLED | ||
| + | } | ||
| </ | </ | ||
| ---- | ---- | ||
| - | ====== | + | ====== |
| - | ===== Créer ===== | + | <code prisma> |
| + | enum ReservationSource { | ||
| - | < | + | WEBSITE |
| - | .github/ | + | |
| + | BACKOFFICE | ||
| + | |||
| + | AIRBNB | ||
| + | |||
| + | BOOKING | ||
| + | |||
| + | VRBO | ||
| + | |||
| + | API | ||
| + | } | ||
| </ | </ | ||
| ---- | ---- | ||
| - | ===== Pipeline minimal | + | ====== ReservationGuest ====== |
| - | < | + | < |
| - | name: CI | + | model ReservationGuest { |
| - | on: | + | id String @id @default(uuid()) |
| - | pull_request: | + | |
| - | push: | + | |
| - | jobs: | + | reservationId |
| - | | + | |
| - | runs-on: ubuntu-latest | + | lastName |
| - | steps: | + | birthDate |
| - | - uses: actions/ | + | email |
| - | - uses: actions/ | + | phone |
| - | - run: npm install | + | isPrimary |
| - | - run: npm run lint | + | reservation |
| + | fields:[reservationId], | ||
| + | references: | ||
| + | ) | ||
| + | } | ||
| + | </ | ||
| - | | + | ---- |
| - | - run: npm run build | + | ====== ReservationPricing ====== |
| + | |||
| + | <code prisma> | ||
| + | model ReservationPricing { | ||
| + | |||
| + | id String @id @default(uuid()) | ||
| + | |||
| + | reservationId | ||
| + | |||
| + | nightlyAmount | ||
| + | |||
| + | cleaningFee | ||
| + | |||
| + | touristTax | ||
| + | |||
| + | discountAmount | ||
| + | |||
| + | totalAmount | ||
| + | |||
| + | currencyCode | ||
| + | |||
| + | reservation | ||
| + | fields:[reservationId], | ||
| + | references: | ||
| + | ) | ||
| + | } | ||
| </ | </ | ||
| ---- | ---- | ||
| - | ====== | + | ====== |
| - | ===== GitHub ===== | + | <code prisma> |
| + | model ReservationEvent { | ||
| - | < | + | id String @id @default(uuid()) |
| - | Settings | + | |
| - | Secrets | + | reservationId |
| - | Actions | + | eventType |
| + | |||
| + | payload | ||
| + | |||
| + | createdAt | ||
| + | |||
| + | reservation | ||
| + | fields: | ||
| + | references: | ||
| + | ) | ||
| + | } | ||
| </ | </ | ||
| ---- | ---- | ||
| - | ===== Ajouter | + | ===== Event Types ===== |
| < | < | ||
| - | DATABASE_URL | + | CREATED |
| - | JWT_SECRET | + | CONFIRMED |
| - | REDIS_URL | + | SIGNED |
| - | MINIO_ACCESS_KEY | + | PAID |
| - | MINIO_SECRET_KEY | + | CHECK_IN |
| + | |||
| + | CHECK_OUT | ||
| + | |||
| + | CANCELLED | ||
| </ | </ | ||
| ---- | ---- | ||
| - | ====== | + | ====== |
| - | ===== Convention ===== | + | <code prisma> |
| + | model ReservationStatusHistory { | ||
| - | < | + | id String @id @default(uuid()) |
| - | v1.0.0 | + | |
| - | v1.1.0 | + | reservationId |
| - | v1.2.0 | + | previousStatus |
| - | v2.0.0 | + | newStatus |
| + | |||
| + | changedAt | ||
| + | |||
| + | reservation | ||
| + | fields: | ||
| + | references: | ||
| + | ) | ||
| + | } | ||
| </ | </ | ||
| ---- | ---- | ||
| - | ===== Créer | + | ====== Relations à ajouter ====== |
| - | <code bash> | + | ===== Property ===== |
| - | git tag v1.0.0 | + | |
| + | Ajouter : | ||
| - | git push origin v1.0.0 | + | <code prisma> |
| + | reservations Reservation[] | ||
| </ | </ | ||
| ---- | ---- | ||
| - | ====== Étape 20 — CODEOWNERS ====== | + | ===== Tenant |
| - | ===== Créer ===== | + | Ajouter : |
| - | < | + | < |
| - | .github/ | + | owners Owner[] |
| + | |||
| + | reservations Reservation[] | ||
| </ | </ | ||
| ---- | ---- | ||
| - | ===== Exemple | + | ====== Indexes ====== |
| - | < | + | ===== Owner ===== |
| - | * @techlead | + | |
| - | apps/ | + | <code prisma> |
| + | @@index([tenantId]) | ||
| - | apps/ | + | @@index([email]) |
| - | prisma/ | + | @@index([active]) |
| </ | </ | ||
| ---- | ---- | ||
| - | ====== Étape 21 — Documentation du dépôt ====== | + | ===== Reservation |
| - | ===== Créer ===== | + | <code prisma> |
| + | @@index([tenantId]) | ||
| - | < | + | @@index([propertyId]) |
| - | docs/ | + | |
| - | docs/ | + | @@index([status]) |
| - | docs/api | + | @@index([checkInDate]) |
| - | docs/ | + | @@index([checkOutDate]) |
| - | docs/ | + | @@index([reference]) |
| </ | </ | ||
| ---- | ---- | ||
| - | ====== Vérification finale ====== | + | ===== ReservationGuest |
| - | Le dépôt | + | <code prisma> |
| + | @@index([reservationId]) | ||
| + | </ | ||
| + | |||
| + | ---- | ||
| + | |||
| + | ====== Validation ====== | ||
| + | |||
| + | <code bash> | ||
| + | npx prisma format | ||
| + | |||
| + | npx prisma validate | ||
| + | |||
| + | npx prisma generate | ||
| + | </ | ||
| + | |||
| + | ---- | ||
| + | |||
| + | ====== Migration ====== | ||
| + | |||
| + | <code bash> | ||
| + | npx prisma migrate dev \ | ||
| + | --name owners_and_reservations | ||
| + | </ | ||
| + | |||
| + | ---- | ||
| + | |||
| + | ====== État actuel du schéma ====== | ||
| + | |||
| + | À ce stade, le noyau fonctionnel | ||
| < | < | ||
| - | ✓ Git initialisé | + | Tenant |
| - | ✓ GitHub connecté | + | User |
| - | ✓ SSH fonctionnel | + | Role |
| - | ✓ Branch protection active | + | Permission |
| - | ✓ Workflows CI actifs | + | Owner |
| - | ✓ Pull Requests obligatoires | + | Property |
| - | ✓ Husky actif | + | Reservation |
| + | </ | ||
| - | ✓ Commitlint actif | + | avec : |
| - | ✓ Templates actifs | + | < |
| + | Catalogue Immobilier | ||
| + | |||
| + | Propriétaires | ||
| - | ✓ Releases configurées | + | Réservations |
| - | ✓ CODEOWNERS actif | + | RBAC |
| - | ✓ Documentation présente | + | Multi-tenant |
| </ | </ | ||
| ---- | ---- | ||
| - | ====== | + | ====== |
| - | Pour ce projet SaaS Enterprise, ajouter également | + | ===== Phase 2-E ===== |
| + | |||
| + | Domaines financiers et contractuels | ||
| < | < | ||
| - | ✓ Dependabot | + | Contract |
| - | ✓ CodeQL | + | ContractTemplate |
| - | ✓ Secret Scanning | + | ContractSignature |
| - | ✓ Container Scanning | + | Document |
| - | ✓ SBOM | + | Payment |
| - | ✓ SAST | + | Invoice |
| - | ✓ DAST | + | Refund |
| - | ✓ Security Policy | + | AccountingEntry |
| - | + | ||
| - | ✓ CHANGELOG automatique | + | |
| </ | </ | ||
| - | Ces éléments seront nécessaires à partir des Sprints 12 à 20 pour maintenir un niveau de qualité | + | Ces tables permettront d' |
| + | |||
| + | * Sprint 5 — Contrats & Signature Électronique | ||
| + | * Sprint 6 — Paiements & Facturation | ||
| + | |||
| + | et de disposer du premier flux métier complet : | ||
| + | |||
| + | < | ||
| + | Property | ||
| + | |||
| + | ↓ | ||
| + | |||
| + | Reservation | ||
| + | |||
| + | ↓ | ||
| + | |||
| + | Contract | ||
| + | |||
| + | ↓ | ||
| + | |||
| + | Payment | ||
| + | |||
| + | ↓ | ||
| + | |||
| + | Invoice | ||
| + | </ | ||
ujusum/3-codage/1-repository/2-prisma-schema.1780800251.txt.gz · Dernière modification : 2026/06/07 04:44 de 91.170.108.99 · Actuellement bloqué par : 192.168.0.100,216.73.216.72