Ceci est une ancienne révision du document !
Table des matières
Phase 2 — Prisma Schema
Objectif
Construire le schéma Prisma qui deviendra la source de vérité unique du système.
À partir de ce schéma seront générés :
- PostgreSQL
- Prisma Client
- DTO
- Entités NestJS
- OpenAPI
- SDK TypeScript
- Migrations SQL
Le schéma doit refléter l'intégralité des domaines définis dans les 20 sprints.
Objectifs techniques
Le schéma Prisma doit supporter :
Multi-tenant Audit Historisation Soft Delete RBAC CRM Catalogue Réservations Paiements Contrats OTA IA Revenue Management Internationalisation Sécurité Enterprise
Ordre de construction recommandé
Ne jamais commencer par les 80 tables.
Construire par couches.
Couche 1 — Fondations
Construire en premier :
Tenant User Role Permission UserRole RolePermission
Ces tables sont nécessaires partout.
Couche 2 — Référentiels
Créer :
Address Country Language Currency Timezone
Couche 3 — Catalogue
Créer :
Property PropertyType PropertyMedia PropertyFeature PropertyAvailability PropertyRate
Couche 4 — Réservations
Créer :
Reservation ReservationGuest ReservationStatus ReservationEvent
Couche 5 — Contrats
Créer :
Contract ContractTemplate ContractSignature Document
Couche 6 — Paiements
Créer :
Payment Invoice Refund AccountingEntry
Couche 7 — CRM
Créer :
Lead Customer Activity Task Pipeline
Couche 8 — Propriétaires
Créer :
Owner OwnerProperty OwnerDocument
Couche 9 — Notifications
Créer :
Notification NotificationTemplate Message Campaign
Couche 10 — Administration
Créer :
AuditLog FeatureFlag CustomField Workflow
Couche 11 — IA
Créer :
AiConversation AiMessage KnowledgeDocument AutomationRule
Couche 12 — OTA
Créer :
Channel ChannelConnection PropertyDistribution ChannelReservation
Couche 13 — Revenue Management
Créer :
PricingRule DynamicPrice RevenueSimulation CompetitorSnapshot
Couche 14 — Sécurité
Créer :
Consent SecurityPolicy Risk ComplianceAudit
Couche 15 — Internationalisation
Créer :
Translation CurrencyRate Region EnterpriseLicense
Organisation du dossier Prisma
Au lieu d'un unique fichier géant :
prisma/ ├── schema.prisma │ ├── models/ │ │ ├── tenant.prisma │ ├── user.prisma │ ├── property.prisma │ ├── reservation.prisma │ ├── contract.prisma │ ├── payment.prisma │ ├── crm.prisma │ ├── owner.prisma │ ├── notification.prisma │ ├── audit.prisma │ ├── ai.prisma │ ├── channel.prisma │ ├── revenue.prisma │ ├── security.prisma │ └── localization.prisma
Configuration initiale
schema.prisma
Version minimale :
generator client {
provider = "prisma-client-js"
}
datasource db {
provider = "postgresql"
url = env("DATABASE_URL")
}
Première implémentation
Étape 1
Créer :
prisma/models/tenant.prisma
Tenant
model Tenant {
id String @id @default(uuid())
code String @unique
name String
status TenantStatus
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
users User[]
properties Property[]
}
Enum
enum TenantStatus {
ACTIVE
SUSPENDED
TRIAL
ARCHIVED
}
Étape 2
Créer :
prisma/models/user.prisma
User
model User {
id String @id @default(uuid())
tenantId String
email String @unique
passwordHash String
firstName String
lastName String
active Boolean @default(true)
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
tenant Tenant @relation(
fields:[tenantId],
references:[id]
)
roles UserRole[]
}
Role
model Role {
id String @id @default(uuid())
code String @unique
name String
userRoles UserRole[]
permissions RolePermission[]
}
Permission
model Permission {
id String @id @default(uuid())
code String @unique
name String
rolePermissions RolePermission[]
}
UserRole
model UserRole {
userId String
roleId String
assignedAt DateTime @default(now())
user User @relation(
fields:[userId],
references:[id]
)
role Role @relation(
fields:[roleId],
references:[id]
)
@@id([userId, roleId])
}
RolePermission
model RolePermission {
roleId String
permissionId String
role Role @relation(
fields:[roleId],
references:[id]
)
permission Permission @relation(
fields:[permissionId],
references:[id]
)
@@id([roleId, permissionId])
}
Génération
Après chaque bloc important :
npx prisma format
Validation
npx prisma validate
Génération Client
npx prisma generate
Migration
npx prisma migrate dev \
--name init_security
Vérification
Ouvrir :
npx prisma studio
Vérifier la présence :
Tenant User Role Permission UserRole RolePermission
Jalon Phase 2-A
La première sous-phase est terminée lorsque :
✓ Tenant ✓ User ✓ Role ✓ Permission ✓ UserRole ✓ RolePermission ✓ Migration exécutée ✓ Prisma Client généré ✓ Prisma Studio fonctionnel
Étape suivante
Une fois cette sous-phase validée, nous produirons :
Phase 2-B
Référentiels globaux :
Country Language Currency Timezone Address Contact
puis :
Phase 2-C
Catalogue Immobilier :
Property PropertyMedia PropertyFeature PropertyAvailability PropertyRate
qui constituera le premier véritable domaine métier du produit.