Outils pour utilisateurs

Outils du site


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

Différences

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

Lien vers cette vue comparative

ujusum:3-codage:1-repository:4-code [2026/06/08 01:22] – créée adminujusum:3-codage:1-repository:4-code [2026/06/08 01:30] (Version actuelle) admin
Ligne 1172: Ligne 1172:
 ---- ----
  
-====== Étape suivante ======+====== Phase 4-C — DTO & Contrats TypeScript ======
  
-===== Phase 4-C — DTO & Contrats TypeScript =====+===== Objectif =====
  
-Objectif :+Transformer le modèle Prisma consolidé en contrats applicatifs utilisables par :
  
-Générer l'ensemble des contrats applicatifs :+<code> 
 +NestJS 
 + 
 +Swagger 
 + 
 +OpenAPI 
 + 
 +Zod 
 + 
 +NextJS 
 + 
 +React Query 
 + 
 +SDK TypeScript 
 +</code> 
 + 
 +À l'issue de cette phase :
  
 <code> <code>
-DTO NestJS+✓ DTO générés
  
-Types TypeScript+✓ Types TypeScript générés 
 + 
 +✓ Validation Zod générée 
 + 
 +✓ Contrats API stabilisés 
 + 
 +✓ Base de génération Swagger 
 +</code> 
 + 
 +---- 
 + 
 +====== Architecture cible ====== 
 + 
 +===== Structure ===== 
 + 
 +<code> 
 +libs/ 
 + 
 +└── contracts/ 
 + 
 +    ├── dto/ 
 + 
 +    ├── schemas/ 
 + 
 +    ├── enums/ 
 + 
 +    ├── types/ 
 + 
 +    └── index.ts 
 +</code> 
 + 
 +---- 
 + 
 +===== Objectif ===== 
 + 
 +Séparer : 
 + 
 +<code> 
 +Base de données 
 + 
 +↓ 
 + 
 +Prisma Models 
 + 
 +---------------- 
 + 
 +API 
 + 
 +↓ 
 + 
 +DTO 
 + 
 +---------------- 
 + 
 +Frontend 
 + 
 +↓ 
 + 
 +Types 
 +</code> 
 + 
 +---- 
 + 
 +====== Étape 4-C.1 — Création de la librairie Contracts ====== 
 + 
 +===== Nx ===== 
 + 
 +<code bash> 
 +nx g @nx/js:library contracts 
 +</code> 
 + 
 +---- 
 + 
 +===== Résultat ===== 
 + 
 +<code> 
 +libs/contracts 
 +</code> 
 + 
 +---- 
 + 
 +====== Étape 4-C.2 — Installation des dépendances ====== 
 + 
 +===== DTO ===== 
 + 
 +<code bash> 
 +npm install class-validator 
 + 
 +npm install class-transformer 
 + 
 +npm install @nestjs/swagger 
 +</code> 
 + 
 +---- 
 + 
 +===== Validation Runtime ===== 
 + 
 +<code bash> 
 +npm install zod 
 +</code> 
 + 
 +---- 
 + 
 +===== Génération Zod ===== 
 + 
 +<code bash> 
 +npm install prisma-zod-generator 
 +</code> 
 + 
 +---- 
 + 
 +====== Étape 4-C.3 — Organisation des contrats ====== 
 + 
 +===== Arborescence ===== 
 + 
 +<code> 
 +libs/contracts 
 + 
 +├── dto 
 + 
 +│   ├── auth 
 + 
 +│   ├── users 
 + 
 +│   ├── properties 
 + 
 +│   ├── reservations 
 + 
 +│   ├── crm 
 + 
 +│   ├── finance 
 + 
 +│   └── security 
 + 
 +│ 
 +├── schemas 
 +│ 
 +├── enums 
 +│ 
 +└── types 
 +</code> 
 + 
 +---- 
 + 
 +====== Étape 4-C.4 — DTO Auth ====== 
 + 
 +===== CreateUserDto ===== 
 + 
 +<code ts> 
 +export class CreateUserDto { 
 + 
 +  @IsEmail() 
 +  email: string; 
 + 
 +  @IsString() 
 +  firstName: string; 
 + 
 +  @IsString() 
 +  lastName: string; 
 + 
 +  @MinLength(8) 
 +  password: string; 
 +
 +</code> 
 + 
 +---- 
 + 
 +===== LoginDto ===== 
 + 
 +<code ts> 
 +export class LoginDto { 
 + 
 +  @IsEmail() 
 +  email: string; 
 + 
 +  @IsString() 
 +  password: string; 
 +
 +</code> 
 + 
 +---- 
 + 
 +===== RefreshTokenDto ===== 
 + 
 +<code ts> 
 +export class RefreshTokenDto { 
 + 
 +  @IsString() 
 +  refreshToken: string; 
 +
 +</code> 
 + 
 +---- 
 + 
 +====== Étape 4-C.5 — DTO Users ====== 
 + 
 +===== UpdateUserDto ===== 
 + 
 +<code ts> 
 +export class UpdateUserDto { 
 + 
 +  @IsOptional() 
 +  firstName?: string; 
 + 
 +  @IsOptional() 
 +  lastName?: string; 
 + 
 +  @IsOptional() 
 +  phone?: string; 
 +
 +</code> 
 + 
 +---- 
 + 
 +===== UserResponseDto ===== 
 + 
 +<code ts> 
 +export class UserResponseDto { 
 + 
 +  id: string; 
 + 
 +  email: string; 
 + 
 +  firstName: string; 
 + 
 +  lastName: string; 
 + 
 +  status: UserStatus; 
 +
 +</code> 
 + 
 +---- 
 + 
 +====== Étape 4-C.6 — DTO Properties ====== 
 + 
 +===== CreatePropertyDto ===== 
 + 
 +<code ts> 
 +export class CreatePropertyDto { 
 + 
 +  title: string; 
 + 
 +  description?: string; 
 + 
 +  propertyType: string; 
 + 
 +  maxGuests: number; 
 + 
 +  bedrooms: number; 
 + 
 +  bathrooms: number; 
 +
 +</code> 
 + 
 +---- 
 + 
 +===== UpdatePropertyDto ===== 
 + 
 +<code ts> 
 +export class UpdatePropertyDto { 
 + 
 +  title?: string; 
 + 
 +  description?: string; 
 + 
 +  published?: boolean; 
 +
 +</code> 
 + 
 +---- 
 + 
 +===== PropertyResponseDto ===== 
 + 
 +<code ts> 
 +export class PropertyResponseDto { 
 + 
 +  id: string; 
 + 
 +  reference: string; 
 + 
 +  slug: string; 
 + 
 +  title: string; 
 + 
 +  published: boolean; 
 +
 +</code> 
 + 
 +---- 
 + 
 +====== Étape 4-C.7 — DTO Reservations ====== 
 + 
 +===== CreateReservationDto ===== 
 + 
 +<code ts> 
 +export class CreateReservationDto { 
 + 
 +  propertyId: string; 
 + 
 +  customerId: string; 
 + 
 +  checkInDate: Date; 
 + 
 +  checkOutDate: Date; 
 + 
 +  adults: number; 
 + 
 +  children?: number; 
 +
 +</code> 
 + 
 +---- 
 + 
 +===== ReservationResponseDto ===== 
 + 
 +<code ts> 
 +export class ReservationResponseDto { 
 + 
 +  id: string; 
 + 
 +  reservationNumber: string; 
 + 
 +  status: ReservationStatus; 
 + 
 +  totalAmount: number; 
 +
 +</code> 
 + 
 +---- 
 + 
 +====== Étape 4-C.8 — DTO CRM ====== 
 + 
 +===== CreateLeadDto ===== 
 + 
 +<code ts> 
 +export class CreateLeadDto { 
 + 
 +  firstName: string; 
 + 
 +  lastName: string; 
 + 
 +  email: string; 
 + 
 +  source?: string; 
 +
 +</code> 
 + 
 +---- 
 + 
 +===== CreateTaskDto ===== 
 + 
 +<code ts> 
 +export class CreateTaskDto { 
 + 
 +  title: string; 
 + 
 +  description?: string; 
 + 
 +  assignedUserId?: string; 
 + 
 +  dueDate?: Date; 
 +
 +</code> 
 + 
 +---- 
 + 
 +====== Étape 4-C.9 — DTO Finance ====== 
 + 
 +===== CreateInvoiceDto ===== 
 + 
 +<code ts> 
 +export class CreateInvoiceDto { 
 + 
 +  reservationId: string; 
 + 
 +  issueDate: Date; 
 +
 +</code> 
 + 
 +---- 
 + 
 +===== PaymentDto ===== 
 + 
 +<code ts> 
 +export class PaymentDto { 
 + 
 +  reservationId: string; 
 + 
 +  amount: number; 
 + 
 +  currencyCode: string; 
 +
 +</code> 
 + 
 +---- 
 + 
 +====== Étape 4-C.10 — DTO Security ====== 
 + 
 +===== EnableMfaDto ===== 
 + 
 +<code ts> 
 +export class EnableMfaDto { 
 + 
 +  method: string; 
 +
 +</code> 
 + 
 +---- 
 + 
 +===== ConsentDto ===== 
 + 
 +<code ts> 
 +export class ConsentDto { 
 + 
 +  consentType: string; 
 + 
 +  granted: boolean; 
 +
 +</code> 
 + 
 +---- 
 + 
 +====== Étape 4-C.11 — Pagination Contracts ====== 
 + 
 +===== PaginationRequest ===== 
 + 
 +<code ts> 
 +export class PaginationRequest { 
 + 
 +  page?: number; 
 + 
 +  pageSize?: number; 
 + 
 +  sort?: string; 
 + 
 +  search?: string; 
 +
 +</code> 
 + 
 +---- 
 + 
 +===== PaginationResponse ===== 
 + 
 +<code ts> 
 +export class PaginationResponse<T>
 + 
 +  data: T[]; 
 + 
 +  total: number; 
 + 
 +  page: number; 
 + 
 +  pageSize: number; 
 + 
 +  totalPages: number; 
 +
 +</code> 
 + 
 +---- 
 + 
 +====== Étape 4-C.12 — API Response Contracts ====== 
 + 
 +===== Success ===== 
 + 
 +<code ts> 
 +export interface ApiResponse<T>
 + 
 +  success: true; 
 + 
 +  data: T; 
 +
 +</code> 
 + 
 +---- 
 + 
 +===== Error ===== 
 + 
 +<code ts> 
 +export interface ApiError { 
 + 
 +  success: false; 
 + 
 +  code: string; 
 + 
 +  message: string; 
 +
 +</code> 
 + 
 +---- 
 + 
 +====== Étape 4-C.13 — Génération Zod ====== 
 + 
 +===== Generator Prisma ===== 
 + 
 +Dans : 
 + 
 +<code> 
 +schema.prisma 
 +</code> 
 + 
 +ajouter : 
 + 
 +<code prisma> 
 +generator zod { 
 + 
 +  provider = "prisma-zod-generator" 
 +
 +</code> 
 + 
 +---- 
 + 
 +===== Génération ===== 
 + 
 +<code bash> 
 +npx prisma generate 
 +</code> 
 + 
 +---- 
 + 
 +===== Résultat ===== 
 + 
 +<code> 
 +libs/contracts/schemas 
 +</code> 
 + 
 +contenant : 
 + 
 +<code> 
 +UserSchema 
 + 
 +PropertySchema 
 + 
 +ReservationSchema 
 + 
 +LeadSchema 
 + 
 +InvoiceSchema 
 + 
 +PaymentSchema 
 +</code> 
 + 
 +---- 
 + 
 +====== Étape 4-C.14 — Barrel Exports ====== 
 + 
 +===== enums/index.ts ===== 
 + 
 +<code ts> 
 +export * from './user-status.enum'; 
 + 
 +export * from './reservation-status.enum'; 
 + 
 +export * from './payment-status.enum'; 
 +</code> 
 + 
 +---- 
 + 
 +===== dto/index.ts ===== 
 + 
 +<code ts> 
 +export * from './auth'; 
 + 
 +export * from './users'; 
 + 
 +export * from './properties'; 
 + 
 +export * from './reservations'; 
 +</code> 
 + 
 +---- 
 + 
 +===== index.ts ===== 
 + 
 +<code ts> 
 +export * from './dto'; 
 + 
 +export * from './schemas'; 
 + 
 +export * from './enums'; 
 + 
 +export * from './types'; 
 +</code> 
 + 
 +---- 
 + 
 +====== Contrôles qualité ====== 
 + 
 +===== Compilation ===== 
 + 
 +<code bash> 
 +nx build contracts 
 +</code> 
 + 
 +---- 
 + 
 +===== Type Check ===== 
 + 
 +<code bash> 
 +npx tsc --noEmit 
 +</code> 
 + 
 +---- 
 + 
 +===== Lint ===== 
 + 
 +<code bash> 
 +nx lint contracts 
 +</code> 
 + 
 +---- 
 + 
 +====== Livrables ====== 
 + 
 +<code> 
 +libs/contracts/dto 
 + 
 +libs/contracts/types 
 + 
 +libs/contracts/enums 
 + 
 +libs/contracts/schemas 
 + 
 +libs/contracts/index.ts 
 +</code> 
 + 
 +---- 
 + 
 +====== Définition de terminé ====== 
 + 
 +La Phase 4-C est terminée lorsque : 
 + 
 +<code> 
 +✓ DTO créés 
 + 
 +✓ Types TypeScript créés 
 + 
 +✓ Zod généré 
 + 
 +✓ Contrats partagés Backend/Frontend 
 + 
 +✓ Validation unifiée 
 + 
 +✓ Build vert 
 +</code> 
 + 
 +---- 
 + 
 +====== Phase 4-D — Structure NestJS Enterprise ====== 
 + 
 +===== Objectif ===== 
 + 
 +Construire l'architecture complète du backend NestJS à partir : 
 + 
 +<code> 
 +Prisma Schema consolidé 
 + 
 +OpenAPI Enterprise 4.0 
 + 
 +Contrats DTO 
 + 
 +DDD 
 + 
 +CQRS 
 + 
 +Hexagonal Architecture 
 +</code> 
 + 
 +À l'issue de cette phase : 
 + 
 +<code> 
 +✓ Backend structuré 
 + 
 +✓ Modules générés 
 + 
 +✓ CQRS en place 
 + 
 +✓ Event Bus en place 
 + 
 +✓ Repository Pattern 
 + 
 +✓ Domain Services 
 + 
 +✓ Guards 
 + 
 +✓ Interceptors 
 + 
 +✓ Filters 
 + 
 +✓ Multi-Tenant 
 +</code> 
 + 
 +---- 
 + 
 +====== Architecture cible ====== 
 + 
 +===== Structure globale ===== 
 + 
 +<code> 
 +apps/api/src 
 + 
 +├── core 
 + 
 +├── infrastructure 
 + 
 +├── shared 
 + 
 +├── modules 
 + 
 +└── bootstrap 
 +</code> 
 + 
 +---- 
 + 
 +====== Étape 4-D.1 — Core Layer ====== 
 + 
 +===== Objectif ===== 
 + 
 +Contenir les composants techniques communs. 
 + 
 +---- 
 + 
 +===== Arborescence ===== 
 + 
 +<code> 
 +src/core 
 + 
 +├── database 
 + 
 +├── cqrs 
 + 
 +├── events 
 + 
 +├── guards 
 + 
 +├── interceptors 
 + 
 +├── filters 
 + 
 +├── decorators 
 + 
 +├── exceptions 
 + 
 +├── logging 
 + 
 +└── tenancy 
 +</code> 
 + 
 +---- 
 + 
 +====== Database ====== 
 + 
 +===== Prisma Service ===== 
 + 
 +<code> 
 +src/core/database/prisma.service.ts 
 +</code> 
 + 
 +---- 
 + 
 +===== Prisma Module ===== 
 + 
 +<code> 
 +src/core/database/prisma.module.ts 
 +</code> 
 + 
 +---- 
 + 
 +====== CQRS ====== 
 + 
 +===== Installation ===== 
 + 
 +<code bash> 
 +npm install @nestjs/cqrs 
 +</code> 
 + 
 +---- 
 + 
 +===== Module ===== 
 + 
 +<code> 
 +src/core/cqrs/cqrs.module.ts 
 +</code> 
 + 
 +---- 
 + 
 +===== Composants ===== 
 + 
 +<code> 
 +Commands 
 + 
 +Queries 
 + 
 +Handlers 
 + 
 +Events 
 + 
 +Sagas 
 +</code> 
 + 
 +---- 
 + 
 +====== Event Bus ====== 
 + 
 +===== Événements globaux ===== 
 + 
 +<code> 
 +UserCreated 
 + 
 +ReservationCreated 
 + 
 +ContractSigned 
 + 
 +PaymentReceived 
 + 
 +InvoiceGenerated 
 + 
 +LeadConverted 
 + 
 +MfaEnabled 
 +</code> 
 + 
 +---- 
 + 
 +===== Répertoire ===== 
 + 
 +<code> 
 +src/core/events 
 +</code> 
 + 
 +---- 
 + 
 +====== Étape 4-D.2 — Shared Layer ====== 
 + 
 +===== Objectif ===== 
 + 
 +Mutualiser les objets transverses. 
 + 
 +---- 
 + 
 +===== Structure ===== 
 + 
 +<code> 
 +src/shared 
 + 
 +├── dto 
 + 
 +├── enums 
 + 
 +├── constants 
 + 
 +├── types 
 + 
 +├── interfaces 
 + 
 +└── utils 
 +</code> 
 + 
 +---- 
 + 
 +====== Étape 4-D.3 — Infrastructure Layer ====== 
 + 
 +===== Objectif ===== 
 + 
 +Contenir les adaptateurs techniques. 
 + 
 +---- 
 + 
 +===== Structure ===== 
 + 
 +====== Phase 4-D — Structure NestJS Enterprise ====== 
 + 
 +===== Objectif ===== 
 + 
 +Construire l'architecture complète du backend NestJS à partir : 
 + 
 +<code> 
 +Prisma Schema consolidé 
 + 
 +OpenAPI Enterprise 4.0 
 + 
 +Contrats DTO 
 + 
 +DDD 
 + 
 +CQRS 
 + 
 +Hexagonal Architecture 
 +</code> 
 + 
 +À l'issue de cette phase : 
 + 
 +<code> 
 +✓ Backend structuré 
 + 
 +✓ Modules générés 
 + 
 +✓ CQRS en place 
 + 
 +✓ Event Bus en place 
 + 
 +✓ Repository Pattern 
 + 
 +✓ Domain Services 
 + 
 +✓ Guards 
 + 
 +✓ Interceptors 
 + 
 +✓ Filters 
 + 
 +✓ Multi-Tenant 
 +</code> 
 + 
 +---- 
 + 
 +====== Architecture cible ====== 
 + 
 +===== Structure globale ===== 
 + 
 +<code> 
 +apps/api/src 
 + 
 +├── core 
 + 
 +├── infrastructure 
 + 
 +├── shared 
 + 
 +├── modules 
 + 
 +└── bootstrap 
 +</code> 
 + 
 +---- 
 + 
 +====== Étape 4-D.1 — Core Layer ====== 
 + 
 +===== Objectif ===== 
 + 
 +Contenir les composants techniques communs. 
 + 
 +---- 
 + 
 +===== Arborescence ===== 
 + 
 +<code> 
 +src/core 
 + 
 +├── database 
 + 
 +├── cqrs 
 + 
 +├── events 
 + 
 +├── guards 
 + 
 +├── interceptors 
 + 
 +├── filters 
 + 
 +├── decorators 
 + 
 +├── exceptions 
 + 
 +├── logging 
 + 
 +└── tenancy 
 +</code> 
 + 
 +---- 
 + 
 +====== Database ====== 
 + 
 +===== Prisma Service ===== 
 + 
 +<code> 
 +src/core/database/prisma.service.ts 
 +</code> 
 + 
 +---- 
 + 
 +===== Prisma Module ===== 
 + 
 +<code> 
 +src/core/database/prisma.module.ts 
 +</code> 
 + 
 +---- 
 + 
 +====== CQRS ====== 
 + 
 +===== Installation ===== 
 + 
 +<code bash> 
 +npm install @nestjs/cqrs 
 +</code> 
 + 
 +---- 
 + 
 +===== Module ===== 
 + 
 +<code> 
 +src/core/cqrs/cqrs.module.ts 
 +</code> 
 + 
 +---- 
 + 
 +===== Composants ===== 
 + 
 +<code> 
 +Commands 
 + 
 +Queries 
 + 
 +Handlers 
 + 
 +Events 
 + 
 +Sagas 
 +</code> 
 + 
 +---- 
 + 
 +====== Event Bus ====== 
 + 
 +===== Événements globaux ===== 
 + 
 +<code> 
 +UserCreated 
 + 
 +ReservationCreated 
 + 
 +ContractSigned 
 + 
 +PaymentReceived 
 + 
 +InvoiceGenerated 
 + 
 +LeadConverted 
 + 
 +MfaEnabled 
 +</code> 
 + 
 +---- 
 + 
 +===== Répertoire ===== 
 + 
 +<code> 
 +src/core/events 
 +</code> 
 + 
 +---- 
 + 
 +====== Étape 4-D.2 — Shared Layer ====== 
 + 
 +===== Objectif ===== 
 + 
 +Mutualiser les objets transverses. 
 + 
 +---- 
 + 
 +===== Structure ===== 
 + 
 +<code> 
 +src/shared 
 + 
 +├── dto 
 + 
 +├── enums 
 + 
 +├── constants 
 + 
 +├── types 
 + 
 +├── interfaces 
 + 
 +└── utils 
 +</code> 
 + 
 +---- 
 + 
 +====== Phase 4-D.3 — Infrastructure Layer (suite) ====== 
 + 
 +===== Structure ===== 
 + 
 +<code> 
 +src/infrastructure 
 + 
 +├── prisma 
 + 
 +├── cache 
 + 
 +├── queue 
 + 
 +├── mail 
 + 
 +├── sms 
 + 
 +├── storage 
 + 
 +├── payments 
 + 
 +├── signatures 
 + 
 +├── ota 
 + 
 +├── ai 
 + 
 +└── search 
 +</code> 
 + 
 +---- 
 + 
 +====== Cache ====== 
 + 
 +===== Redis ===== 
 + 
 +<code> 
 +src/infrastructure/cache 
 +</code> 
 + 
 +---- 
 + 
 +===== Installation ===== 
 + 
 +<code bash> 
 +npm install @nestjs/cache-manager 
 + 
 +npm install cache-manager 
 + 
 +npm install cache-manager-redis-store 
 + 
 +npm install redis 
 +</code> 
 + 
 +---- 
 + 
 +===== Services ===== 
 + 
 +<code> 
 +CacheService 
 + 
 +CacheKeys 
 + 
 +CacheInvalidationService 
 +</code> 
 + 
 +---- 
 + 
 +====== Queue ====== 
 + 
 +===== BullMQ ===== 
 + 
 +<code bash> 
 +npm install @nestjs/bullmq 
 + 
 +npm install bullmq 
 +</code> 
 + 
 +---- 
 + 
 +===== Files ===== 
 + 
 +<code> 
 +queue.module.ts 
 + 
 +jobs/ 
 + 
 +processors/ 
 + 
 +workers/ 
 +</code> 
 + 
 +---- 
 + 
 +===== Jobs ===== 
 + 
 +<code> 
 +SendEmailJob 
 + 
 +SendSmsJob 
 + 
 +GenerateInvoiceJob 
 + 
 +SyncOtaJob 
 + 
 +GenerateContractJob 
 + 
 +AiIndexationJob 
 +</code> 
 + 
 +---- 
 + 
 +====== Mail ====== 
 + 
 +===== Provider ===== 
 + 
 +<code> 
 +SendGrid 
 + 
 +Mailgun 
 + 
 +SMTP 
 + 
 +Amazon SES 
 +</code> 
 + 
 +---- 
 + 
 +===== Interface ===== 
 + 
 +<code ts> 
 +export interface EmailProvider { 
 + 
 +  send( 
 +    payload: SendEmailPayload 
 +  ): Promise<void>; 
 +
 +</code> 
 + 
 +---- 
 + 
 +====== SMS ====== 
 + 
 +===== Provider ===== 
 + 
 +<code> 
 +Twilio 
 + 
 +MessageBird 
 + 
 +OVH SMS 
 +</code> 
 + 
 +---- 
 + 
 +===== Interface ===== 
 + 
 +<code ts> 
 +export interface SmsProvider { 
 + 
 +  send( 
 +    payload: SendSmsPayload 
 +  ): Promise<void>; 
 +
 +</code> 
 + 
 +---- 
 + 
 +====== Storage ====== 
 + 
 +===== Providers ===== 
 + 
 +<code> 
 +S3 
 + 
 +MinIO 
 + 
 +Azure Blob 
 +</code> 
 + 
 +---- 
 + 
 +===== Services ===== 
 + 
 +<code> 
 +StorageService 
 + 
 +FileUploadService 
 + 
 +ImageOptimizationService 
 +</code> 
 + 
 +---- 
 + 
 +====== Payments ====== 
 + 
 +===== Providers ===== 
 + 
 +<code> 
 +Stripe 
 + 
 +PayPal 
 +</code> 
 + 
 +---- 
 + 
 +===== Adapters ===== 
 + 
 +<code> 
 +StripeAdapter 
 + 
 +PaypalAdapter 
 +</code> 
 + 
 +---- 
 + 
 +====== Signature ====== 
 + 
 +===== Providers ===== 
 + 
 +<code> 
 +DocuSign 
 + 
 +Yousign 
 + 
 +Universign 
 +</code> 
 + 
 +---- 
 + 
 +===== Adapters ===== 
 + 
 +<code> 
 +DocusignAdapter 
 + 
 +YousignAdapter 
 +</code> 
 + 
 +---- 
 + 
 +====== OTA ====== 
 + 
 +===== Connecteurs ===== 
 + 
 +<code> 
 +BookingAdapter 
 + 
 +AirbnbAdapter 
 + 
 +VrboAdapter 
 + 
 +ExpediaAdapter 
 +</code> 
 + 
 +---- 
 + 
 +====== IA ====== 
 + 
 +===== Providers ===== 
 + 
 +<code> 
 +OpenAI 
 + 
 +Azure OpenAI 
 + 
 +Anthropic 
 +</code> 
 + 
 +---- 
 + 
 +===== Services ===== 
 + 
 +<code> 
 +AiAssistantService 
 + 
 +EmbeddingService 
 + 
 +RecommendationService 
 + 
 +KnowledgeSearchService 
 +</code> 
 + 
 +---- 
 + 
 +====== Étape 4-D.4 — Domain Modules ====== 
 + 
 +===== Structure standard ===== 
 + 
 +Chaque domaine métier adopte exactement la même structure. 
 + 
 +---- 
 + 
 +===== Exemple ===== 
 + 
 +<code> 
 +src/modules/properties 
 + 
 +├── application 
 + 
 +├── domain 
 + 
 +├── infrastructure 
 + 
 +├── presentation 
 + 
 +└── properties.module.ts 
 +</code> 
 + 
 +---- 
 + 
 +====== Application Layer ====== 
 + 
 +===== Structure ===== 
 + 
 +<code> 
 +application 
 + 
 +├── commands 
 + 
 +├── queries 
 + 
 +├── handlers 
 + 
 +├── dto 
 + 
 +└── mappers 
 +</code> 
 + 
 +---- 
 + 
 +===== Exemple ===== 
 + 
 +<code> 
 +commands/ 
 + 
 +CreatePropertyCommand 
 + 
 +UpdatePropertyCommand 
 + 
 +PublishPropertyCommand 
 +</code> 
 + 
 +---- 
 + 
 +===== Queries ===== 
 + 
 +<code> 
 +GetPropertyQuery 
 + 
 +SearchPropertiesQuery 
 + 
 +GetAvailabilityQuery 
 +</code> 
 + 
 +---- 
 + 
 +====== Domain Layer ====== 
 + 
 +===== Structure ===== 
 + 
 +<code> 
 +domain 
 + 
 +├── entities 
 + 
 +├── repositories 
 + 
 +├── services 
 + 
 +├── value-objects 
 + 
 +└── events 
 +</code> 
 + 
 +---- 
 + 
 +===== Entités ===== 
 + 
 +<code> 
 +Property 
 + 
 +Reservation 
 + 
 +Owner 
 + 
 +Invoice 
 + 
 +Lead 
 +</code> 
 + 
 +---- 
 + 
 +===== Repositories ===== 
 + 
 +<code ts> 
 +export interface PropertyRepository { 
 + 
 +  findById(id: string); 
 + 
 +  save(property: Property); 
 + 
 +  delete(id: string); 
 +
 +</code> 
 + 
 +---- 
 + 
 +===== Domain Services ===== 
 + 
 +<code> 
 +PricingService 
 + 
 +ReservationService 
 + 
 +ContractService 
 + 
 +RevenueManagementService 
 +</code> 
 + 
 +---- 
 + 
 +====== Infrastructure Layer Domaine ====== 
 + 
 +===== Implémentations ===== 
 + 
 +<code> 
 +PrismaPropertyRepository 
 + 
 +PrismaReservationRepository 
 + 
 +PrismaLeadRepository 
 +</code> 
 + 
 +---- 
 + 
 +===== Exemple ===== 
 + 
 +<code> 
 +infrastructure/prisma 
 + 
 +└── prisma-property.repository.ts 
 +</code> 
 + 
 +---- 
 + 
 +====== Presentation Layer ====== 
 + 
 +===== Structure ===== 
 + 
 +<code> 
 +presentation 
 + 
 +├── controllers 
 + 
 +├── presenters 
 + 
 +└── swagger 
 +</code> 
 + 
 +---- 
 + 
 +===== Exemple ===== 
 + 
 +<code> 
 +properties.controller.ts 
 + 
 +availability.controller.ts 
 + 
 +rates.controller.ts 
 +</code> 
 + 
 +---- 
 + 
 +====== Étape 4-D.5 — Modules Métier ====== 
 + 
 +===== Modules à générer ===== 
 + 
 +<code> 
 +AuthModule 
 + 
 +UsersModule 
 + 
 +OwnersModule 
 + 
 +PropertiesModule 
 + 
 +ReservationsModule 
 + 
 +ContractsModule 
 + 
 +PaymentsModule 
 + 
 +InvoicesModule 
 + 
 +CRMModule 
 + 
 +MessagingModule 
 + 
 +MarketingModule 
 + 
 +AutomationModule 
 + 
 +AiModule 
 + 
 +GovernanceModule 
 + 
 +OtaModule 
 + 
 +RevenueModule 
 + 
 +SecurityModule 
 + 
 +InternationalizationModule 
 +</code> 
 + 
 +---- 
 + 
 +====== Étape 4-D.6 — Multi-Tenant ====== 
 + 
 +===== Tenant Context ===== 
 + 
 +<code> 
 +src/core/tenancy 
 +</code> 
 + 
 +---- 
 + 
 +===== Service ===== 
 + 
 +<code> 
 +TenantContextService 
 +</code> 
 + 
 +---- 
 + 
 +===== Header ===== 
 + 
 +<code http> 
 +X-Tenant-Id 
 +</code> 
 + 
 +---- 
 + 
 +===== Guard ===== 
 + 
 +<code> 
 +TenantGuard 
 +</code> 
 + 
 +---- 
 + 
 +===== Middleware ===== 
 + 
 +<code> 
 +TenantMiddleware 
 +</code> 
 + 
 +---- 
 + 
 +===== Objectif ===== 
 + 
 +Injecter automatiquement : 
 + 
 +<code> 
 +tenantId 
 +</code> 
 + 
 +dans tous les accès Prisma. 
 + 
 +---- 
 + 
 +====== Étape 4-D.7 — Security ====== 
 + 
 +===== Guards ===== 
 + 
 +<code> 
 +JwtAuthGuard 
 + 
 +RolesGuard 
 + 
 +PermissionsGuard 
 + 
 +TenantGuard 
 + 
 +MfaGuard 
 +</code> 
 + 
 +---- 
 + 
 +===== Decorators ===== 
 + 
 +<code ts> 
 +@CurrentUser() 
 + 
 +@Roles() 
 + 
 +@Permissions() 
 + 
 +@Tenant() 
 +</code> 
 + 
 +---- 
 + 
 +====== Étape 4-D.8 — Interceptors ====== 
 + 
 +===== Interceptors globaux ===== 
 + 
 +<code> 
 +LoggingInterceptor 
 + 
 +AuditInterceptor 
 + 
 +CacheInterceptor 
 + 
 +TenantInterceptor 
 + 
 +ResponseTransformInterceptor 
 +</code> 
 + 
 +---- 
 + 
 +====== Étape 4-D.9 — Exception Filters ====== 
 + 
 +===== Filtres ===== 
 + 
 +<code> 
 +GlobalExceptionFilter 
 + 
 +PrismaExceptionFilter 
 + 
 +ValidationExceptionFilter 
 + 
 +DomainExceptionFilter 
 +</code> 
 + 
 +---- 
 + 
 +===== Exemple ===== 
 + 
 +<code json> 
 +
 +  "success": false, 
 +  "code": "PROPERTY_NOT_FOUND", 
 +  "message": "Property not found" 
 +
 +</code> 
 + 
 +---- 
 + 
 +====== Étape 4-D.10 — Bootstrap ====== 
 + 
 +===== Structure ===== 
 + 
 +<code> 
 +src/bootstrap 
 + 
 +├── swagger.ts 
 + 
 +├── validation.ts 
 + 
 +├── security.ts 
 + 
 +└── app.ts 
 +</code> 
 + 
 +---- 
 + 
 +===== main.ts ===== 
 + 
 +<code ts> 
 +async function bootstrap() { 
 + 
 +  const app = 
 +    await NestFactory.create(AppModule); 
 + 
 +  setupSwagger(app); 
 + 
 +  setupValidation(app); 
 + 
 +  setupSecurity(app); 
 + 
 +  await app.listen(3000); 
 +
 +</code> 
 + 
 +---- 
 + 
 +====== Étape 4-D.11 — AppModule ====== 
 + 
 +===== Agrégation ===== 
 + 
 +<code> 
 +AppModule 
 + 
 +├── CoreModule 
 + 
 +├── InfrastructureModule 
 + 
 +├── AuthModule 
 + 
 +├── UsersModule 
 + 
 +├── OwnersModule 
 + 
 +├── PropertiesModule 
 + 
 +├── ReservationsModule 
 + 
 +├── ContractsModule 
 + 
 +├── PaymentsModule 
 + 
 +├── CRMModule 
 + 
 +├── MessagingModule 
 + 
 +├── RevenueModule 
 + 
 +├── SecurityModule 
 +</code> 
 + 
 +---- 
 + 
 +====== Contrôles qualité ====== 
 + 
 +===== Compilation ===== 
 + 
 +<code bash> 
 +nx build api 
 +</code> 
 + 
 +---- 
 + 
 +===== Lint ===== 
 + 
 +<code bash> 
 +nx lint api 
 +</code> 
 + 
 +---- 
 + 
 +===== Tests ===== 
 + 
 +<code bash> 
 +nx test api 
 +</code> 
 + 
 +---- 
 + 
 +====== Livrables ====== 
 + 
 +<code> 
 +src/core 
 + 
 +src/shared 
 + 
 +src/infrastructure 
 + 
 +src/modules 
 + 
 +src/bootstrap 
 + 
 +app.module.ts 
 + 
 +main.ts 
 +</code> 
 + 
 +---- 
 + 
 +====== Définition de terminé ====== 
 + 
 +La Phase 4-D est terminée lorsque : 
 + 
 +<code> 
 +✓ Architecture Hexagonale en place 
 + 
 +✓ CQRS installé 
 + 
 +✓ Event Bus installé 
 + 
 +✓ Modules générés 
 + 
 +✓ Multi-Tenant opérationnel 
 + 
 +✓ Guards opérationnels 
 + 
 +✓ Interceptors opérationnels 
 + 
 +✓ Filters opérationnels 
 + 
 +✓ Build vert 
 +</code> 
 + 
 +---- 
 + 
 +====== Phase 4-E — Structure NextJS Enterprise ====== 
 + 
 +===== Objectif ===== 
 + 
 +Construire l'architecture Frontend complète de la plateforme. 
 + 
 +Cette phase transforme : 
 + 
 +<code> 
 +OpenAPI Enterprise 
 + 
 +DTO TypeScript 
 + 
 +SDK TypeScript 
 + 
 +Contrats API 
 +</code> 
 + 
 +en une application : 
 + 
 +<code> 
 +NextJS 15 
 + 
 +React 19 
 + 
 +TypeScript 
 + 
 +TanStack Query 
 + 
 +TailwindCSS 
 + 
 +shadcn/ui 
 + 
 +Multi-Tenant 
 + 
 +RBAC 
 + 
 +Internationalisée 
 +</code> 
 + 
 +---- 
 + 
 +====== Résultat attendu ====== 
 + 
 +À l'issue de cette phase : 
 + 
 +<code> 
 +✓ Frontend compilable 
 + 
 +✓ Authentification complète 
 + 
 +✓ Layouts Enterprise 
 + 
 +✓ Design System 
 + 
 +✓ Pages métier 
 + 
 +✓ Gestion permissions 
 + 
 +✓ Multi-tenant 
 + 
 +✓ Multi-langues 
 +</code> 
 + 
 +---- 
 + 
 +====== Étape 4-E.1 — Création de l'application ====== 
 + 
 +===== Génération ===== 
 + 
 +<code bash> 
 +cd apps 
 + 
 +npx create-next-app@latest web 
 +</code> 
 + 
 +---- 
 + 
 +===== Options ===== 
 + 
 +<code> 
 +TypeScript        YES 
 + 
 +ESLint            YES 
 + 
 +TailwindCSS       YES 
 + 
 +App Router        YES 
 + 
 +src/ directory    YES 
 + 
 +Turbopack         YES 
 + 
 +Import Alias      YES 
 +</code> 
 + 
 +---- 
 + 
 +===== Résultat ===== 
 + 
 +<code> 
 +apps/web 
 +</code> 
 + 
 +---- 
 + 
 +====== Étape 4-E.2 — Installation des dépendances ====== 
 + 
 +===== TanStack Query ===== 
 + 
 +<code bash> 
 +npm install @tanstack/react-query 
 + 
 +npm install @tanstack/react-query-devtools 
 +</code> 
 + 
 +---- 
 + 
 +===== Formulaires ===== 
 + 
 +<code bash> 
 +npm install react-hook-form 
 + 
 +npm install zod 
 + 
 +npm install @hookform/resolvers 
 +</code> 
 + 
 +---- 
 + 
 +===== Auth ===== 
 + 
 +<code bash> 
 +npm install jwt-decode 
 +</code> 
 + 
 +---- 
 + 
 +===== UI ===== 
 + 
 +<code bash> 
 +npx shadcn@latest init 
 +</code> 
 + 
 +---- 
 + 
 +===== Composants ===== 
 + 
 +<code bash> 
 +npx shadcn add button 
 + 
 +npx shadcn add input 
 + 
 +npx shadcn add dialog 
 + 
 +npx shadcn add table 
 + 
 +npx shadcn add dropdown-menu 
 + 
 +npx shadcn add form 
 + 
 +npx shadcn add card 
 + 
 +npx shadcn add tabs 
 + 
 +npx shadcn add toast 
 +</code> 
 + 
 +---- 
 + 
 +====== Étape 4-E.3 — Structure globale ====== 
 + 
 +===== Architecture ===== 
 + 
 +<code> 
 +apps/web/src 
 + 
 +├── app 
 + 
 +├── modules 
 + 
 +├── components 
 + 
 +├── layouts 
 + 
 +├── hooks 
 + 
 +├── services 
 + 
 +├── providers 
 + 
 +├── stores 
 + 
 +├── lib 
 + 
 +├── types 
 + 
 +└── config 
 +</code> 
 + 
 +---- 
 + 
 +====== Étape 4-E.4 — Providers ====== 
 + 
 +===== Structure ===== 
 + 
 +<code> 
 +providers 
 + 
 +├── query-provider.tsx 
 + 
 +├── auth-provider.tsx 
 + 
 +├── tenant-provider.tsx 
 + 
 +├── theme-provider.tsx 
 + 
 +└── i18n-provider.tsx 
 +</code> 
 + 
 +---- 
 + 
 +===== Query Provider ===== 
 + 
 +<code tsx> 
 +<QueryClientProvider> 
 + 
 +  {children} 
 + 
 +</QueryClientProvider> 
 +</code> 
 + 
 +---- 
 + 
 +====== Étape 4-E.5 — SDK API ====== 
 + 
 +===== Structure ===== 
 + 
 +<code> 
 +services/api 
 + 
 +├── auth 
 + 
 +├── users 
 + 
 +├── properties 
 + 
 +├── reservations 
 + 
 +├── crm 
 + 
 +├── finance 
 + 
 +├── ota 
 + 
 +├── ai 
 + 
 +└── security 
 +</code> 
 + 
 +---- 
 + 
 +===== Exemple ===== 
 + 
 +<code ts> 
 +export const getProperty = ( 
 + 
 +  id: string 
 + 
 +) => sdk.properties.getProperty(id); 
 +</code> 
 + 
 +---- 
 + 
 +====== Étape 4-E.6 — Gestion Auth ====== 
 + 
 +===== Structure ===== 
 + 
 +<code> 
 +modules/auth 
 + 
 +├── hooks 
 + 
 +├── services 
 + 
 +├── components 
 + 
 +└── pages 
 +</code> 
 + 
 +---- 
 + 
 +===== Pages ===== 
 + 
 +<code> 
 +/login 
 + 
 +/register 
 + 
 +/forgot-password 
 + 
 +/reset-password 
 + 
 +/mfa 
 +</code> 
 + 
 +---- 
 + 
 +===== Hook ===== 
 + 
 +<code ts> 
 +useCurrentUser() 
 + 
 +useLogin() 
 + 
 +useLogout() 
 + 
 +usePermissions() 
 +</code> 
 + 
 +---- 
 + 
 +====== Étape 4-E.7 — Layouts ====== 
 + 
 +===== Public ===== 
 + 
 +<code> 
 +layouts/public-layout.tsx 
 +</code> 
 + 
 +---- 
 + 
 +===== Auth ===== 
 + 
 +<code> 
 +layouts/auth-layout.tsx 
 +</code> 
 + 
 +---- 
 + 
 +===== Dashboard ===== 
 + 
 +<code> 
 +layouts/dashboard-layout.tsx 
 +</code> 
 + 
 +---- 
 + 
 +===== Owner ===== 
 + 
 +<code> 
 +layouts/owner-layout.tsx 
 +</code> 
 + 
 +---- 
 + 
 +===== Admin ===== 
 + 
 +<code> 
 +layouts/admin-layout.tsx 
 +</code> 
 + 
 +---- 
 + 
 +====== Étape 4-E.8 — Navigation ====== 
 + 
 +===== Sidebar ===== 
 + 
 +<code> 
 +Dashboard 
 + 
 +Reservations 
 + 
 +Properties 
 + 
 +Owners 
 + 
 +CRM 
 + 
 +Finance 
 + 
 +Marketing 
 + 
 +Analytics 
 + 
 +Security 
 + 
 +Administration 
 +</code> 
 + 
 +---- 
 + 
 +===== Menu dynamique ===== 
 + 
 +Piloté par : 
 + 
 +<code> 
 +Permissions 
 + 
 +Tenant 
 + 
 +Feature Flags 
 +</code> 
 + 
 +---- 
 + 
 +====== Étape 4-E.9 — Module Properties ====== 
 + 
 +===== Pages ===== 
 + 
 +<code> 
 +/properties 
 + 
 +/properties/create 
 + 
 +/properties/[id] 
 + 
 +/properties/[id]/edit 
 +</code> 
 + 
 +---- 
 + 
 +===== Composants ===== 
 + 
 +<code> 
 +PropertyForm 
 + 
 +PropertyTable 
 + 
 +PropertyCard 
 + 
 +PropertyGallery 
 + 
 +AvailabilityCalendar 
 +</code> 
 + 
 +---- 
 + 
 +====== Étape 4-E.10 — Module Reservations ====== 
 + 
 +===== Pages ===== 
 + 
 +<code> 
 +/reservations 
 + 
 +/reservations/create 
 + 
 +/reservations/[id] 
 +</code> 
 + 
 +---- 
 + 
 +===== Composants ===== 
 + 
 +<code> 
 +ReservationForm 
 + 
 +ReservationDetails 
 + 
 +GuestList 
 + 
 +PricingSummary 
 +</code> 
 + 
 +---- 
 + 
 +====== Étape 4-E.11 — Module CRM ====== 
 + 
 +===== Pages ===== 
 + 
 +<code> 
 +/crm/leads 
 + 
 +/crm/opportunities 
 + 
 +/crm/tasks 
 + 
 +/crm/customers 
 +</code> 
 + 
 +---- 
 + 
 +===== Composants ===== 
 + 
 +<code> 
 +LeadKanban 
 + 
 +OpportunityPipeline 
 + 
 +TaskBoard 
 + 
 +CustomerTimeline 
 +</code> 
 + 
 +---- 
 + 
 +====== Étape 4-E.12 — Module Finance ====== 
 + 
 +===== Pages ===== 
 + 
 +<code> 
 +/finance/payments 
 + 
 +/finance/invoices 
 + 
 +/finance/refunds 
 +</code> 
 + 
 +---- 
 + 
 +===== Composants ===== 
 + 
 +<code> 
 +InvoiceTable 
 + 
 +PaymentHistory 
 + 
 +RefundManager 
 +</code> 
 + 
 +---- 
 + 
 +====== Étape 4-E.13 — Module OTA ====== 
 + 
 +===== Pages ===== 
 + 
 +<code> 
 +/ota/channels 
 + 
 +/ota/distribution 
 + 
 +/ota/synchronization 
 +</code> 
 + 
 +---- 
 + 
 +===== Composants ===== 
 + 
 +<code> 
 +ChannelStatus 
 + 
 +SyncDashboard 
 + 
 +DistributionTable 
 +</code> 
 + 
 +---- 
 + 
 +====== Étape 4-E.14 — Module IA ====== 
 + 
 +===== Pages ===== 
 + 
 +<code> 
 +/ai 
 + 
 +/ai/chat 
 + 
 +/ai/recommendations 
 + 
 +/ai/knowledge-base 
 +</code> 
 + 
 +---- 
 + 
 +===== Composants ===== 
 + 
 +<code> 
 +AiChat 
 + 
 +RecommendationPanel 
 + 
 +KnowledgeSearch 
 + 
 +AutomationDashboard 
 +</code> 
 + 
 +---- 
 + 
 +====== Étape 4-E.15 — Module Sécurité ====== 
 + 
 +===== Pages ===== 
 + 
 +<code> 
 +/security 
 + 
 +/security/mfa 
 + 
 +/security/sessions 
 + 
 +/security/privacy 
 + 
 +/security/compliance 
 +</code> 
 + 
 +---- 
 + 
 +===== Composants ===== 
 + 
 +<code> 
 +MfaWizard 
 + 
 +SessionManager 
 + 
 +ConsentManager 
 + 
 +RiskMatrix 
 +</code> 
 + 
 +---- 
 + 
 +====== Étape 4-E.16 — Dashboard ====== 
 + 
 +===== Route ===== 
 + 
 +<code> 
 +/dashboard 
 +</code> 
 + 
 +---- 
 + 
 +===== Widgets ===== 
 + 
 +<code> 
 +Revenue KPI 
 + 
 +Occupancy KPI 
 + 
 +Reservations KPI 
 + 
 +Payments KPI 
 + 
 +Lead KPI 
 + 
 +Security KPI 
 +</code> 
 + 
 +---- 
 + 
 +====== Étape 4-E.17 — Internationalisation ====== 
 + 
 +===== Installation ===== 
 + 
 +<code bash> 
 +npm install next-intl 
 +</code> 
 + 
 +---- 
 + 
 +===== Langues ===== 
 + 
 +<code> 
 +fr 
 + 
 +en 
 + 
 +es 
 + 
 +it 
 + 
 +de 
 + 
 +nl 
 +</code> 
 + 
 +---- 
 + 
 +===== Structure ===== 
 + 
 +<code> 
 +messages 
 + 
 +├── fr.json 
 + 
 +├── en.json 
 + 
 +├── es.json 
 + 
 +└── de.json 
 +</code> 
 + 
 +---- 
 + 
 +====== Étape 4-E.18 — Multi-Tenant ====== 
 + 
 +===== Header ===== 
 + 
 +<code> 
 +X-Tenant-Id 
 +</code> 
 + 
 +---- 
 + 
 +===== Provider ===== 
 + 
 +<code> 
 +TenantProvider 
 +</code> 
 + 
 +---- 
 + 
 +===== Context ===== 
 + 
 +<code ts> 
 +TenantContext 
 +</code> 
 + 
 +---- 
 + 
 +===== Objectif ===== 
 + 
 +Changer dynamiquement : 
 + 
 +<code> 
 +Branding 
 + 
 +Logo 
 + 
 +Couleurs 
 + 
 +Permissions 
 + 
 +Domaine 
 +</code> 
 + 
 +selon le tenant. 
 + 
 +---- 
 + 
 +====== Étape 4-E.19 — RBAC Frontend ====== 
 + 
 +===== Hooks ===== 
 + 
 +<code ts> 
 +useRole() 
 + 
 +usePermission() 
 + 
 +useFeatureFlag() 
 +</code> 
 + 
 +---- 
 + 
 +===== Composant ===== 
 + 
 +<code tsx> 
 +<Can permission="properties.create"> 
 + 
 +  <Button> 
 + 
 +    Ajouter 
 + 
 +  </Button> 
 + 
 +</Can> 
 +</code> 
 + 
 +---- 
 + 
 +====== Étape 4-E.20 — Feature Flags ====== 
 + 
 +===== Service ===== 
 + 
 +<code> 
 +FeatureFlagProvider 
 +</code> 
 + 
 +---- 
 + 
 +===== Exemple ===== 
 + 
 +<code tsx> 
 +<FeatureFlag 
 +  code="AI_ASSISTANT"> 
 + 
 +  <AiWidget /> 
 + 
 +</FeatureFlag> 
 +</code> 
 + 
 +---- 
 + 
 +====== Étape 4-E.21 — Gestion des erreurs ====== 
 + 
 +===== Pages ===== 
 + 
 +<code> 
 +not-found.tsx 
 + 
 +error.tsx 
 + 
 +global-error.tsx 
 +</code> 
 + 
 +---- 
 + 
 +===== Composants ===== 
 + 
 +<code> 
 +ErrorBoundary 
 + 
 +ApiErrorAlert 
 +</code> 
 + 
 +---- 
 + 
 +====== Étape 4-E.22 — Tests ====== 
 + 
 +===== Installation ===== 
 + 
 +<code bash> 
 +npm install vitest 
 + 
 +npm install @testing-library/react 
 + 
 +npm install @testing-library/jest-dom 
 +</code> 
 + 
 +---- 
 + 
 +===== Types ===== 
 + 
 +<code> 
 +Unit 
 + 
 +Integration 
 + 
 +Component 
 +</code> 
 + 
 +---- 
 + 
 +====== Contrôles qualité ====== 
 + 
 +===== Lint ===== 
 + 
 +<code bash> 
 +nx lint web 
 +</code> 
 + 
 +---- 
 + 
 +===== Type Check ===== 
 + 
 +<code bash> 
 +npx tsc --noEmit 
 +</code> 
 + 
 +---- 
 + 
 +===== Build ===== 
 + 
 +<code bash> 
 +nx build web 
 +</code> 
 + 
 +---- 
 + 
 +===== Local ===== 
 + 
 +<code bash> 
 +nx serve web 
 +</code> 
 + 
 +---- 
 + 
 +====== Livrables ====== 
 + 
 +<code> 
 +apps/web 
 + 
 +layouts 
 + 
 +providers 
 + 
 +modules 
 + 
 +components 
 + 
 +hooks 
 + 
 +services 
 + 
 +stores 
 +</code> 
 + 
 +---- 
 + 
 +====== Définition de terminé ====== 
 + 
 +La Phase 4-E est terminée lorsque : 
 + 
 +<code> 
 +✓ NextJS compilable 
 + 
 +✓ Auth fonctionnelle 
 + 
 +✓ SDK intégré 
 + 
 +✓ RBAC opérationnel 
 + 
 +✓ Multi-Tenant opérationnel 
 + 
 +✓ Internationalisation opérationnelle 
 + 
 +✓ Dashboard opérationnel 
 + 
 +✓ Build vert 
 +</code> 
 + 
 +---- 
 + 
 +====== Phase 4-F — Docker Compose Enterprise ====== 
 + 
 +===== Objectif ===== 
 + 
 +Industrialiser complètement l'environnement local de développement. 
 + 
 +À l'issue de cette phase : 
 + 
 +<code> 
 +✓ PostgreSQL 
 + 
 +✓ Redis 
 + 
 +✓ NestJS 
 + 
 +✓ NextJS 
 + 
 +✓ PgAdmin 
 + 
 +✓ Mailhog 
 + 
 +✓ MinIO 
 + 
 +✓ Nginx 
 + 
 +✓ Monitoring 
 + 
 +✓ Docker Network 
 + 
 +✓ Volumes persistants 
 +</code> 
 + 
 +seront disponibles via une simple commande : 
 + 
 +<code bash> 
 +docker compose up -d 
 +</code> 
 + 
 +---- 
 + 
 +====== Architecture cible ====== 
 + 
 +===== Services ===== 
 + 
 +<code> 
 +┌─────────────┐ 
 +│   NextJS    │ 
 +└──────┬──────┘ 
 +       │ 
 +       ▼ 
 +┌─────────────┐ 
 +│   NGINX     │ 
 +└──────┬──────┘ 
 +       │ 
 +       ▼ 
 +┌─────────────┐ 
 +│   NestJS    │ 
 +└──────┬──────┘ 
 +       │ 
 + ┌─────┼─────┐ 
 + ▼     ▼     ▼ 
 + 
 +Postgres Redis MinIO 
 + 
 +       │ 
 +       ▼ 
 + 
 + Mailhog 
 +</code> 
 + 
 +---- 
 + 
 +====== Étape 4-F.1 — Structure Docker ====== 
 + 
 +===== Créer ===== 
 + 
 +<code> 
 +docker 
 + 
 +├── postgres 
 + 
 +├── redis 
 + 
 +├── minio 
 + 
 +├── nginx 
 + 
 +├── mailhog 
 + 
 +├── prometheus 
 + 
 +└── grafana 
 +</code> 
 + 
 +---- 
 + 
 +====== Étape 4-F.2 — Docker Network ====== 
 + 
 +===== docker-compose.yml ===== 
 + 
 +Créer à la racine : 
 + 
 +<code> 
 +docker-compose.yml 
 +</code> 
 + 
 +---- 
 + 
 +===== Network ===== 
 + 
 +<code yaml> 
 +networks: 
 + 
 +  platform-network: 
 + 
 +    driver: bridge 
 +</code> 
 + 
 +---- 
 + 
 +====== Étape 4-F.3 — PostgreSQL ====== 
 + 
 +===== Service ===== 
 + 
 +<code yaml> 
 +postgres: 
 + 
 +  image: postgres:16 
 + 
 +  container_name: postgres 
 + 
 +  restart: always 
 + 
 +  environment: 
 + 
 +    POSTGRES_DB: rental_platform 
 + 
 +    POSTGRES_USER: postgres 
 + 
 +    POSTGRES_PASSWORD: postgres 
 + 
 +  ports: 
 + 
 +    - "5432:5432" 
 + 
 +  volumes: 
 + 
 +    - postgres_data:/var/lib/postgresql/data 
 + 
 +  networks: 
 + 
 +    - platform-network 
 +</code> 
 + 
 +---- 
 + 
 +===== Volume ===== 
 + 
 +<code yaml> 
 +volumes: 
 + 
 +  postgres_data: 
 +</code> 
 + 
 +---- 
 + 
 +====== Étape 4-F.4 — PgAdmin ====== 
 + 
 +===== Service ===== 
 + 
 +<code yaml> 
 +pgadmin: 
 + 
 +  image: dpage/pgadmin4 
 + 
 +  container_name: pgadmin 
 + 
 +  restart: always 
 + 
 +  environment: 
 + 
 +    PGADMIN_DEFAULT_EMAIL: admin@local.dev 
 + 
 +    PGADMIN_DEFAULT_PASSWORD: admin 
 + 
 +  ports: 
 + 
 +    - "5050:80" 
 + 
 +  depends_on: 
 + 
 +    - postgres 
 +</code> 
 + 
 +---- 
 + 
 +===== URL ===== 
 + 
 +<code> 
 +http://localhost:5050 
 +</code> 
 + 
 +---- 
 + 
 +====== Étape 4-F.5 — Redis ====== 
 + 
 +===== Service ===== 
 + 
 +<code yaml> 
 +redis: 
 + 
 +  image: redis:7-alpine 
 + 
 +  container_name: redis 
 + 
 +  restart: always 
 + 
 +  ports: 
 + 
 +    - "6379:6379" 
 + 
 +  volumes: 
 + 
 +    - redis_data:/data 
 + 
 +  networks: 
 + 
 +    - platform-network 
 +</code> 
 + 
 +---- 
 + 
 +===== Volume ===== 
 + 
 +<code yaml> 
 +redis_data: 
 +</code> 
 + 
 +---- 
 + 
 +====== Étape 4-F.6 — Mailhog ====== 
 + 
 +===== Service ===== 
 + 
 +<code yaml> 
 +mailhog: 
 + 
 +  image: mailhog/mailhog 
 + 
 +  container_name: mailhog 
 + 
 +  restart: always 
 + 
 +  ports: 
 + 
 +    - "1025:1025" 
 + 
 +    - "8025:8025" 
 + 
 +  networks: 
 + 
 +    - platform-network 
 +</code> 
 + 
 +---- 
 + 
 +===== URLs ===== 
 + 
 +<code> 
 +SMTP 
 + 
 +localhost:1025 
 + 
 +---------------- 
 + 
 +UI 
 + 
 +http://localhost:8025 
 +</code> 
 + 
 +---- 
 + 
 +====== Étape 4-F.7 — MinIO ====== 
 + 
 +===== Service ===== 
 + 
 +<code yaml> 
 +minio: 
 + 
 +  image: minio/minio 
 + 
 +  container_name: minio 
 + 
 +  command: server /data --console-address ":9001" 
 + 
 +  restart: always 
 + 
 +  environment: 
 + 
 +    MINIO_ROOT_USER: admin 
 + 
 +    MINIO_ROOT_PASSWORD: password123 
 + 
 +  ports: 
 + 
 +    - "9000:9000" 
 + 
 +    - "9001:9001" 
 + 
 +  volumes: 
 + 
 +    - minio_data:/data 
 + 
 +  networks: 
 + 
 +    - platform-network 
 +</code> 
 + 
 +---- 
 + 
 +===== Volume ===== 
 + 
 +<code yaml> 
 +minio_data: 
 +</code> 
 + 
 +---- 
 + 
 +===== Console ===== 
 + 
 +<code> 
 +http://localhost:9001 
 +</code> 
 + 
 +---- 
 + 
 +====== Étape 4-F.8 — API NestJS ====== 
 + 
 +===== Dockerfile ===== 
 + 
 +Créer : 
 + 
 +<code> 
 +apps/api/Dockerfile 
 +</code> 
 + 
 +---- 
 + 
 +===== Contenu ===== 
 + 
 +<code docker> 
 +FROM node:22-alpine 
 + 
 +WORKDIR /app 
 + 
 +COPY . . 
 + 
 +RUN npm install 
 + 
 +RUN npm run build api 
 + 
 +CMD ["node","dist/apps/api/main.js"
 +</code> 
 + 
 +---- 
 + 
 +===== Service ===== 
 + 
 +<code yaml> 
 +api: 
 + 
 +  build: 
 + 
 +    context: . 
 + 
 +    dockerfile: apps/api/Dockerfile 
 + 
 +  container_name: api 
 + 
 +  restart: always 
 + 
 +  ports: 
 + 
 +    - "3000:3000" 
 + 
 +  env_file: 
 + 
 +    - apps/api/.env 
 + 
 +  depends_on: 
 + 
 +    - postgres 
 + 
 +    - redis 
 + 
 +  networks: 
 + 
 +    - platform-network 
 +</code> 
 + 
 +---- 
 + 
 +====== Étape 4-F.9 — Frontend NextJS ====== 
 + 
 +===== Dockerfile ===== 
 + 
 +Créer : 
 + 
 +<code> 
 +apps/web/Dockerfile 
 +</code> 
 + 
 +---- 
 + 
 +===== Contenu ===== 
 + 
 +<code docker> 
 +FROM node:22-alpine 
 + 
 +WORKDIR /app 
 + 
 +COPY . . 
 + 
 +RUN npm install 
 + 
 +RUN npm run build web 
 + 
 +CMD ["npm","run","start:web"
 +</code> 
 + 
 +---- 
 + 
 +===== Service ===== 
 + 
 +<code yaml> 
 +web: 
 + 
 +  build: 
 + 
 +    context: . 
 + 
 +    dockerfile: apps/web/Dockerfile 
 + 
 +  container_name: web 
 + 
 +  restart: always 
 + 
 +  ports: 
 + 
 +    - "4200:3000" 
 + 
 +  depends_on: 
 + 
 +    - api 
 + 
 +  networks: 
 + 
 +    - platform-network 
 +</code> 
 + 
 +---- 
 + 
 +====== Étape 4-F.10 — NGINX Reverse Proxy ====== 
 + 
 +===== Fichier ===== 
 + 
 +<code> 
 +docker/nginx/default.conf 
 +</code> 
 + 
 +---- 
 + 
 +===== Configuration ===== 
 + 
 +<code nginx> 
 +server { 
 + 
 +  listen 80; 
 + 
 +  location / { 
 + 
 +    proxy_pass http://web:3000; 
 +  } 
 + 
 +  location /api { 
 + 
 +    proxy_pass http://api:3000; 
 +  } 
 +
 +</code> 
 + 
 +---- 
 + 
 +===== Service ===== 
 + 
 +<code yaml> 
 +nginx: 
 + 
 +  image: nginx:alpine 
 + 
 +  container_name: nginx 
 + 
 +  ports: 
 + 
 +    - "80:80" 
 + 
 +  volumes: 
 + 
 +    - ./docker/nginx/default.conf:/etc/nginx/conf.d/default.conf 
 + 
 +  depends_on: 
 + 
 +    - web 
 + 
 +    - api 
 + 
 +  networks: 
 + 
 +    - platform-network 
 +</code> 
 + 
 +---- 
 + 
 +====== Étape 4-F.11 — Prometheus ====== 
 + 
 +===== Configuration ===== 
 + 
 +<code> 
 +docker/prometheus/prometheus.yml 
 +</code> 
 + 
 +---- 
 + 
 +===== Service ===== 
 + 
 +<code yaml> 
 +prometheus: 
 + 
 +  image: prom/prometheus 
 + 
 +  container_name: prometheus 
 + 
 +  ports: 
 + 
 +    - "9090:9090" 
 + 
 +  volumes: 
 + 
 +    - ./docker/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml 
 + 
 +  networks: 
 + 
 +    - platform-network 
 +</code> 
 + 
 +---- 
 + 
 +====== Étape 4-F.12 — Grafana ====== 
 + 
 +===== Service ===== 
 + 
 +<code yaml> 
 +grafana: 
 + 
 +  image: grafana/grafana 
 + 
 +  container_name: grafana 
 + 
 +  ports: 
 + 
 +    - "3001:3000" 
 + 
 +  volumes: 
 + 
 +    - grafana_data:/var/lib/grafana 
 + 
 +  networks: 
 + 
 +    - platform-network 
 +</code> 
 + 
 +---- 
 + 
 +===== Volume ===== 
 + 
 +<code yaml> 
 +grafana_data: 
 +</code> 
 + 
 +---- 
 + 
 +===== URL ===== 
 + 
 +<code> 
 +http://localhost:3001 
 +</code> 
 + 
 +---- 
 + 
 +====== Étape 4-F.13 — Fichier .env Docker ====== 
 + 
 +===== Créer ===== 
 + 
 +<code> 
 +.env.docker 
 +</code> 
 + 
 +---- 
 + 
 +===== Contenu ===== 
 + 
 +<code> 
 +POSTGRES_USER=postgres 
 + 
 +POSTGRES_PASSWORD=postgres 
 + 
 +POSTGRES_DB=rental_platform 
 + 
 +REDIS_HOST=redis 
 + 
 +REDIS_PORT=6379 
 + 
 +MINIO_ENDPOINT=minio 
 + 
 +MINIO_ACCESS_KEY=admin 
 + 
 +MINIO_SECRET_KEY=password123 
 +</code> 
 + 
 +---- 
 + 
 +====== Étape 4-F.14 — Démarrage ====== 
 + 
 +===== Lancer ===== 
 + 
 +<code bash> 
 +docker compose up -d 
 +</code> 
 + 
 +---- 
 + 
 +===== Vérifier ===== 
 + 
 +<code bash> 
 +docker ps 
 +</code> 
 + 
 +---- 
 + 
 +===== Résultat ===== 
 + 
 +<code> 
 +postgres 
 + 
 +redis 
 + 
 +mailhog 
 + 
 +minio 
 + 
 +pgadmin 
 + 
 +api 
 + 
 +web 
 + 
 +nginx 
 + 
 +prometheus 
 + 
 +grafana 
 +</code> 
 + 
 +---- 
 + 
 +====== Étape 4-F.15 — Vérifications ====== 
 + 
 +===== API ===== 
 + 
 +<code> 
 +http://localhost:3000 
 +</code> 
 + 
 +---- 
 + 
 +===== Swagger ===== 
 + 
 +<code> 
 +http://localhost:3000/api 
 +</code> 
 + 
 +---- 
 + 
 +===== Front ===== 
 + 
 +<code> 
 +http://localhost:4200 
 +</code> 
 + 
 +---- 
 + 
 +===== PgAdmin ===== 
 + 
 +<code> 
 +http://localhost:5050 
 +</code> 
 + 
 +---- 
 + 
 +===== Mailhog ===== 
 + 
 +<code> 
 +http://localhost:8025 
 +</code> 
 + 
 +---- 
 + 
 +===== MinIO ===== 
 + 
 +<code> 
 +http://localhost:9001 
 +</code> 
 + 
 +---- 
 + 
 +===== Grafana ===== 
 + 
 +<code> 
 +http://localhost:3001 
 +</code> 
 + 
 +---- 
 + 
 +===== Prometheus ===== 
 + 
 +<code> 
 +http://localhost:9090 
 +</code> 
 + 
 +---- 
 + 
 +====== Définition de terminé ====== 
 + 
 +La Phase 4-F est terminée lorsque : 
 + 
 +<code> 
 +✓ Tous les conteneurs démarrent 
 + 
 +✓ PostgreSQL accessible 
 + 
 +✓ Redis accessible 
 + 
 +✓ API accessible 
 + 
 +✓ Frontend accessible 
 + 
 +✓ Swagger accessible 
 + 
 +✓ Mailhog opérationnel 
 + 
 +✓ MinIO opérationnel 
 + 
 +✓ Monitoring opérationnel 
 +</code> 
 + 
 +---- 
 + 
 +====== Livrables ====== 
 + 
 +<code> 
 +docker-compose.yml 
 + 
 +apps/api/Dockerfile 
 + 
 +apps/web/Dockerfile 
 + 
 +docker/nginx/default.conf 
 + 
 +docker/prometheus/prometheus.yml 
 + 
 +.env.docker 
 +</code> 
 + 
 +---- 
 + 
 +====== Phase 4-G — GitHub Actions CI/CD Enterprise ====== 
 + 
 +===== Objectif ===== 
 + 
 +Industrialiser complètement le cycle de développement. 
 + 
 +À l'issue de cette phase : 
 + 
 +<code> 
 +✓ Build automatique 
 + 
 +✓ Lint automatique 
 + 
 +✓ Tests automatiques 
 + 
 +✓ Validation Prisma 
 + 
 +✓ Génération OpenAPI 
 + 
 +✓ Build Docker 
 + 
 +✓ Security Scan 
 + 
 +✓ Release automatique 
 + 
 +✓ Qualité contrôlée 
 +</code> 
 + 
 +sur chaque : 
 + 
 +<code> 
 +Push 
 + 
 +Pull Request 
 + 
 +Release 
 +</code> 
 + 
 +---- 
 + 
 +====== Architecture CI/CD ====== 
 + 
 +===== Pipelines ===== 
 + 
 +<code> 
 +CI 
 + 
 +↓ 
 + 
 +Quality 
 + 
 +↓ 
 + 
 +Security 
 + 
 +↓ 
 + 
 +Docker 
 + 
 +↓ 
 + 
 +Release 
 + 
 +↓ 
 + 
 +Deploy 
 +</code> 
 + 
 +---- 
 + 
 +====== Structure ====== 
 + 
 +===== Répertoire ===== 
 + 
 +<code> 
 +.github 
 + 
 +└── workflows 
 + 
 +    ├── ci.yml 
 + 
 +    ├── quality.yml 
 + 
 +    ├── security.yml 
 + 
 +    ├── docker.yml 
 + 
 +    ├── release.yml 
 + 
 +    └── deploy.yml 
 +</code> 
 + 
 +---- 
 + 
 +====== Étape 4-G.1 — Workflow CI ====== 
 + 
 +===== Fichier ===== 
 + 
 +<code> 
 +.github/workflows/ci.yml 
 +</code> 
 + 
 +---- 
 + 
 +===== Déclencheurs ===== 
 + 
 +<code yaml> 
 +on: 
 + 
 +  push: 
 + 
 +    branches: 
 + 
 +      - main 
 + 
 +      - develop 
 + 
 +  pull_request: 
 +</code> 
 + 
 +---- 
 + 
 +===== Jobs ===== 
 + 
 +<code> 
 +Install 
 + 
 +Lint 
 + 
 +Build 
 + 
 +Test 
 +</code> 
 + 
 +---- 
 + 
 +===== Exemple ===== 
 + 
 +<code yaml> 
 +name: CI 
 + 
 +jobs: 
 + 
 +  install: 
 + 
 +    runs-on: ubuntu-latest 
 + 
 +    steps: 
 + 
 +      - uses: actions/checkout@v4 
 + 
 +      - uses: actions/setup-node@v4 
 + 
 +      - run: npm ci 
 +</code> 
 + 
 +---- 
 + 
 +====== Étape 4-G.2 — Lint ====== 
 + 
 +===== Job ===== 
 + 
 +<code yaml> 
 +lint: 
 + 
 +  runs-on: ubuntu-latest 
 + 
 +  steps: 
 + 
 +    - run: nx lint api 
 + 
 +    - run: nx lint web 
 + 
 +    - run: nx lint contracts 
 +</code> 
 + 
 +---- 
 + 
 +===== Contrôle ===== 
 + 
 +<code> 
 +ESLint 
 + 
 +Prettier 
 + 
 +Architecture 
 +</code> 
 + 
 +---- 
 + 
 +====== Étape 4-G.3 — Type Check ====== 
 + 
 +===== Job ===== 
 + 
 +<code yaml> 
 +typecheck: 
 + 
 +  runs-on: ubuntu-latest 
 + 
 +  steps: 
 + 
 +    - run: npx tsc --noEmit 
 +</code> 
 + 
 +---- 
 + 
 +====== Étape 4-G.4 — Prisma Validation ====== 
 + 
 +===== Job ===== 
 + 
 +<code yaml> 
 +prisma: 
 + 
 +  runs-on: ubuntu-latest 
 + 
 +  steps: 
 + 
 +    - run: npx prisma validate 
 + 
 +    - run: npx prisma format --check 
 +</code> 
 + 
 +---- 
 + 
 +===== Objectif ===== 
 + 
 +Empêcher : 
 + 
 +<code> 
 +Migration cassée 
 + 
 +Relation invalide 
 + 
 +Schema incorrect 
 +</code> 
 + 
 +---- 
 + 
 +====== Étape 4-G.5 — Build ====== 
 + 
 +===== API ===== 
 + 
 +<code yaml> 
 +build-api: 
 + 
 +  runs-on: ubuntu-latest 
 + 
 +  steps: 
 + 
 +    - run: nx build api 
 +</code> 
 + 
 +---- 
 + 
 +===== Front ===== 
 + 
 +<code yaml> 
 +build-web: 
 + 
 +  runs-on: ubuntu-latest 
 + 
 +  steps: 
 + 
 +    - run: nx build web 
 +</code> 
 + 
 +---- 
 + 
 +===== Contracts ===== 
 + 
 +<code yaml> 
 +build-contracts: 
 + 
 +  runs-on: ubuntu-latest 
 + 
 +  steps: 
 + 
 +    - run: nx build contracts 
 +</code> 
 + 
 +---- 
 + 
 +====== Étape 4-G.6 — Tests ====== 
 + 
 +===== Unitaires ===== 
 + 
 +<code yaml> 
 +test-unit: 
 + 
 +  runs-on: ubuntu-latest 
 + 
 +  steps: 
 + 
 +    - run: nx test api 
 + 
 +    - run: nx test web 
 +</code> 
 + 
 +---- 
 + 
 +===== Couverture ===== 
 + 
 +<code> 
 +Minimum 80% 
 +</code> 
 + 
 +---- 
 + 
 +===== Contrôle ===== 
 + 
 +<code yaml> 
 +- run: npm run test:coverage 
 +</code> 
 + 
 +---- 
 + 
 +====== Étape 4-G.7 — PostgreSQL CI ====== 
 + 
 +===== Service ===== 
 + 
 +<code yaml> 
 +services: 
 + 
 +  postgres: 
 + 
 +    image: postgres:16 
 + 
 +    env: 
 + 
 +      POSTGRES_USER: postgres 
 + 
 +      POSTGRES_PASSWORD: postgres 
 + 
 +      POSTGRES_DB: testdb 
 + 
 +    ports: 
 + 
 +      - 5432:5432 
 +</code> 
 + 
 +---- 
 + 
 +===== Migration ===== 
 + 
 +<code yaml> 
 +- run: npx prisma migrate deploy 
 +</code> 
 + 
 +---- 
 + 
 +===== Seed ===== 
 + 
 +<code yaml> 
 +- run: npx prisma db seed 
 +</code> 
 + 
 +---- 
 + 
 +====== Étape 4-G.8 — Tests E2E ====== 
 + 
 +===== Job ===== 
 + 
 +<code yaml> 
 +e2e: 
 + 
 +  runs-on: ubuntu-latest 
 +</code> 
 + 
 +---- 
 + 
 +===== Scénarios ===== 
 + 
 +<code> 
 +Register 
 + 
 +Login 
 + 
 +Create Property 
 + 
 +Create Reservation 
 + 
 +Create Invoice 
 + 
 +Payment 
 +</code> 
 + 
 +---- 
 + 
 +===== Commande ===== 
 + 
 +<code yaml> 
 +- run: nx e2e api-e2e 
 +</code> 
 + 
 +---- 
 + 
 +====== Étape 4-G.9 — Security Scan ====== 
 + 
 +===== Dépendances ===== 
 + 
 +<code yaml> 
 +- run: npm audit 
 +</code> 
 + 
 +---- 
 + 
 +===== Trivy ===== 
 + 
 +<code yaml> 
 +- uses: aquasecurity/trivy-action 
 +</code> 
 + 
 +---- 
 + 
 +===== Vérifications ===== 
 + 
 +<code> 
 +CVE 
 + 
 +Secrets 
 + 
 +Images Docker 
 +</code> 
 + 
 +---- 
 + 
 +====== Étape 4-G.10 — Secret Scan ====== 
 + 
 +===== Gitleaks ===== 
 + 
 +<code yaml> 
 +- uses: gitleaks/gitleaks-action 
 +</code> 
 + 
 +---- 
 + 
 +===== Détecte ===== 
 + 
 +<code> 
 +API Keys 
 + 
 +Passwords 
 + 
 +Tokens 
 + 
 +Secrets AWS 
 +</code> 
 + 
 +---- 
 + 
 +====== Étape 4-G.11 — OpenAPI Validation ====== 
 + 
 +===== Génération ===== 
 + 
 +<code yaml> 
 +- run: npm run swagger:generate 
 +</code> 
 + 
 +---- 
 + 
 +===== Validation ===== 
 + 
 +<code yaml> 
 +- run: npm run openapi:validate 
 +</code> 
 + 
 +---- 
 + 
 +===== Vérification ===== 
 + 
 +<code> 
 +Swagger valide 
 + 
 +Contrats cohérents 
 +</code> 
 + 
 +---- 
 + 
 +====== Étape 4-G.12 — Build Docker ====== 
 + 
 +===== Job ===== 
 + 
 +<code yaml> 
 +docker: 
 + 
 +  runs-on: ubuntu-latest 
 +</code> 
 + 
 +---- 
 + 
 +===== API ===== 
 + 
 +<code yaml> 
 +docker build \ 
 +  -f apps/api/Dockerfile . 
 +</code> 
 + 
 +---- 
 + 
 +===== Front ===== 
 + 
 +<code yaml> 
 +docker build \ 
 +  -f apps/web/Dockerfile . 
 +</code> 
 + 
 +---- 
 + 
 +====== Étape 4-G.13 — Push Registry ====== 
 + 
 +===== GitHub Container Registry ===== 
 + 
 +<code> 
 +ghcr.io 
 +</code> 
 + 
 +---- 
 + 
 +===== Login ===== 
 + 
 +<code yaml> 
 +- uses: docker/login-action@v3 
 +</code> 
 + 
 +---- 
 + 
 +===== Push ===== 
 + 
 +<code yaml> 
 +docker push ghcr.io/company/api 
 + 
 +docker push ghcr.io/company/web 
 +</code> 
 + 
 +---- 
 + 
 +====== Étape 4-G.14 — Release Automation ====== 
 + 
 +===== Fichier ===== 
 + 
 +<code> 
 +.github/workflows/release.yml 
 +</code> 
 + 
 +---- 
 + 
 +===== Déclencheur ===== 
 + 
 +<code yaml> 
 +on: 
 + 
 +  push: 
 + 
 +    tags: 
 + 
 +      - 'v*' 
 +</code> 
 + 
 +---- 
 + 
 +===== Exemple ===== 
 + 
 +<code> 
 +v1.0.0 
 + 
 +v1.1.0 
 + 
 +v2.0.0 
 +</code> 
 + 
 +---- 
 + 
 +===== Génération ===== 
 + 
 +<code> 
 +Release Notes 
 + 
 +Docker Images 
 + 
 +Artifacts 
 +</code> 
 + 
 +---- 
 + 
 +====== Étape 4-G.15 — Artifacts ====== 
 + 
 +===== Upload ===== 
 + 
 +<code yaml> 
 +- uses: actions/upload-artifact 
 +</code> 
 + 
 +---- 
 + 
 +===== Artifacts ===== 
 + 
 +<code> 
 +OpenAPI 
 + 
 +Coverage 
 + 
 +Build 
 + 
 +Migration SQL 
 +</code> 
 + 
 +---- 
 + 
 +====== Étape 4-G.16 — Badges ====== 
 + 
 +===== README ===== 
 + 
 +<code markdown> 
 +![CI] 
 + 
 +![Coverage] 
 + 
 +![Docker] 
 + 
 +![Security] 
 +</code> 
 + 
 +---- 
 + 
 +====== Étape 4-G.17 — Branch Protection ====== 
 + 
 +===== Main ===== 
 + 
 +Configurer GitHub : 
 + 
 +<code> 
 +Require Pull Request 
 + 
 +Require CI 
 + 
 +Require Reviews 
 + 
 +Require Status Checks 
 +</code> 
 + 
 +---- 
 + 
 +===== Interdictions ===== 
 + 
 +<code> 
 +Push direct main 
 + 
 +Merge sans review 
 + 
 +Merge sans CI 
 +</code> 
 + 
 +---- 
 + 
 +====== Étape 4-G.18 — Dependabot ====== 
 + 
 +===== Fichier ===== 
 + 
 +<code> 
 +.github/dependabot.yml 
 +</code> 
 + 
 +---- 
 + 
 +===== Exemple ===== 
 + 
 +<code yaml> 
 +version: 2 
 + 
 +updates: 
 + 
 +  - package-ecosystem: npm 
 + 
 +    directory: "/" 
 + 
 +    schedule: 
 + 
 +      interval: weekly 
 +</code> 
 + 
 +---- 
 + 
 +====== Étape 4-G.19 — Renovate (optionnel) ====== 
 + 
 +===== Alternative ===== 
 + 
 +<code> 
 +Renovate Bot 
 +</code> 
 + 
 +pour : 
 + 
 +<code> 
 +NPM 
 + 
 +Docker 
 + 
 +GitHub Actions 
 + 
 +Terraform 
 +</code> 
 + 
 +---- 
 + 
 +====== Étape 4-G.20 — Qualité Enterprise ====== 
 + 
 +===== Gates ===== 
 + 
 +<code> 
 +Coverage > 80% 
 + 
 +0 erreur ESLint 
 + 
 +0 erreur TypeScript 
 + 
 +0 migration invalide 
 + 
 +0 vulnérabilité critique 
 +</code> 
 + 
 +---- 
 + 
 +====== Arborescence finale ====== 
 + 
 +<code> 
 +.github 
 + 
 +└── workflows 
 + 
 +    ├── ci.yml 
 + 
 +    ├── quality.yml 
 + 
 +    ├── security.yml 
 + 
 +    ├── docker.yml 
 + 
 +    ├── release.yml 
 + 
 +    └── deploy.yml 
 + 
 +.github 
 + 
 +└── dependabot.yml 
 +</code> 
 + 
 +---- 
 + 
 +====== Définition de terminé ====== 
 + 
 +La Phase 4-G est terminée lorsque : 
 + 
 +<code> 
 +✓ CI verte 
 + 
 +✓ Build automatique 
 + 
 +✓ Lint automatique 
 + 
 +✓ Tests automatiques 
 + 
 +✓ Docker build automatique 
 + 
 +✓ OpenAPI validé 
 + 
 +✓ Security scan actif 
 + 
 +✓ Releases automatisées 
 +</code> 
 + 
 +---- 
 + 
 +====== Livrables ====== 
 + 
 +<code> 
 +.github/workflows/
 + 
 +.github/dependabot.yml 
 + 
 +README.md 
 + 
 +Badges CI 
 +</code> 
 + 
 +---- 
 + 
 +====== Phase 4-H — Helm Charts Kubernetes Enterprise ====== 
 + 
 +===== Objectif ===== 
 + 
 +Préparer la plateforme pour un déploiement Cloud Native Enterprise. 
 + 
 +Cette phase transforme : 
 + 
 +<code> 
 +Docker Compose 
 + 
 +↓ 
 + 
 +Kubernetes 
 + 
 +↓ 
 + 
 +Helm Charts 
 +</code> 
 + 
 +afin de permettre : 
 + 
 +<code> 
 +AWS EKS 
 + 
 +Azure AKS 
 + 
 +Google GKE 
 + 
 +OVH Managed Kubernetes 
 + 
 +On-Prem Kubernetes 
 +</code> 
 + 
 +---- 
 + 
 +====== Résultat attendu ====== 
 + 
 +À l'issue de cette phase : 
 + 
 +<code> 
 +✓ Helm Charts complets 
 + 
 +✓ Déploiement automatisé 
 + 
 +✓ Rolling Updates 
 + 
 +✓ Autoscaling 
 + 
 +✓ Secrets Kubernetes 
 + 
 +✓ ConfigMaps 
 + 
 +✓ Ingress 
 + 
 +✓ Monitoring 
 +</code> 
 + 
 +---- 
 + 
 +====== Architecture Kubernetes ====== 
 + 
 +<code> 
 +Namespace 
 + 
 +│ 
 + 
 +├── web 
 + 
 +├── api 
 + 
 +├── postgres 
 + 
 +├── redis 
 + 
 +├── minio 
 + 
 +├── ingress 
 + 
 +├── monitoring 
 + 
 +└── jobs 
 +</code> 
 + 
 +---- 
 + 
 +====== Étape 4-H.1 — Structure Helm ====== 
 + 
 +===== Créer ===== 
 + 
 +<code> 
 +deploy 
 + 
 +└── helm 
 + 
 +    └── rental-platform 
 + 
 +        ├── Chart.yaml 
 + 
 +        ├── values.yaml 
 + 
 +        ├── values-dev.yaml 
 + 
 +        ├── values-staging.yaml 
 + 
 +        ├── values-prod.yaml 
 + 
 +        └── templates 
 +</code> 
 + 
 +---- 
 + 
 +====== Étape 4-H.2 — Chart.yaml ====== 
 + 
 +===== Fichier ===== 
 + 
 +<code> 
 +deploy/helm/rental-platform/Chart.yaml 
 +</code> 
 + 
 +---- 
 + 
 +===== Contenu ===== 
 + 
 +<code yaml> 
 +apiVersion: v2 
 + 
 +name: rental-platform 
 + 
 +description: Rental Platform Enterprise 
 + 
 +type: application 
 + 
 +version: 1.0.0 
 + 
 +appVersion: "1.0.0" 
 +</code> 
 + 
 +---- 
 + 
 +====== Étape 4-H.3 — values.yaml ====== 
 + 
 +===== Configuration globale ===== 
 + 
 +<code yaml> 
 +global: 
 + 
 +  environment: dev 
 + 
 +  domain: local.dev 
 +</code> 
 + 
 +---- 
 + 
 +===== Images ===== 
 + 
 +<code yaml> 
 +image: 
 + 
 +  api: 
 + 
 +    repository: ghcr.io/company/api 
 + 
 +    tag: latest 
 + 
 +  web: 
 + 
 +    repository: ghcr.io/company/web 
 + 
 +    tag: latest 
 +</code> 
 + 
 +---- 
 + 
 +====== Étape 4-H.4 — Namespace ====== 
 + 
 +===== Template ===== 
 + 
 +<code> 
 +templates/namespace.yaml 
 +</code> 
 + 
 +---- 
 + 
 +===== Contenu ===== 
 + 
 +<code yaml> 
 +apiVersion: v1 
 + 
 +kind: Namespace 
 + 
 +metadata: 
 + 
 +  name: rental-platform 
 +</code> 
 + 
 +---- 
 + 
 +====== Étape 4-H.5 — API Deployment ====== 
 + 
 +===== Template ===== 
 + 
 +<code> 
 +templates/api-deployment.yaml 
 +</code> 
 + 
 +---- 
 + 
 +===== Deployment ===== 
 + 
 +<code yaml> 
 +apiVersion: apps/v1 
 + 
 +kind: Deployment 
 + 
 +metadata: 
 + 
 +  name: api 
 +</code> 
 + 
 +---- 
 + 
 +===== ReplicaSet ===== 
 + 
 +<code yaml> 
 +spec: 
 + 
 +  replicas: 3 
 +</code> 
 + 
 +---- 
 + 
 +===== Container ===== 
 + 
 +<code yaml> 
 +containers: 
 + 
 +  - name: api 
 + 
 +    image: "{{ .Values.image.api.repository }}:{{ .Values.image.api.tag }}" 
 +</code> 
 + 
 +---- 
 + 
 +====== Étape 4-H.6 — API Service ====== 
 + 
 +===== Template ===== 
 + 
 +<code> 
 +templates/api-service.yaml 
 +</code> 
 + 
 +---- 
 + 
 +===== Service ===== 
 + 
 +<code yaml> 
 +kind: Service 
 + 
 +spec: 
 + 
 +  type: ClusterIP 
 + 
 +  ports: 
 + 
 +    - port: 3000 
 +</code> 
 + 
 +---- 
 + 
 +====== Étape 4-H.7 — Web Deployment ====== 
 + 
 +===== Template ===== 
 + 
 +<code> 
 +templates/web-deployment.yaml 
 +</code> 
 + 
 +---- 
 + 
 +===== Replicas ===== 
 + 
 +<code yaml> 
 +spec: 
 + 
 +  replicas: 2 
 +</code> 
 + 
 +---- 
 + 
 +===== Container ===== 
 + 
 +<code yaml> 
 +containers: 
 + 
 +  - name: web 
 +</code> 
 + 
 +---- 
 + 
 +====== Étape 4-H.8 — Web Service ====== 
 + 
 +===== Template ===== 
 + 
 +<code> 
 +templates/web-service.yaml 
 +</code> 
 + 
 +---- 
 + 
 +===== Service ===== 
 + 
 +<code yaml> 
 +type: ClusterIP 
 +</code> 
 + 
 +---- 
 + 
 +====== Étape 4-H.9 — PostgreSQL ====== 
 + 
 +===== Option 1 ===== 
 + 
 +Utiliser : 
 + 
 +<code> 
 +Bitnami PostgreSQL 
 +</code> 
 + 
 +---- 
 + 
 +===== Dépendance ===== 
 + 
 +<code yaml> 
 +dependencies: 
 + 
 +  - name: postgresql 
 + 
 +    version: 15.* 
 + 
 +    repository: https://charts.bitnami.com/bitnami 
 +</code> 
 + 
 +---- 
 + 
 +===== Valeurs ===== 
 + 
 +<code yaml> 
 +postgresql: 
 + 
 +  auth: 
 + 
 +    database: rental_platform 
 +</code> 
 + 
 +---- 
 + 
 +====== Étape 4-H.10 — Redis ====== 
 + 
 +===== Dépendance ===== 
 + 
 +<code yaml> 
 +dependencies: 
 + 
 +  - name: redis 
 + 
 +    repository: https://charts.bitnami.com/bitnami 
 +</code> 
 + 
 +---- 
 + 
 +===== Valeurs ===== 
 + 
 +<code yaml> 
 +redis: 
 + 
 +  architecture: standalone 
 +</code> 
 + 
 +---- 
 + 
 +====== Étape 4-H.11 — MinIO ====== 
 + 
 +===== Dépendance ===== 
 + 
 +<code yaml> 
 +dependencies: 
 + 
 +  - name: minio 
 + 
 +    repository: https://charts.bitnami.com/bitnami 
 +</code> 
 + 
 +---- 
 + 
 +===== Bucket ===== 
 + 
 +<code> 
 +contracts 
 + 
 +properties 
 + 
 +documents 
 + 
 +uploads 
 +</code> 
 + 
 +---- 
 + 
 +====== Étape 4-H.12 — ConfigMap ====== 
 + 
 +===== Template ===== 
 + 
 +<code> 
 +templates/configmap.yaml 
 +</code> 
 + 
 +---- 
 + 
 +===== Variables ===== 
 + 
 +<code yaml> 
 +DATABASE_HOST 
 + 
 +REDIS_HOST 
 + 
 +MINIO_ENDPOINT 
 + 
 +NODE_ENV 
 +</code> 
 + 
 +---- 
 + 
 +====== Étape 4-H.13 — Secrets ====== 
 + 
 +===== Template ===== 
 + 
 +<code> 
 +templates/secret.yaml 
 +</code> 
 + 
 +---- 
 + 
 +===== Contenu ===== 
 + 
 +<code yaml> 
 +POSTGRES_PASSWORD 
 + 
 +JWT_SECRET 
 + 
 +MINIO_SECRET_KEY 
 + 
 +STRIPE_SECRET_KEY 
 +</code> 
 + 
 +---- 
 + 
 +===== Recommandation ===== 
 + 
 +Ne jamais stocker les secrets dans Git. 
 + 
 +Utiliser : 
 + 
 +<code> 
 +External Secrets 
 + 
 +AWS Secrets Manager 
 + 
 +Azure Key Vault 
 + 
 +Hashicorp Vault 
 +</code> 
 + 
 +---- 
 + 
 +====== Étape 4-H.14 — Ingress ====== 
 + 
 +===== Template ===== 
 + 
 +<code> 
 +templates/ingress.yaml 
 +</code> 
 + 
 +---- 
 + 
 +===== Domaine ===== 
 + 
 +<code> 
 +api.domain.com 
 + 
 +app.domain.com 
 +</code> 
 + 
 +---- 
 + 
 +===== Exemple ===== 
 + 
 +<code yaml> 
 +rules: 
 + 
 +  - host: api.domain.com 
 + 
 +  - host: app.domain.com 
 +</code> 
 + 
 +---- 
 + 
 +====== Étape 4-H.15 — TLS ====== 
 + 
 +===== Cert Manager ===== 
 + 
 +<code> 
 +cert-manager 
 +</code> 
 + 
 +---- 
 + 
 +===== Issuer ===== 
 + 
 +<code> 
 +Let's Encrypt 
 +</code> 
 + 
 +---- 
 + 
 +===== HTTPS ===== 
 + 
 +<code> 
 +TLS obligatoire 
 +</code> 
 + 
 +---- 
 + 
 +====== Étape 4-H.16 — Horizontal Pod Autoscaler ====== 
 + 
 +===== API ===== 
 + 
 +<code> 
 +templates/api-hpa.yaml 
 +</code> 
 + 
 +---- 
 + 
 +===== Configuration ===== 
 + 
 +<code yaml> 
 +minReplicas:
 + 
 +maxReplicas: 20 
 + 
 +targetCPUUtilizationPercentage: 70 
 +</code> 
 + 
 +---- 
 + 
 +===== Web ===== 
 + 
 +<code yaml> 
 +minReplicas:
 + 
 +maxReplicas: 10 
 +</code> 
 + 
 +---- 
 + 
 +====== Étape 4-H.17 — Pod Disruption Budget ====== 
 + 
 +===== API ===== 
 + 
 +<code yaml> 
 +minAvailable:
 +</code> 
 + 
 +---- 
 + 
 +===== Web ===== 
 + 
 +<code yaml> 
 +minAvailable:
 +</code> 
 + 
 +---- 
 + 
 +====== Étape 4-H.18 — Resources ====== 
 + 
 +===== API ===== 
 + 
 +<code yaml> 
 +requests: 
 + 
 +  cpu: 500m 
 + 
 +  memory: 512Mi 
 + 
 +limits: 
 + 
 +  cpu: 2000m 
 + 
 +  memory: 2Gi 
 +</code> 
 + 
 +---- 
 + 
 +===== Web ===== 
 + 
 +<code yaml> 
 +requests: 
 + 
 +  cpu: 250m 
 + 
 +  memory: 256Mi 
 +</code> 
 + 
 +---- 
 + 
 +====== Étape 4-H.19 — Liveness & Readiness ====== 
 + 
 +===== API ===== 
 + 
 +<code yaml> 
 +livenessProbe: 
 + 
 +  httpGet: 
 + 
 +    path: /health 
 + 
 +    port: 3000 
 +</code> 
 + 
 +---- 
 + 
 +===== Readiness ===== 
 + 
 +<code yaml> 
 +readinessProbe: 
 + 
 +  httpGet: 
 + 
 +    path: /health 
 + 
 +    port: 3000 
 +</code> 
 + 
 +---- 
 + 
 +====== Étape 4-H.20 — Jobs Kubernetes ====== 
 + 
 +===== Migrations Prisma ===== 
 + 
 +<code> 
 +templates/job-migration.yaml 
 +</code> 
 + 
 +---- 
 + 
 +===== Commande ===== 
 + 
 +<code bash> 
 +npx prisma migrate deploy 
 +</code> 
 + 
 +---- 
 + 
 +===== Seed ===== 
 + 
 +<code bash> 
 +npx prisma db seed 
 +</code> 
 + 
 +---- 
 + 
 +====== Étape 4-H.21 — Monitoring ====== 
 + 
 +===== Prometheus ===== 
 + 
 +<code> 
 +kube-prometheus-stack 
 +</code> 
 + 
 +---- 
 + 
 +===== Grafana ===== 
 + 
 +<code> 
 +Dashboards 
 + 
 +API 
 + 
 +PostgreSQL 
 + 
 +Redis 
 + 
 +Kubernetes 
 +</code> 
 + 
 +---- 
 + 
 +====== Étape 4-H.22 — Logging ====== 
 + 
 +===== Stack ===== 
 + 
 +<code> 
 +Loki 
 + 
 +Promtail 
 + 
 +Grafana 
 +</code> 
 + 
 +---- 
 + 
 +===== Objectif ===== 
 + 
 +Centraliser : 
 + 
 +<code> 
 +API Logs 
 + 
 +Audit Logs 
 + 
 +Security Logs 
 + 
 +Business Logs 
 +</code> 
 + 
 +---- 
 + 
 +====== Étape 4-H.23 — Installation ====== 
 + 
 +===== Ajouter dépendances ===== 
 + 
 +<code bash> 
 +helm dependency update 
 +</code> 
 + 
 +---- 
 + 
 +===== Vérifier ===== 
 + 
 +<code bash> 
 +helm lint deploy/helm/rental-platform 
 +</code> 
 + 
 +---- 
 + 
 +===== Dry Run ===== 
 + 
 +<code bash> 
 +helm install rental-platform \ 
 +deploy/helm/rental-platform \ 
 +--dry-run 
 +</code> 
 + 
 +---- 
 + 
 +====== Étape 4-H.24 — Déploiement ====== 
 + 
 +===== Dev ===== 
 + 
 +<code bash> 
 +helm upgrade \ 
 +--install rental-platform \ 
 +deploy/helm/rental-platform \ 
 +-f values-dev.yaml 
 +</code> 
 + 
 +---- 
 + 
 +===== Staging ===== 
 + 
 +<code bash> 
 +helm upgrade \ 
 +--install rental-platform \ 
 +-f values-staging.yaml 
 +</code> 
 + 
 +---- 
 + 
 +===== Production ===== 
 + 
 +<code bash> 
 +helm upgrade \ 
 +--install rental-platform \ 
 +-f values-prod.yaml 
 +</code> 
 + 
 +---- 
 + 
 +====== Arborescence finale ====== 
 + 
 +<code> 
 +deploy 
 + 
 +└── helm 
 + 
 +    └── rental-platform 
 + 
 +        ├── Chart.yaml 
 + 
 +        ├── values.yaml 
 + 
 +        ├── values-dev.yaml 
 + 
 +        ├── values-staging.yaml 
 + 
 +        ├── values-prod.yaml 
 + 
 +        └── templates 
 + 
 +            ├── namespace.yaml 
 + 
 +            ├── api-deployment.yaml 
 + 
 +            ├── api-service.yaml 
 + 
 +            ├── web-deployment.yaml 
 + 
 +            ├── web-service.yaml 
 + 
 +            ├── ingress.yaml 
 + 
 +            ├── configmap.yaml 
 + 
 +            ├── secret.yaml 
 + 
 +            ├── api-hpa.yaml 
 + 
 +            └── job-migration.yaml 
 +</code> 
 + 
 +---- 
 + 
 +====== Définition de terminé ====== 
 + 
 +La Phase 4-H est terminée lorsque : 
 + 
 +<code> 
 +✓ Helm valide 
 + 
 +✓ Déploiement Kubernetes valide 
 + 
 +✓ HPA opérationnel 
 + 
 +✓ TLS opérationnel 
 + 
 +✓ Monitoring opérationnel 
 + 
 +✓ Logging centralisé 
 + 
 +✓ Rolling Update opérationnel 
 +</code> 
 + 
 +---- 
 + 
 +====== Livrables ====== 
 + 
 +<code> 
 +deploy/helm/** 
 + 
 +Chart.yaml 
 + 
 +values*.yaml 
 + 
 +templates/
 +</code> 
 + 
 +---- 
 + 
 +====== Phase 4-I — Terraform Infrastructure Enterprise ====== 
 + 
 +===== Objectif ===== 
 + 
 +Décrire l'intégralité de l'infrastructure Cloud sous forme de code. 
 + 
 +Cette phase transforme : 
 + 
 +<code> 
 +Infrastructure manuelle 
 + 
 +↓ 
 + 
 +Infrastructure as Code (IaC) 
 + 
 +↓ 
 + 
 +Terraform 
 +</code> 
 + 
 +afin d'obtenir : 
 + 
 +<code> 
 +✓ Infrastructure reproductible 
 + 
 +✓ Multi-environnements 
 + 
 +✓ Versionnée dans Git 
 + 
 +✓ Auditée 
 + 
 +✓ Déployable automatiquement 
 +</code> 
 + 
 +---- 
 + 
 +====== Plateforme cible ====== 
 + 
 +===== Cloud principal ===== 
 + 
 +<code> 
 +AWS 
 +</code> 
 + 
 +---- 
 + 
 +===== Compatibilité ===== 
 + 
 +<code> 
 +AWS 
 + 
 +Azure 
 + 
 +GCP 
 + 
 +OVH Cloud 
 +</code> 
 + 
 +---- 
 + 
 +===== Architecture cible ===== 
 + 
 +<code> 
 +Internet 
 + 
 +↓ 
 + 
 +Cloudflare 
 + 
 +↓ 
 + 
 +ALB 
 + 
 +↓ 
 + 
 +EKS 
 + 
 +├── API 
 + 
 +├── WEB 
 + 
 +├── Workers 
 + 
 +↓ 
 + 
 +RDS PostgreSQL 
 + 
 +↓ 
 + 
 +Elasticache Redis 
 + 
 +↓ 
 + 
 +S3 
 + 
 +↓ 
 + 
 +Secrets Manager 
 + 
 +↓ 
 + 
 +CloudWatch 
 +</code> 
 + 
 +---- 
 + 
 +====== Étape 4-I.1 — Structure Terraform ====== 
 + 
 +===== Créer ===== 
 + 
 +<code> 
 +deploy 
 + 
 +└── terraform 
 + 
 +    ├── environments 
 + 
 +    │   ├── dev 
 + 
 +    │   ├── staging 
 + 
 +    │   └── prod 
 + 
 +    │ 
 +    ├── modules 
 + 
 +    │   ├── network 
 + 
 +    │   ├── eks 
 + 
 +    │   ├── rds 
 + 
 +    │   ├── redis 
 + 
 +    │   ├── s3 
 + 
 +    │   ├── dns 
 + 
 +    │   ├── monitoring 
 + 
 +    │   └── security 
 + 
 +    │ 
 +    └── global 
 +</code> 
 + 
 +---- 
 + 
 +====== Étape 4-I.2 — Backend Terraform ====== 
 + 
 +===== Objectif ===== 
 + 
 +Stocker l'état Terraform. 
 + 
 +---- 
 + 
 +===== Fichier ===== 
 + 
 +<code> 
 +global/backend.tf 
 +</code> 
 + 
 +---- 
 + 
 +===== Exemple AWS ===== 
 + 
 +<code terraform> 
 +terraform { 
 + 
 +  backend "s3"
 + 
 +    bucket = "rental-platform-tf-state" 
 + 
 +    key = "prod/terraform.tfstate" 
 + 
 +    region = "eu-west-3" 
 + 
 +    encrypt = true 
 +  } 
 +
 +</code> 
 + 
 +---- 
 + 
 +====== Étape 4-I.3 — Provider AWS ====== 
 + 
 +===== provider.tf ===== 
 + 
 +<code terraform> 
 +provider "aws"
 + 
 +  region = var.aws_region 
 +
 +</code> 
 + 
 +---- 
 + 
 +===== Variables ===== 
 + 
 +<code terraform> 
 +variable "aws_region"
 + 
 +  default = "eu-west-3" 
 +
 +</code> 
 + 
 +---- 
 + 
 +====== Étape 4-I.4 — Réseau (VPC) ====== 
 + 
 +===== Module ===== 
 + 
 +<code> 
 +modules/network 
 +</code> 
 + 
 +---- 
 + 
 +===== Ressources ===== 
 + 
 +<code> 
 +VPC 
 + 
 +Public Subnets 
 + 
 +Private Subnets 
 + 
 +NAT Gateway 
 + 
 +Internet Gateway 
 + 
 +Route Tables 
 +</code> 
 + 
 +---- 
 + 
 +===== Exemple ===== 
 + 
 +<code terraform> 
 +resource "aws_vpc" "main"
 + 
 +  cidr_block = "10.0.0.0/16" 
 +
 +</code> 
 + 
 +---- 
 + 
 +====== Étape 4-I.5 — Kubernetes EKS ====== 
 + 
 +===== Module ===== 
 + 
 +<code> 
 +modules/eks 
 +</code> 
 + 
 +---- 
 + 
 +===== Cluster ===== 
 + 
 +<code terraform> 
 +resource "aws_eks_cluster" "main"
 + 
 +  name = "rental-platform" 
 +
 +</code> 
 + 
 +---- 
 + 
 +===== Node Groups ===== 
 + 
 +<code> 
 +System 
 + 
 +Application 
 + 
 +Jobs 
 +</code> 
 + 
 +---- 
 + 
 +===== Sizing ===== 
 + 
 +<code> 
 +Min 3 nodes 
 + 
 +Max 20 nodes 
 +</code> 
 + 
 +---- 
 + 
 +====== Étape 4-I.6 — PostgreSQL RDS ====== 
 + 
 +===== Module ===== 
 + 
 +<code> 
 +modules/rds 
 +</code> 
 + 
 +---- 
 + 
 +===== Ressource ===== 
 + 
 +<code terraform> 
 +resource "aws_db_instance" "postgres"
 + 
 +  engine = "postgres" 
 + 
 +  engine_version = "16" 
 +
 +</code> 
 + 
 +---- 
 + 
 +===== Configuration ===== 
 + 
 +<code> 
 +Multi-AZ 
 + 
 +Encrypted 
 + 
 +Automated Backup 
 + 
 +Point In Time Recovery 
 +</code> 
 + 
 +---- 
 + 
 +===== Taille initiale ===== 
 + 
 +<code> 
 +db.t3.medium 
 +</code> 
 + 
 +---- 
 + 
 +====== Étape 4-I.7 — Redis ====== 
 + 
 +===== Module ===== 
 + 
 +<code> 
 +modules/redis 
 +</code> 
 + 
 +---- 
 + 
 +===== Ressource ===== 
 + 
 +<code terraform> 
 +resource "aws_elasticache_replication_group" "redis"
 + 
 +  engine = "redis" 
 +
 +</code> 
 + 
 +---- 
 + 
 +===== Configuration ===== 
 + 
 +<code> 
 +Primary 
 + 
 +Replica 
 + 
 +Automatic Failover 
 +</code> 
 + 
 +---- 
 + 
 +====== Étape 4-I.8 — S3 ====== 
 + 
 +===== Module ===== 
 + 
 +<code> 
 +modules/s3 
 +</code> 
 + 
 +---- 
 + 
 +===== Buckets ===== 
 + 
 +<code> 
 +contracts 
 + 
 +properties 
 + 
 +documents 
 + 
 +backups 
 + 
 +exports 
 +</code> 
 + 
 +---- 
 + 
 +===== Exemple ===== 
 + 
 +<code terraform> 
 +resource "aws_s3_bucket" "documents"
 + 
 +  bucket = "rental-platform-documents" 
 +
 +</code> 
 + 
 +---- 
 + 
 +====== Étape 4-I.9 — DNS ====== 
 + 
 +===== Module ===== 
 + 
 +<code> 
 +modules/dns 
 +</code> 
 + 
 +---- 
 + 
 +===== Route53 ===== 
 + 
 +<code> 
 +api.domain.com 
 + 
 +app.domain.com 
 + 
 +grafana.domain.com 
 +</code> 
 + 
 +---- 
 + 
 +===== Exemple ===== 
 + 
 +<code terraform> 
 +resource "aws_route53_record" "api"
 + 
 +
 +</code> 
 + 
 +---- 
 + 
 +====== Étape 4-I.10 — Certificats SSL ====== 
 + 
 +===== ACM ===== 
 + 
 +<code terraform> 
 +resource "aws_acm_certificate" "main"
 + 
 +
 +</code> 
 + 
 +---- 
 + 
 +===== Domaines ===== 
 + 
 +<code> 
 +*.domain.com 
 +</code> 
 + 
 +---- 
 + 
 +====== Étape 4-I.11 — Load Balancer ====== 
 + 
 +===== ALB ===== 
 + 
 +<code terraform> 
 +resource "aws_lb" "main"
 + 
 +
 +</code> 
 + 
 +---- 
 + 
 +===== Routing ===== 
 + 
 +<code> 
 +/api 
 + 
 +↓ 
 + 
 +NestJS 
 + 
 +---------------- 
 + 
 +
 + 
 +↓ 
 + 
 +NextJS 
 +</code> 
 + 
 +---- 
 + 
 +====== Étape 4-I.12 — Secrets Manager ====== 
 + 
 +===== Module ===== 
 + 
 +<code> 
 +modules/security 
 +</code> 
 + 
 +---- 
 + 
 +===== Secrets ===== 
 + 
 +<code> 
 +DATABASE_URL 
 + 
 +JWT_SECRET 
 + 
 +STRIPE_SECRET 
 + 
 +MINIO_SECRET 
 + 
 +OPENAI_API_KEY 
 +</code> 
 + 
 +---- 
 + 
 +===== Exemple ===== 
 + 
 +<code terraform> 
 +resource "aws_secretsmanager_secret" "jwt"
 + 
 +
 +</code> 
 + 
 +---- 
 + 
 +====== Étape 4-I.13 — Monitoring ====== 
 + 
 +===== Module ===== 
 + 
 +<code> 
 +modules/monitoring 
 +</code> 
 + 
 +---- 
 + 
 +===== Services ===== 
 + 
 +<code> 
 +CloudWatch 
 + 
 +Prometheus 
 + 
 +Grafana 
 +</code> 
 + 
 +---- 
 + 
 +===== Dashboards ===== 
 + 
 +<code> 
 +API 
 + 
 +Database 
 + 
 +Redis 
 + 
 +Kubernetes 
 + 
 +Business KPI 
 +</code> 
 + 
 +---- 
 + 
 +====== Étape 4-I.14 — Logging ====== 
 + 
 +===== Services ===== 
 + 
 +<code> 
 +CloudWatch Logs 
 + 
 +Loki 
 +</code> 
 + 
 +---- 
 + 
 +===== Collecte ===== 
 + 
 +<code> 
 +API Logs 
 + 
 +Audit Logs 
 + 
 +Security Logs 
 + 
 +Job Logs 
 +</code> 
 + 
 +---- 
 + 
 +====== Étape 4-I.15 — Alerting ====== 
 + 
 +===== Canaux ===== 
 + 
 +<code> 
 +Email 
 + 
 +Slack 
 + 
 +Teams 
 + 
 +PagerDuty 
 +</code> 
 + 
 +---- 
 + 
 +===== Déclencheurs ===== 
 + 
 +<code> 
 +CPU > 80% 
 + 
 +Memory > 80% 
 + 
 +API Down 
 + 
 +Database Down 
 + 
 +Failed Jobs 
 +</code> 
 + 
 +---- 
 + 
 +====== Étape 4-I.16 — WAF ====== 
 + 
 +===== Protection ===== 
 + 
 +<code> 
 +AWS WAF 
 +</code> 
 + 
 +---- 
 + 
 +===== Règles ===== 
 + 
 +<code> 
 +SQL Injection 
 + 
 +XSS 
 + 
 +Rate Limit 
 + 
 +Bots 
 +</code> 
 + 
 +---- 
 + 
 +====== Étape 4-I.17 — CloudFront ====== 
 + 
 +===== CDN ===== 
 + 
 +<code terraform> 
 +resource "aws_cloudfront_distribution" "main"
 + 
 +
 +</code> 
 + 
 +---- 
 + 
 +===== Accélération ===== 
 + 
 +<code> 
 +Images 
 + 
 +Documents 
 + 
 +Frontend Assets 
 +</code> 
 + 
 +---- 
 + 
 +====== Étape 4-I.18 — Environnement DEV ====== 
 + 
 +===== Dossier ===== 
 + 
 +<code> 
 +environments/dev 
 +</code> 
 + 
 +---- 
 + 
 +===== Taille ===== 
 + 
 +<code> 
 +1 node 
 + 
 +Petite RDS 
 + 
 +Petit Redis 
 +</code> 
 + 
 +---- 
 + 
 +====== Étape 4-I.19 — Environnement STAGING ====== 
 + 
 +===== Dossier ===== 
 + 
 +<code> 
 +environments/staging 
 +</code> 
 + 
 +---- 
 + 
 +===== Taille ===== 
 + 
 +<code> 
 +2 nodes 
 + 
 +Replica DB 
 +</code> 
 + 
 +---- 
 + 
 +====== Étape 4-I.20 — Environnement PROD ====== 
 + 
 +===== Dossier ===== 
 + 
 +<code> 
 +environments/prod 
 +</code> 
 + 
 +---- 
 + 
 +===== Taille ===== 
 + 
 +<code> 
 +3+ nodes 
 + 
 +Multi-AZ 
 + 
 +Autoscaling 
 + 
 +HA 
 +</code> 
 + 
 +---- 
 + 
 +====== Étape 4-I.21 — Variables Terraform ====== 
 + 
 +===== variables.tf ===== 
 + 
 +<code terraform> 
 +variable "environment" {} 
 + 
 +variable "domain_name" {} 
 + 
 +variable "db_instance_class" {} 
 +</code> 
 + 
 +---- 
 + 
 +===== terraform.tfvars ===== 
 + 
 +<code terraform> 
 +environment = "prod" 
 + 
 +domain_name = "example.com" 
 +</code> 
 + 
 +---- 
 + 
 +====== Étape 4-I.22 — Outputs ====== 
 + 
 +===== outputs.tf ===== 
 + 
 +<code terraform> 
 +output "api_url" {} 
 + 
 +output "web_url" {} 
 + 
 +output "database_endpoint" {} 
 +</code> 
 + 
 +---- 
 + 
 +====== Étape 4-I.23 — Validation ====== 
 + 
 +===== Format ===== 
 + 
 +<code bash> 
 +terraform fmt 
 +</code> 
 + 
 +---- 
 + 
 +===== Validation ===== 
 + 
 +<code bash> 
 +terraform validate 
 +</code> 
 + 
 +---- 
 + 
 +===== Plan ===== 
 + 
 +<code bash> 
 +terraform plan 
 +</code> 
 + 
 +---- 
 + 
 +===== Apply ===== 
 + 
 +<code bash> 
 +terraform apply 
 +</code> 
 + 
 +---- 
 + 
 +====== Définition de terminé ====== 
 + 
 +La Phase 4-I est terminée lorsque : 
 + 
 +<code> 
 +✓ VPC créé 
 + 
 +✓ EKS créé 
 + 
 +✓ PostgreSQL créé 
 + 
 +✓ Redis créé 
 + 
 +✓ S3 créé 
 + 
 +✓ DNS créé 
 + 
 +✓ SSL créé 
 + 
 +✓ Monitoring créé 
 + 
 +✓ Terraform validé 
 +</code> 
 + 
 +---- 
 + 
 +====== Livrables ====== 
 + 
 +<code> 
 +deploy/terraform 
 + 
 +modules/network 
 + 
 +modules/eks 
 + 
 +modules/rds 
 + 
 +modules/redis 
 + 
 +modules/s3 
 + 
 +modules/dns 
 + 
 +modules/security 
 + 
 +modules/monitoring 
 +</code> 
 + 
 +---- 
 + 
 +====== Phase 4-J — Monorepo Final Enterprise ====== 
 + 
 +===== Objectif ===== 
 + 
 +Assembler l'ensemble des livrables produits depuis la Phase 1 jusqu'à la Phase 4-I dans un dépôt unique, cohérent et exécutable. 
 + 
 +À l'issue de cette phase : 
 + 
 +<code> 
 +✓ Monorepo finalisé 
 + 
 +✓ Backend NestJS 
 + 
 +✓ Frontend NextJS 
 + 
 +✓ Prisma 
 + 
 +✓ PostgreSQL 
 + 
 +✓ Redis 
 + 
 +✓ Contracts 
 + 
 +✓ SDK 
 + 
 +✓ Docker 
 + 
 +✓ Helm 
 + 
 +✓ Terraform 
 + 
 +✓ GitHub Actions 
 + 
 +✓ Documentation 
 +</code> 
 + 
 +Le projet devient alors : 
 + 
 +<code> 
 +Release Enterprise 4.0 
 +</code> 
 + 
 +prête pour le développement métier continu. 
 + 
 +---- 
 + 
 +====== Vision finale ====== 
 + 
 +===== Dépôt Git ===== 
 + 
 +<code> 
 +rental-platform/ 
 +</code> 
 + 
 +---- 
 + 
 +===== Architecture ===== 
 + 
 +<code> 
 +rental-platform 
 + 
 +├── apps 
 + 
 +├── libs 
 + 
 +├── deploy 
 + 
 +├── docker 
 + 
 +├── docs 
 + 
 +├── scripts 
 + 
 +├── .github 
 + 
 +├── package.json 
 + 
 +├── nx.json 
 + 
 +├── tsconfig.base.json 
 + 
 +└── README.md 
 +</code> 
 + 
 +---- 
 + 
 +====== Étape 4-J.1 — Applications ====== 
 + 
 +===== Structure ===== 
 + 
 +<code> 
 +apps 
 + 
 +├── api 
 + 
 +└── web 
 +</code> 
 + 
 +---- 
 + 
 +===== API ===== 
 + 
 +<code> 
 +apps/api 
 + 
 +├── prisma 
 + 
 +├── src 
 + 
 +├── test 
 + 
 +├── Dockerfile 
 + 
 +└── project.json 
 +</code> 
 + 
 +---- 
 + 
 +===== WEB ===== 
 + 
 +<code> 
 +apps/web 
 + 
 +├── src 
 + 
 +├── public 
 + 
 +├── Dockerfile 
 + 
 +└── project.json 
 +</code> 
 + 
 +---- 
 + 
 +====== Étape 4-J.2 — Librairies ====== 
 + 
 +===== Structure ===== 
 + 
 +<code> 
 +libs 
 + 
 +├── contracts 
 + 
 +├── sdk 
 + 
 +├── ui 
 + 
 +├── config 
 + 
 +├── shared 
 + 
 +├── testing 
 + 
 +└── eslint-config 
 +</code> 
 + 
 +---- 
 + 
 +===== contracts ===== 
 + 
 +<code> 
 +DTO 
 + 
 +Types 
 + 
 +Enums
  
 Zod Schemas Zod Schemas
 +</code>
  
-OpenAPI Models+----
  
-Validation Classes+===== sdk ===== 
 + 
 +<code> 
 +OpenAPI Client 
 + 
 +React Query Hooks 
 + 
 +API Wrappers
 </code> </code>
  
-à partir du Prisma Schema consolidé.+---- 
 + 
 +===== ui ===== 
 + 
 +<code> 
 +Design System 
 + 
 +Layout Components 
 + 
 +Business Components 
 +</code> 
 + 
 +---- 
 + 
 +====== Étape 4-J.3 — Infrastructure ====== 
 + 
 +===== Structure ===== 
 + 
 +<code> 
 +deploy 
 + 
 +├── helm 
 + 
 +└── terraform 
 +</code> 
 + 
 +---- 
 + 
 +===== Helm ===== 
 + 
 +<code> 
 +deploy/helm/rental-platform 
 +</code> 
 + 
 +---- 
 + 
 +===== Terraform ===== 
 + 
 +<code> 
 +deploy/terraform 
 +</code> 
 + 
 +---- 
 + 
 +====== Étape 4-J.4 — Docker ====== 
 + 
 +===== Structure ===== 
 + 
 +<code> 
 +docker 
 + 
 +├── nginx 
 + 
 +├── postgres 
 + 
 +├── redis 
 + 
 +├── minio 
 + 
 +├── prometheus 
 + 
 +└── grafana 
 +</code> 
 + 
 +---- 
 + 
 +===== Fichier principal ===== 
 + 
 +<code> 
 +docker-compose.yml 
 +</code> 
 + 
 +---- 
 + 
 +====== Étape 4-J.5 — GitHub ====== 
 + 
 +===== Structure ===== 
 + 
 +<code> 
 +.github 
 + 
 +├── workflows 
 + 
 +└── dependabot.yml 
 +</code> 
 + 
 +---- 
 + 
 +===== Workflows ===== 
 + 
 +<code> 
 +ci.yml 
 + 
 +quality.yml 
 + 
 +security.yml 
 + 
 +docker.yml 
 + 
 +release.yml 
 + 
 +deploy.yml 
 +</code> 
 + 
 +---- 
 + 
 +====== Étape 4-J.6 — Scripts ====== 
 + 
 +===== Structure ===== 
 + 
 +<code> 
 +scripts 
 + 
 +├── bootstrap.sh 
 + 
 +├── migrate.sh 
 + 
 +├── seed.sh 
 + 
 +├── reset-db.sh 
 + 
 +├── generate-sdk.sh 
 + 
 +├── generate-openapi.sh 
 + 
 +└── release.sh 
 +</code> 
 + 
 +---- 
 + 
 +===== bootstrap.sh ===== 
 + 
 +Objectif : 
 + 
 +<code> 
 +Installation complète développeur 
 +</code> 
 + 
 +---- 
 + 
 +===== Exemple ===== 
 + 
 +<code bash> 
 +#!/bin/bash 
 + 
 +npm install 
 + 
 +docker compose up -d 
 + 
 +npx prisma migrate dev 
 + 
 +npx prisma db seed 
 + 
 +nx run-many --target=build 
 +</code> 
 + 
 +---- 
 + 
 +====== Étape 4-J.7 — Documentation ====== 
 + 
 +===== Structure ===== 
 + 
 +<code> 
 +docs 
 + 
 +├── architecture 
 + 
 +├── api 
 + 
 +├── deployment 
 + 
 +├── development 
 + 
 +├── operations 
 + 
 +└── decisions 
 +</code> 
 + 
 +---- 
 + 
 +===== Architecture ===== 
 + 
 +<code> 
 +DDD 
 + 
 +CQRS 
 + 
 +Hexagonal 
 + 
 +Multi-Tenant 
 + 
 +RBAC 
 +</code> 
 + 
 +---- 
 + 
 +===== API ===== 
 + 
 +<code> 
 +OpenAPI 
 + 
 +Swagger 
 + 
 +SDK 
 +</code> 
 + 
 +---- 
 + 
 +====== Étape 4-J.8 — README principal ====== 
 + 
 +===== Sections ===== 
 + 
 +<code> 
 +Présentation 
 + 
 +Architecture 
 + 
 +Prérequis 
 + 
 +Installation 
 + 
 +Développement 
 + 
 +Tests 
 + 
 +Déploiement 
 + 
 +Contribution 
 +</code> 
 + 
 +---- 
 + 
 +===== Démarrage rapide ===== 
 + 
 +<code bash> 
 +git clone ... 
 + 
 +cd rental-platform 
 + 
 +npm install 
 + 
 +docker compose up -d 
 + 
 +npx prisma migrate dev 
 + 
 +npx prisma db seed 
 + 
 +nx serve api 
 + 
 +nx serve web 
 +</code> 
 + 
 +---- 
 + 
 +====== Étape 4-J.9 — Qualité globale ====== 
 + 
 +===== Vérifications ===== 
 + 
 +<code bash> 
 +nx graph 
 +</code> 
 + 
 +---- 
 + 
 +===== Lint ===== 
 + 
 +<code bash> 
 +nx run-many \ 
 +--target=lint \ 
 +--all 
 +</code> 
 + 
 +---- 
 + 
 +===== Tests ===== 
 + 
 +<code bash> 
 +nx run-many \ 
 +--target=test \ 
 +--all 
 +</code> 
 + 
 +---- 
 + 
 +===== Build ===== 
 + 
 +<code bash> 
 +nx run-many \ 
 +--target=build \ 
 +--all 
 +</code> 
 + 
 +---- 
 + 
 +====== Étape 4-J.10 — Génération OpenAPI ====== 
 + 
 +===== Commande ===== 
 + 
 +<code bash> 
 +npm run swagger:generate 
 +</code> 
 + 
 +---- 
 + 
 +===== Livrable ===== 
 + 
 +<code> 
 +docs/api/openapi.yaml 
 +</code> 
 + 
 +---- 
 + 
 +====== Étape 4-J.11 — Génération SDK ====== 
 + 
 +===== Commande ===== 
 + 
 +<code bash> 
 +npm run sdk:generate 
 +</code> 
 + 
 +---- 
 + 
 +===== Livrable ===== 
 + 
 +<code> 
 +libs/sdk 
 +</code> 
 + 
 +---- 
 + 
 +====== Étape 4-J.12 — Release Enterprise ====== 
 + 
 +===== Version ===== 
 + 
 +<code> 
 +v1.0.0 
 +</code> 
 + 
 +---- 
 + 
 +===== Tag Git ===== 
 + 
 +<code bash> 
 +git tag v1.0.0 
 + 
 +git push origin v1.0.0 
 +</code> 
 + 
 +---- 
 + 
 +===== Déclenche ===== 
 + 
 +<code> 
 +Release GitHub 
 + 
 +Build Docker 
 + 
 +Publication Registry 
 + 
 +Artifacts 
 +</code> 
 + 
 +---- 
 + 
 +====== Arborescence finale ====== 
 + 
 +<code> 
 +rental-platform 
 + 
 +├── apps 
 +│ 
 +│   ├── api 
 +│   └── web 
 +│ 
 +├── libs 
 +│ 
 +│   ├── contracts 
 +│   ├── sdk 
 +│   ├── ui 
 +│   ├── config 
 +│   └── shared 
 +│ 
 +├── deploy 
 +│ 
 +│   ├── helm 
 +│   └── terraform 
 +│ 
 +├── docker 
 +│ 
 +├── docs 
 +│ 
 +├── scripts 
 +│ 
 +├── .github 
 +│ 
 +├── docker-compose.yml 
 +│ 
 +├── package.json 
 +│ 
 +├── nx.json 
 +│ 
 +└── README.md 
 +</code> 
 + 
 +---- 
 + 
 +====== Définition de terminé ====== 
 + 
 +La Phase 4-J est terminée lorsque : 
 + 
 +<code> 
 +✓ Monorepo compilable 
 + 
 +✓ API compilable 
 + 
 +✓ Frontend compilable 
 + 
 +✓ Prisma opérationnel 
 + 
 +✓ Docker opérationnel 
 + 
 +✓ CI opérationnelle 
 + 
 +✓ Helm valide 
 + 
 +✓ Terraform valide 
 + 
 +✓ OpenAPI généré 
 + 
 +✓ SDK généré 
 + 
 +✓ Documentation présente 
 +</code> 
 + 
 +---- 
 + 
 +====== Livrables finaux ====== 
 + 
 +<code> 
 +Repository Enterprise complet 
 + 
 +Backend NestJS 
 + 
 +Frontend NextJS 
 + 
 +Prisma 
 + 
 +Contracts 
 + 
 +SDK 
 + 
 +Docker 
 + 
 +GitHub Actions 
 + 
 +Helm 
 + 
 +Terraform 
 + 
 +Documentation 
 +</code> 
 + 
 +---- 
 + 
 +====== Fin du cycle d'architecture ====== 
 + 
 +Le projet dispose désormais de : 
 + 
 +<code> 
 +Architecture fonctionnelle 
 + 
 +Architecture technique 
 + 
 +Contrat API 
 + 
 +Modèle de données 
 + 
 +Infrastructure 
 + 
 +CI/CD 
 + 
 +Industrialisation 
 +</code> 
 + 
 +La suite logique n'est plus la conception. 
 + 
 +La suite logique est : 
 + 
 +===== Sprint Développement 1 ===== 
 + 
 +Implémentation réelle du domaine Authentification 
 + 
 +<code> 
 +Register 
 + 
 +Login 
 + 
 +JWT 
 + 
 +Refresh Token 
 + 
 +RBAC 
 + 
 +Swagger 
 + 
 +Tests 
 +</code> 
 + 
 +sur la base du monorepo désormais entièrement structuré et prêt à exécuter du code métier. 
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