Outils pour utilisateurs

Outils du site


ujusum:3-codage:1-repository:2-prisma-schema

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentesRévision précédente
Prochaine révision
Révision précédente
ujusum:3-codage:1-repository:2-prisma-schema [2026/06/07 04:44] 91.170.108.99ujusum:3-codage:1-repository:2-prisma-schema [2026/06/07 05:27] (Version actuelle) 91.170.108.99
Ligne 615: Ligne 615:
 ---- ----
  
-====== Jalon Phase 2-A ======+====== Phase 2-A — Fondation complète (Tenant + RBAC + Propriétés de sécurité) ======
  
-La première sous-phase est terminée lorsque :+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      @id @default(uuid()) 
 + 
 +  tenantId          String 
 + 
 +  email             String      @unique 
 + 
 +  passwordHash      String 
 + 
 +  firstName         String 
 + 
 +  lastName          String 
 + 
 +  phone             String? 
 + 
 +  avatarUrl         String? 
 + 
 +  languageCode      String? 
 + 
 +  timezoneCode      String? 
 + 
 +  active            Boolean     @default(true) 
 + 
 +  emailVerified     Boolean     @default(false) 
 + 
 +  lastLoginAt       DateTime? 
 + 
 +  createdAt         DateTime    @default(now()) 
 + 
 +  updatedAt         DateTime    @updatedAt 
 + 
 +  deletedAt         DateTime? 
 + 
 +  tenant            Tenant      @relation( 
 +                                  fields:[tenantId], 
 +                                  references:[id] 
 +                                ) 
 + 
 +  roles             UserRole[] 
 + 
 +  sessions          UserSession[] 
 + 
 +  refreshTokens     RefreshToken[] 
 + 
 +  preferences       UserPreference? 
 + 
 +  loginHistory      LoginHistory[] 
 + 
 +  mfaMethods        UserMfaMethod[] 
 +
 +</code> 
 + 
 +---- 
 + 
 +====== Préférences utilisateur ====== 
 + 
 +===== UserPreference ===== 
 + 
 +<code prisma> 
 +model UserPreference { 
 + 
 +  id                String      @id @default(uuid()) 
 + 
 +  userId            String      @unique 
 + 
 +  theme             String? 
 + 
 +  language          String? 
 + 
 +  timezone          String? 
 + 
 +  notifications     Json? 
 + 
 +  createdAt         DateTime    @default(now()) 
 + 
 +  updatedAt         DateTime    @updatedAt 
 + 
 +  user              User @relation( 
 +                        fields:[userId], 
 +                        references:[id] 
 +                      ) 
 +
 +</code> 
 + 
 +---- 
 + 
 +====== Gestion des sessions ====== 
 + 
 +===== UserSession ===== 
 + 
 +<code prisma> 
 +model UserSession { 
 + 
 +  id                String      @id @default(uuid()) 
 + 
 +  userId            String 
 + 
 +  ipAddress         String? 
 + 
 +  userAgent         String? 
 + 
 +  country           String? 
 + 
 +  city              String? 
 + 
 +  lastActivityAt    DateTime 
 + 
 +  expiresAt         DateTime 
 + 
 +  revokedAt         DateTime? 
 + 
 +  createdAt         DateTime    @default(now()) 
 + 
 +  user              User @relation( 
 +                        fields:[userId], 
 +                        references:[id] 
 +                      ) 
 +
 +</code> 
 + 
 +---- 
 + 
 +====== Refresh Tokens ====== 
 + 
 +===== RefreshToken ===== 
 + 
 +<code prisma> 
 +model RefreshToken { 
 + 
 +  id                String      @id @default(uuid()) 
 + 
 +  userId            String 
 + 
 +  tokenHash         String 
 + 
 +  expiresAt         DateTime 
 + 
 +  revokedAt         DateTime? 
 + 
 +  createdAt         DateTime    @default(now()) 
 + 
 +  user              User @relation( 
 +                        fields:[userId], 
 +                        references:[id] 
 +                      ) 
 +
 +</code> 
 + 
 +---- 
 + 
 +====== Historique des connexions ====== 
 + 
 +===== LoginHistory ===== 
 + 
 +<code prisma> 
 +model LoginHistory { 
 + 
 +  id                String      @id @default(uuid()) 
 + 
 +  userId            String 
 + 
 +  success           Boolean 
 + 
 +  ipAddress         String? 
 + 
 +  userAgent         String? 
 + 
 +  country           String? 
 + 
 +  city              String? 
 + 
 +  createdAt         DateTime @default(now()) 
 + 
 +  user              User @relation( 
 +                        fields:[userId], 
 +                        references:[id] 
 +                      ) 
 +
 +</code> 
 + 
 +---- 
 + 
 +====== MFA ====== 
 + 
 +===== UserMfaMethod ===== 
 + 
 +<code prisma> 
 +model UserMfaMethod { 
 + 
 +  id                String      @id @default(uuid()) 
 + 
 +  userId            String 
 + 
 +  methodType        String 
 + 
 +  secret            String? 
 + 
 +  enabled           Boolean     @default(true) 
 + 
 +  createdAt         DateTime    @default(now()) 
 + 
 +  user              User @relation( 
 +                        fields:[userId], 
 +                        references:[id] 
 +                      ) 
 +
 +</code> 
 + 
 +---- 
 + 
 +====== RBAC Enterprise ====== 
 + 
 +===== Role ===== 
 + 
 +<code prisma> 
 +model Role { 
 + 
 +  id                String      @id @default(uuid()) 
 + 
 +  code              String      @unique 
 + 
 +  name              String 
 + 
 +  description       String? 
 + 
 +  systemRole        Boolean     @default(false) 
 + 
 +  createdAt         DateTime    @default(now()) 
 + 
 +  updatedAt         DateTime    @updatedAt 
 + 
 +  userRoles         UserRole[] 
 + 
 +  permissions       RolePermission[] 
 +
 +</code> 
 + 
 +---- 
 + 
 +===== Permission ===== 
 + 
 +<code prisma> 
 +model Permission { 
 + 
 +  id                String      @id @default(uuid()) 
 + 
 +  code              String      @unique 
 + 
 +  name              String 
 + 
 +  description       String? 
 + 
 +  module            String 
 + 
 +  createdAt         DateTime    @default(now()) 
 + 
 +  rolePermissions   RolePermission[] 
 +
 +</code> 
 + 
 +---- 
 + 
 +====== Catalogue initial des permissions ====== 
 + 
 +===== Auth =====
  
 <code> <code>
-✓ Tenant+AUTH_LOGIN
  
-✓ User+AUTH_REGISTER
  
-✓ Role+AUTH_RESET_PASSWORD
  
-✓ Permission+AUTH_MANAGE_USERS 
 +</code>
  
-✓ UserRole+----
  
-✓ RolePermission+===== Users =====
  
-✓ Migration exécutée+<code> 
 +USER_READ 
 + 
 +USER_CREATE
  
-✓ Prisma Client généré+USER_UPDATE
  
-✓ Prisma Studio fonctionnel+USER_DELETE
 </code> </code>
  
 ---- ----
  
-====== Étape suivante ======+===== Properties =====
  
-Une fois cette sous-phase validée, nous produirons :+<code> 
 +PROPERTY_READ
  
-===== Phase 2-B =====+PROPERTY_CREATE
  
-Référentiels globaux :+PROPERTY_UPDATE 
 + 
 +PROPERTY_DELETE 
 + 
 +PROPERTY_PUBLISH 
 +</code> 
 + 
 +---- 
 + 
 +===== Reservations =====
  
 <code> <code>
-Country+RESERVATION_READ
  
-Language+RESERVATION_CREATE
  
-Currency+RESERVATION_UPDATE
  
-Timezone+RESERVATION_CANCEL 
 +</code> 
 + 
 +---- 
 + 
 +===== Contracts ===== 
 + 
 +<code> 
 +CONTRACT_READ
  
-Address+CONTRACT_CREATE
  
-Contact+CONTRACT_SIGN
 </code> </code>
  
-puis :+---- 
 + 
 +===== Payments ===== 
 + 
 +<code> 
 +PAYMENT_READ 
 + 
 +PAYMENT_CREATE 
 + 
 +PAYMENT_REFUND 
 +</code> 
 + 
 +---- 
 + 
 +===== CRM ===== 
 + 
 +<code> 
 +CRM_READ 
 + 
 +CRM_WRITE 
 + 
 +CRM_EXPORT 
 +</code> 
 + 
 +---- 
 + 
 +===== Administration ===== 
 + 
 +<code> 
 +ADMIN_READ 
 + 
 +ADMIN_WRITE 
 + 
 +ADMIN_AUDIT 
 + 
 +ADMIN_TENANT 
 +</code> 
 + 
 +---- 
 + 
 +====== Rôles système ====== 
 + 
 +===== SUPER_ADMIN ===== 
 + 
 +Accès complet plateforme. 
 + 
 +---- 
 + 
 +===== TENANT_ADMIN ===== 
 + 
 +Administration d'agence. 
 + 
 +---- 
 + 
 +===== 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]) 
 +</code> 
 + 
 +---- 
 + 
 +===== LoginHistory ===== 
 + 
 +<code prisma> 
 +@@index([userId]) 
 + 
 +@@index([createdAt]) 
 +</code> 
 + 
 +---- 
 + 
 +===== UserSession ===== 
 + 
 +<code prisma> 
 +@@index([userId]) 
 + 
 +@@index([expiresAt]) 
 +</code> 
 + 
 +----
  
-===== Phase 2-C =====+====== Architecture du domaine Property ======
  
-Catalogue Immobilier :+===== Entités =====
  
 <code> <code>
 Property Property
  
-PropertyMedia+PropertyType 
 + 
 +PropertyStatus 
 + 
 +PropertyAddress
  
 PropertyFeature PropertyFeature
 +
 +PropertyMedia
  
 PropertyAvailability PropertyAvailability
  
 PropertyRate PropertyRate
 +
 +PropertyOwner
 </code> </code>
  
-qui constituera le premier véritable domaine métier du produit.+---- 
 + 
 +====== Property ====== 
 + 
 +===== Table principale ===== 
 + 
 +<code prisma> 
 +model Property { 
 + 
 +  id                    String @id @default(uuid()) 
 + 
 +  tenantId              String 
 + 
 +  propertyTypeId        String 
 + 
 +  code                  String @unique 
 + 
 +  reference             String? 
 + 
 +  title                 String 
 + 
 +  slug                  String @unique 
 + 
 +  description           String? 
 + 
 +  shortDescription      String? 
 + 
 +  maxGuests             Int 
 + 
 +  bedrooms              Int 
 + 
 +  bathrooms             Int 
 + 
 +  area                  Decimal? @db.Decimal(10,2) 
 + 
 +  floor                 Int? 
 + 
 +  constructionYear      Int? 
 + 
 +  checkInTime           String? 
 + 
 +  checkOutTime          String? 
 + 
 +  active                Boolean @default(true) 
 + 
 +  published             Boolean @default(false) 
 + 
 +  createdAt             DateTime @default(now()) 
 + 
 +  updatedAt             DateTime @updatedAt 
 + 
 +  deletedAt             DateTime? 
 + 
 +  tenant                Tenant @relation( 
 +                            fields:[tenantId], 
 +                            references:[id] 
 +                         ) 
 + 
 +  propertyType          PropertyType @relation( 
 +                            fields:[propertyTypeId], 
 +                            references:[id] 
 +                         ) 
 + 
 +  address               PropertyAddress? 
 + 
 +  features              PropertyFeature[] 
 + 
 +  media                 PropertyMedia[] 
 + 
 +  availabilities        PropertyAvailability[] 
 + 
 +  rates                 PropertyRate[] 
 + 
 +  owners                PropertyOwner[] 
 + 
 +  reservations         Reservation[] 
 + 
 +
 +</code> 
 + 
 +---- 
 + 
 +====== PropertyType ====== 
 + 
 +===== Référentiel ===== 
 + 
 +<code prisma> 
 +model PropertyType { 
 + 
 +  id                String @id @default(uuid()) 
 + 
 +  code              String @unique 
 + 
 +  name              String 
 + 
 +  properties        Property[] 
 +
 +</code> 
 + 
 +---- 
 + 
 +===== Valeurs ===== 
 + 
 +<code> 
 +HOUSE 
 + 
 +APARTMENT 
 + 
 +VILLA 
 + 
 +STUDIO 
 + 
 +LOFT 
 + 
 +CHALET 
 + 
 +COTTAGE 
 + 
 +MOBILE_HOME 
 +</code> 
 + 
 +---- 
 + 
 +====== PropertyAddress ====== 
 + 
 +===== Adresse du bien ===== 
 + 
 +<code prisma> 
 +model PropertyAddress { 
 + 
 +  id                String @id @default(uuid()) 
 + 
 +  propertyId        String @unique 
 + 
 +  addressLine1      String 
 + 
 +  addressLine2      String? 
 + 
 +  postalCode        String 
 + 
 +  city              String 
 + 
 +  state             String? 
 + 
 +  countryCode       String 
 + 
 +  latitude          Decimal? @db.Decimal(10,7) 
 + 
 +  longitude         Decimal? @db.Decimal(10,7) 
 + 
 +  property          Property @relation( 
 +                      fields:[propertyId], 
 +                      references:[id] 
 +                    ) 
 +
 +</code> 
 + 
 +---- 
 + 
 +====== PropertyFeature ====== 
 + 
 +===== Équipements ===== 
 + 
 +<code prisma> 
 +model PropertyFeature { 
 + 
 +  id                String @id @default(uuid()) 
 + 
 +  propertyId        String 
 + 
 +  featureCode       String 
 + 
 +  featureValue      String? 
 + 
 +  property          Property @relation( 
 +                      fields:[propertyId], 
 +                      references:[id] 
 +                    ) 
 +
 +</code> 
 + 
 +---- 
 + 
 +===== Exemples ===== 
 + 
 +<code> 
 +POOL 
 + 
 +WIFI 
 + 
 +PARKING 
 + 
 +AIR_CONDITIONING 
 + 
 +TERRACE 
 + 
 +SEA_VIEW 
 + 
 +PET_ALLOWED 
 +</code> 
 + 
 +---- 
 + 
 +====== PropertyMedia ====== 
 + 
 +===== Médias ===== 
 + 
 +<code prisma> 
 +model PropertyMedia { 
 + 
 +  id                String @id @default(uuid()) 
 + 
 +  propertyId        String 
 + 
 +  fileName          String 
 + 
 +  fileUrl           String 
 + 
 +  mediaType         String 
 + 
 +  position          Int 
 + 
 +  isCover           Boolean @default(false) 
 + 
 +  createdAt         DateTime @default(now()) 
 + 
 +  property          Property @relation( 
 +                      fields:[propertyId], 
 +                      references:[id] 
 +                    ) 
 +
 +</code> 
 + 
 +---- 
 + 
 +===== MediaType ===== 
 + 
 +<code> 
 +IMAGE 
 + 
 +VIDEO 
 + 
 +VIRTUAL_TOUR 
 + 
 +DOCUMENT 
 +</code> 
 + 
 +---- 
 + 
 +====== PropertyAvailability ====== 
 + 
 +===== Calendrier ===== 
 + 
 +<code prisma> 
 +model PropertyAvailability { 
 + 
 +  id                String @id @default(uuid()) 
 + 
 +  propertyId        String 
 + 
 +  startDate         DateTime 
 + 
 +  endDate           DateTime 
 + 
 +  status            AvailabilityStatus 
 + 
 +  property          Property @relation( 
 +                      fields:[propertyId], 
 +                      references:[id] 
 +                    ) 
 +
 +</code> 
 + 
 +---- 
 + 
 +===== Enum ===== 
 + 
 +<code prisma> 
 +enum AvailabilityStatus { 
 + 
 +  AVAILABLE 
 + 
 +  RESERVED 
 + 
 +  BLOCKED 
 + 
 +  MAINTENANCE 
 +
 +</code> 
 + 
 +---- 
 + 
 +====== PropertyRate ====== 
 + 
 +===== Tarification ===== 
 + 
 +<code prisma> 
 +model PropertyRate { 
 + 
 +  id                String @id @default(uuid()) 
 + 
 +  propertyId        String 
 + 
 +  startDate         DateTime 
 + 
 +  endDate           DateTime 
 + 
 +  nightlyRate       Decimal @db.Decimal(10,2) 
 + 
 +  weekendRate       Decimal? @db.Decimal(10,2) 
 + 
 +  cleaningFee       Decimal? @db.Decimal(10,2) 
 + 
 +  securityDeposit   Decimal? @db.Decimal(10,2) 
 + 
 +  currencyCode      String 
 + 
 +  property          Property @relation( 
 +                      fields:[propertyId], 
 +                      references:[id] 
 +                    ) 
 +
 +</code> 
 + 
 +---- 
 + 
 +====== PropertyOwner ====== 
 + 
 +===== Association propriétaire ===== 
 + 
 +<code prisma> 
 +model PropertyOwner { 
 + 
 +  propertyId        String 
 + 
 +  ownerId           String 
 + 
 +  ownershipRate     Decimal @db.Decimal(5,2) 
 + 
 +  property          Property @relation( 
 +                      fields:[propertyId], 
 +                      references:[id] 
 +                    ) 
 + 
 +  owner             Owner @relation( 
 +                      fields:[ownerId], 
 +                      references:[id] 
 +                    ) 
 + 
 +  @@id([propertyId, ownerId]) 
 +
 +</code> 
 + 
 +---- 
 + 
 +====== Indexes ====== 
 + 
 +===== Property ===== 
 + 
 +<code prisma> 
 +@@index([tenantId]) 
 + 
 +@@index([propertyTypeId]) 
 + 
 +@@index([published]) 
 + 
 +@@index([active]) 
 + 
 +@@index([title]) 
 + 
 +@@index([slug]) 
 +</code> 
 + 
 +---- 
 + 
 +===== PropertyAvailability ===== 
 + 
 +<code prisma> 
 +@@index([propertyId]) 
 + 
 +@@index([startDate]) 
 + 
 +@@index([endDate]) 
 +</code> 
 + 
 +---- 
 + 
 +===== PropertyRate ===== 
 + 
 +<code prisma> 
 +@@index([propertyId]) 
 + 
 +@@index([startDate]) 
 + 
 +@@index([endDate]) 
 +</code> 
 + 
 +---- 
 + 
 +====== Domaine Owner ====== 
 + 
 +===== Architecture ===== 
 + 
 +<code> 
 +Owner 
 + 
 +OwnerAddress 
 + 
 +OwnerDocument 
 + 
 +OwnerBankAccount 
 + 
 +PropertyOwner 
 +</code> 
 + 
 +---- 
 + 
 +====== Owner ====== 
 + 
 +<code prisma> 
 +model Owner { 
 + 
 +  id                    String @id @default(uuid()) 
 + 
 +  tenantId              String 
 + 
 +  code                  String @unique 
 + 
 +  companyName           String? 
 + 
 +  firstName             String? 
 + 
 +  lastName              String? 
 + 
 +  email                 String 
 + 
 +  phone                 String? 
 + 
 +  mobile                String? 
 + 
 +  taxIdentifier         String? 
 + 
 +  vatNumber             String? 
 + 
 +  active                Boolean @default(true) 
 + 
 +  createdAt             DateTime @default(now()) 
 + 
 +  updatedAt             DateTime @updatedAt 
 + 
 +  deletedAt             DateTime? 
 + 
 +  tenant                Tenant @relation( 
 +                            fields:[tenantId], 
 +                            references:[id] 
 +                         ) 
 + 
 +  address               OwnerAddress? 
 + 
 +  documents             OwnerDocument[] 
 + 
 +  bankAccounts          OwnerBankAccount[] 
 + 
 +  properties            PropertyOwner[] 
 +
 +</code> 
 + 
 +---- 
 + 
 +====== OwnerAddress ====== 
 + 
 +<code prisma> 
 +model OwnerAddress { 
 + 
 +  id                    String @id @default(uuid()) 
 + 
 +  ownerId               String @unique 
 + 
 +  addressLine1          String 
 + 
 +  addressLine2          String? 
 + 
 +  postalCode            String 
 + 
 +  city                  String 
 + 
 +  state                 String? 
 + 
 +  countryCode           String 
 + 
 +  owner                 Owner @relation( 
 +                            fields:[ownerId], 
 +                            references:[id] 
 +                         ) 
 +
 +</code> 
 + 
 +---- 
 + 
 +====== OwnerDocument ====== 
 + 
 +<code prisma> 
 +model OwnerDocument { 
 + 
 +  id                    String @id @default(uuid()) 
 + 
 +  ownerId               String 
 + 
 +  documentType          String 
 + 
 +  fileUrl               String 
 + 
 +  createdAt             DateTime @default(now()) 
 + 
 +  owner                 Owner @relation( 
 +                            fields:[ownerId], 
 +                            references:[id] 
 +                         ) 
 +
 +</code> 
 + 
 +---- 
 + 
 +===== Document Types ===== 
 + 
 +<code> 
 +IDENTITY 
 + 
 +TAX_DOCUMENT 
 + 
 +MANDATE 
 + 
 +BANK_DETAILS 
 + 
 +INSURANCE 
 +</code> 
 + 
 +---- 
 + 
 +====== OwnerBankAccount ====== 
 + 
 +<code prisma> 
 +model OwnerBankAccount { 
 + 
 +  id                    String @id @default(uuid()) 
 + 
 +  ownerId               String 
 + 
 +  iban                  String 
 + 
 +  bic                   String? 
 + 
 +  accountHolder         String 
 + 
 +  active                Boolean @default(true) 
 + 
 +  owner                 Owner @relation( 
 +                            fields:[ownerId], 
 +                            references:[id] 
 +                         ) 
 +
 +</code> 
 + 
 +---- 
 + 
 +====== Domaine Reservation ====== 
 + 
 +===== Architecture ===== 
 + 
 +<code> 
 +Reservation 
 + 
 +ReservationGuest 
 + 
 +ReservationStatusHistory 
 + 
 +ReservationEvent 
 + 
 +ReservationPricing 
 +</code> 
 + 
 +---- 
 + 
 +====== Reservation ====== 
 + 
 +===== Table centrale ===== 
 + 
 +<code prisma> 
 +model Reservation { 
 + 
 +  id                    String @id @default(uuid()) 
 + 
 +  tenantId              String 
 + 
 +  propertyId            String 
 + 
 +  customerId            String? 
 + 
 +  reference             String @unique 
 + 
 +  status                ReservationStatus 
 + 
 +  checkInDate           DateTime 
 + 
 +  checkOutDate          DateTime 
 + 
 +  nights                Int 
 + 
 +  adults                Int 
 + 
 +  children              Int 
 + 
 +  infants               Int 
 + 
 +  totalGuests           Int 
 + 
 +  notes                 String? 
 + 
 +  source                ReservationSource 
 + 
 +  createdAt             DateTime @default(now()) 
 + 
 +  updatedAt             DateTime @updatedAt 
 + 
 +  cancelledAt           DateTime? 
 + 
 +  tenant                Tenant @relation( 
 +                            fields:[tenantId], 
 +                            references:[id] 
 +                         ) 
 + 
 +  property              Property @relation( 
 +                            fields:[propertyId], 
 +                            references:[id] 
 +                         ) 
 + 
 +  guests                ReservationGuest[] 
 + 
 +  events                ReservationEvent[] 
 + 
 +  statusHistory         ReservationStatusHistory[] 
 + 
 +  pricing               ReservationPricing? 
 +
 +</code> 
 + 
 +---- 
 + 
 +====== ReservationStatus ====== 
 + 
 +<code prisma> 
 +enum ReservationStatus { 
 + 
 +  DRAFT 
 + 
 +  PENDING 
 + 
 +  CONFIRMED 
 + 
 +  SIGNED 
 + 
 +  PAID 
 + 
 +  CHECKED_IN 
 + 
 +  COMPLETED 
 + 
 +  CANCELLED 
 +
 +</code> 
 + 
 +---- 
 + 
 +====== ReservationSource ====== 
 + 
 +<code prisma> 
 +enum ReservationSource { 
 + 
 +  WEBSITE 
 + 
 +  BACKOFFICE 
 + 
 +  AIRBNB 
 + 
 +  BOOKING 
 + 
 +  VRBO 
 + 
 +  API 
 +
 +</code> 
 + 
 +---- 
 + 
 +====== ReservationGuest ====== 
 + 
 +<code prisma> 
 +model ReservationGuest { 
 + 
 +  id                    String @id @default(uuid()) 
 + 
 +  reservationId         String 
 + 
 +  firstName             String 
 + 
 +  lastName              String 
 + 
 +  birthDate             DateTime? 
 + 
 +  email                 String? 
 + 
 +  phone                 String? 
 + 
 +  isPrimary             Boolean @default(false) 
 + 
 +  reservation           Reservation @relation( 
 +                            fields:[reservationId], 
 +                            references:[id] 
 +                         ) 
 +
 +</code> 
 + 
 +---- 
 + 
 +====== ReservationPricing ====== 
 + 
 +<code prisma> 
 +model ReservationPricing { 
 + 
 +  id                    String @id @default(uuid()) 
 + 
 +  reservationId         String @unique 
 + 
 +  nightlyAmount         Decimal @db.Decimal(10,2) 
 + 
 +  cleaningFee           Decimal @db.Decimal(10,2) 
 + 
 +  touristTax            Decimal @db.Decimal(10,2) 
 + 
 +  discountAmount        Decimal @db.Decimal(10,2) 
 + 
 +  totalAmount           Decimal @db.Decimal(10,2) 
 + 
 +  currencyCode          String 
 + 
 +  reservation           Reservation @relation( 
 +                            fields:[reservationId], 
 +                            references:[id] 
 +                         ) 
 +
 +</code> 
 + 
 +---- 
 + 
 +====== ReservationEvent ====== 
 + 
 +<code prisma> 
 +model ReservationEvent { 
 + 
 +  id                    String @id @default(uuid()) 
 + 
 +  reservationId         String 
 + 
 +  eventType             String 
 + 
 +  payload               Json? 
 + 
 +  createdAt             DateTime @default(now()) 
 + 
 +  reservation           Reservation @relation( 
 +                            fields:[reservationId], 
 +                            references:[id] 
 +                         ) 
 +
 +</code> 
 + 
 +---- 
 + 
 +===== Event Types ===== 
 + 
 +<code> 
 +CREATED 
 + 
 +CONFIRMED 
 + 
 +SIGNED 
 + 
 +PAID 
 + 
 +CHECK_IN 
 + 
 +CHECK_OUT 
 + 
 +CANCELLED 
 +</code> 
 + 
 +---- 
 + 
 +====== ReservationStatusHistory ====== 
 + 
 +<code prisma> 
 +model ReservationStatusHistory { 
 + 
 +  id                    String @id @default(uuid()) 
 + 
 +  reservationId         String 
 + 
 +  previousStatus        ReservationStatus? 
 + 
 +  newStatus             ReservationStatus 
 + 
 +  changedAt             DateTime @default(now()) 
 + 
 +  reservation           Reservation @relation( 
 +                            fields:[reservationId], 
 +                            references:[id] 
 +                         ) 
 +
 +</code> 
 + 
 +---- 
 + 
 +====== Relations à ajouter ====== 
 + 
 +===== Property ===== 
 + 
 +Ajouter : 
 + 
 +<code prisma> 
 +reservations Reservation[] 
 +</code> 
 + 
 +---- 
 + 
 +===== Tenant ===== 
 + 
 +Ajouter : 
 + 
 +<code prisma> 
 +owners Owner[] 
 + 
 +reservations Reservation[] 
 +</code> 
 + 
 +---- 
 + 
 +====== Indexes ====== 
 + 
 +===== Owner ===== 
 + 
 +<code prisma> 
 +@@index([tenantId]) 
 + 
 +@@index([email]) 
 + 
 +@@index([active]) 
 +</code> 
 + 
 +---- 
 + 
 +===== Reservation ===== 
 + 
 +<code prisma> 
 +@@index([tenantId]) 
 + 
 +@@index([propertyId]) 
 + 
 +@@index([status]) 
 + 
 +@@index([checkInDate]) 
 + 
 +@@index([checkOutDate]) 
 + 
 +@@index([reference]) 
 +</code> 
 + 
 +---- 
 + 
 +===== ReservationGuest ===== 
 + 
 +<code prisma> 
 +@@index([reservationId]) 
 +</code> 
 + 
 +---- 
 + 
 +====== Validation ====== 
 + 
 +<code bash> 
 +npx prisma format 
 + 
 +npx prisma validate 
 + 
 +npx prisma generate 
 +</code> 
 + 
 +---- 
 + 
 +====== Migration ====== 
 + 
 +<code bash> 
 +npx prisma migrate dev \ 
 +--name owners_and_reservations 
 +</code> 
 + 
 +---- 
 + 
 +====== État actuel du schéma ====== 
 + 
 +À ce stade, le noyau fonctionnel est enfin présent : 
 + 
 +<code> 
 +Tenant 
 + 
 +User 
 + 
 +Role 
 + 
 +Permission 
 + 
 +Owner 
 + 
 +Property 
 + 
 +Reservation 
 +</code> 
 + 
 +avec : 
 + 
 +<code> 
 +Catalogue Immobilier 
 + 
 +Propriétaires 
 + 
 +Réservations 
 + 
 +RBAC 
 + 
 +Multi-tenant 
 +</code> 
 + 
 +---- 
 + 
 +====== Étape suivante ====== 
 + 
 +===== Phase 2-E ===== 
 + 
 +Domaines financiers et contractuels : 
 + 
 +<code> 
 +Contract 
 + 
 +ContractTemplate 
 + 
 +ContractSignature 
 + 
 +Document 
 + 
 +Payment 
 + 
 +Invoice 
 + 
 +Refund 
 + 
 +AccountingEntry 
 +</code> 
 + 
 +Ces tables permettront d'implémenter intégralement : 
 + 
 +  * Sprint 5 — Contrats & Signature Électronique 
 +  * Sprint 6 — Paiements & Facturation 
 + 
 +et de disposer du premier flux métier complet : 
 + 
 +<code> 
 +Property 
 + 
 +↓ 
 + 
 +Reservation 
 + 
 +↓ 
 + 
 +Contract 
 + 
 +↓ 
 + 
 +Payment 
 + 
 +↓ 
 + 
 +Invoice 
 +</code>
ujusum/3-codage/1-repository/2-prisma-schema.1780800273.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

DokuWiki Appliance - Powered by TurnKey Linux