Outils pour utilisateurs

Outils du site


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

Ceci est une ancienne révision du document !


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.

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