Outils pour utilisateurs

Outils du site


ujusum:3-codage:1-repository:4-code

Ceci est une ancienne révision du document !


Table des matières

Phase 4-A — Consolidation Finale du Prisma Schema

Objectif

Fusionner l'ensemble des modèles construits durant :

Phase 2-A à Phase 2-N

dans un unique schéma Prisma cohérent :

apps/api/prisma/schema.prisma

Ce schéma deviendra :

Source de vérité de la base PostgreSQL

et servira à générer :

Prisma Client

Repositories

Services NestJS

DTO

OpenAPI

SDK Frontend

Étape 4-A.1 — Consolidation des Enums

Créer les enums globaux

enum UserStatus
 
enum ReservationStatus
 
enum PaymentStatus
 
enum ContractStatus
 
enum LeadStatus
 
enum OpportunityStatus
 
enum TaskStatus
 
enum TaskPriority
 
enum PropertyStatus
 
enum RiskLevel
 
enum NotificationType
 
enum CampaignStatus
 
enum ChannelType
 
enum SyncStatus
 
enum CurrencyCode
 
enum LanguageCode
 
enum DataClassificationLevel

Exemple

enum UserStatus {
 
  ACTIVE
 
  INACTIVE
 
  BLOCKED
 
  PENDING
}

Étape 4-A.2 — Consolidation Authentification & RBAC

Modèles concernés

User

Role

Permission

UserRole

RolePermission

Session

RefreshToken

Relations attendues

User

↓

UserRole

↓

Role

↓

RolePermission

↓

Permission

Contraintes

@@unique([userId, roleId])
 
@@unique([roleId, permissionId])

Étape 4-A.3 — Consolidation CRM

Modèles

Lead

Opportunity

Pipeline

PipelineStage

Activity

Task

CustomerNote

Tag

Segment

Corrections

Ajouter :

assignedUserId String?

sur :

Lead

Opportunity

Task

Relation

assignedUser User?
  @relation(fields:[assignedUserId], references:[id])

Étape 4-A.4 — Consolidation Immobilier

Modèles

Owner

Property

PropertyMedia

PropertyFeature

PropertyAvailability

PropertyRate

PropertyDistribution

Champs supplémentaires

slug String @unique
 
reference String @unique
 
publicUrl String?

Index

@@index([slug])
 
@@index([reference])

Étape 4-A.5 — Consolidation Réservations

Modèles

Reservation

ReservationGuest

ReservationPricing

ReservationEvent

ReservationStatusHistory

Champ métier

reservationNumber String @unique

Index

@@index([reservationNumber])

Étape 4-A.6 — Consolidation Finance

Modèles

Payment

Refund

Invoice

AccountingEntry

Contraintes

paymentReference String @unique
 
invoiceNumber String @unique

Index

@@index([paymentReference])
 
@@index([invoiceNumber])

Étape 4-A.7 — Consolidation Communication

Modèles

Conversation

Message

Notification

Email

Sms

Template

Campaign

CampaignRecipient

CampaignExecution

Multi-tenant

Ajouter :

tenantId String

sur tous les modèles.


Étape 4-A.8 — Consolidation IA

Modèles

AiConversation

AiMessage

KnowledgeDocument

KnowledgeChunk

Recommendation

AutomationScenario

AutomationExecution

Si pgvector est utilisé :

embedding Unsupported("vector")?

Fallback

Sinon :

embedding Json?

Étape 4-A.9 — Consolidation Gouvernance

Modèles

AuditLog

EntityHistory

FeatureFlag

Workflow

WorkflowStep

WorkflowInstance

WorkflowExecution

Multi-tenant

Ajouter :

tenantId String

sur l'ensemble des modèles.


Étape 4-A.10 — Mise en place du Multi-Tenant

Modèle central

model Tenant {
 
  id          String   @id @default(uuid())
 
  code        String   @unique
 
  name        String
 
  active      Boolean  @default(true)
 
  createdAt   DateTime @default(now())
 
  updatedAt   DateTime @updatedAt
}

Relation standard

Ajouter sur tous les modèles métier :

tenantId String
 
tenant Tenant
  @relation(fields:[tenantId], references:[id])

Index

@@index([tenantId])

Étape 4-A.11 — Soft Delete Global

Ajouter sur tous les modèles métier

deletedAt DateTime?

Bénéfices

Suppression logique

Restauration possible

Audit complet

Conformité RGPD

Étape 4-A.12 — Audit Global

Ajouter sur tous les modèles métier

createdAt DateTime @default(now())
 
updatedAt DateTime @updatedAt
 
createdBy String?
 
updatedBy String?

Objectif

Tracer :

Création

Modification

Historique utilisateur

sur l'ensemble du système.


Étape 4-A.13 — Indexation Enterprise

Ajouter systématiquement

@@index([createdAt])
 
@@index([updatedAt])
 
@@index([deletedAt])

sur tous les modèles volumineux :

Reservation

Payment

Invoice

Lead

Activity

AuditLog

Notification

Message

CampaignExecution

AutomationExecution

Étape 4-A.14 — Validation du schéma

Vérification Prisma

npx prisma validate

Formatage

npx prisma format

Génération Client

npx prisma generate

Résultat attendu

À la fin de la Phase 4-A :

1 schema.prisma consolidé

≈ 110 modèles

≈ 350 relations

≈ 150 enums

≈ 500 index

100 % cohérent

Prêt pour migration

Livrable

apps/api/prisma/schema.prisma

Phase 4-B — Migrations Prisma

Objectif

Transformer le schéma Prisma consolidé :

apps/api/prisma/schema.prisma

en une véritable base PostgreSQL opérationnelle.

À l'issue de cette phase :

✓ Base PostgreSQL créée

✓ Tables générées

✓ Index générés

✓ Contraintes générées

✓ Prisma Client généré

✓ Prisma Studio disponible

Prérequis

Vérifier PostgreSQL

docker ps

Vous devez voir :

postgres

en cours d'exécution.


Tester la connexion

psql -h localhost -U postgres

ou

docker exec -it postgres psql -U postgres

Étape 4-B.1 — Création du fichier .env

apps/api/.env

touch apps/api/.env

Contenu

DATABASE_URL="postgresql://postgres:postgres@localhost:5432/rental_platform?schema=public"

Vérification

cat apps/api/.env

Étape 4-B.2 — Validation Prisma

Vérification du schéma

cd apps/api
 
npx prisma validate

Résultat attendu

The schema at prisma/schema.prisma is valid

Si erreur

Corriger :

relations

enum

index

syntaxe Prisma

avant de continuer.


Étape 4-B.3 — Formatage Prisma

Formatage

npx prisma format

Résultat

Prisma schema loaded

Formatted prisma/schema.prisma

Étape 4-B.4 — Création de la première migration

Génération

npx prisma migrate dev --name init

Prisma va créer

prisma/

└── migrations/

    └── xxxxxxxxx_init/

        └── migration.sql

Exemple

CREATE TABLE "User"

CREATE TABLE "Role"

CREATE TABLE "Property"

CREATE TABLE "Reservation"

CREATE TABLE "Invoice"

CREATE TABLE "Payment"

etc.


Étape 4-B.5 — Vérification des tables

Ouvrir PostgreSQL

docker exec -it postgres psql -U postgres

Sélection base

\c rental_platform

Lister les tables

\dt

Résultat attendu

Tenant

User

Role

Permission

Owner

Property

Customer

Reservation

Contract

Invoice

Payment

...

≈ 110 tables.


Étape 4-B.6 — Génération Prisma Client

Générer

npx prisma generate

Résultat

node_modules/.prisma/client

Vérification

ls node_modules/.prisma/client

Étape 4-B.7 — Test Prisma Client

Créer

apps/api/src/test-prisma.ts

Contenu

import { PrismaClient } from '@prisma/client';
 
const prisma = new PrismaClient();
 
async function main() {
 
  const tenants = await prisma.tenant.findMany();
 
  console.log(tenants);
}
 
main();

Exécuter

npx ts-node src/test-prisma.ts

Résultat attendu

[]

ou une liste de tenants.


Étape 4-B.8 — Seed Initial

Créer

prisma/seed.ts

Tenant principal

await prisma.tenant.create({
 
  data: {
 
    code: 'MAIN',
 
    name: 'Main Tenant'
  }
});

Rôle Admin

await prisma.role.create({
 
  data: {
 
    code: 'SUPER_ADMIN',
 
    name: 'Super Administrateur'
  }
});

Permissions

await prisma.permission.createMany({
 
  data: [
 
    {
      code: 'users.read',
      name: 'Users Read'
    },
 
    {
      code: 'users.create',
      name: 'Users Create'
    }
  ]
});

Exécuter

npx prisma db seed

Étape 4-B.9 — Prisma Studio

Lancer

npx prisma studio

URL

http://localhost:5555

Vérifications

Tenant

User

Role

Permission

Property

Reservation

Payment

Invoice

doivent être visibles.


Étape 4-B.10 — Snapshot SQL

Générer

pg_dump \
-U postgres \
-d rental_platform \
-s \
> schema.sql

Résultat

schema.sql

Ce fichier servira :

Audit

Review

Backup

Documentation

Contrôles qualité

Nombre de tables

SELECT COUNT(*)
 
FROM information_schema.tables
 
WHERE table_schema='public';

Nombre d'index

SELECT COUNT(*)
 
FROM pg_indexes
 
WHERE schemaname='public';

Nombre de contraintes

SELECT COUNT(*)
 
FROM information_schema.table_constraints;

Définition de terminé

La Phase 4-B est terminée lorsque :

✓ Migration init exécutée

✓ PostgreSQL fonctionnel

✓ 110+ tables créées

✓ Prisma Client généré

✓ Seed exécuté

✓ Prisma Studio fonctionnel

✓ Snapshot SQL généré

Livrables

prisma/schema.prisma

prisma/migrations/*

prisma/seed.ts

schema.sql

Étape suivante

Phase 4-C — DTO & Contrats TypeScript

Objectif :

Générer l'ensemble des contrats applicatifs :

DTO NestJS

Types TypeScript

Zod Schemas

OpenAPI Models

Validation Classes

à partir du Prisma Schema consolidé.

ujusum/3-codage/1-repository/4-code.1780874539.txt.gz · Dernière modification : 2026/06/08 01:22 de admin

DokuWiki Appliance - Powered by TurnKey Linux