# 📜 API Contracts - PtitsPas Ce dossier contient les **contrats d'API** qui dĂ©finissent les interfaces entre les diffĂ©rentes couches de l'application. ## 🎯 Objectif Garantir que **Frontend**, **Backend** et **Database** respectent des contrats stricts, permettant de les rendre **interchangeables** sans casser l'application. --- ## 📁 Structure ``` api-contracts/ ├── frontend-backend/ # Contrat Frontend ↔ Backend (HTTP REST) │ ├── openapi.yaml # SpĂ©cification OpenAPI 3.0 (source de vĂ©ritĂ©) │ └── generated/ # Code gĂ©nĂ©rĂ© automatiquement │ ├── dart/ # Client API pour Flutter │ └── typescript/ # Types pour NestJS │ └── backend-database/ # Contrat Backend ↔ Database (ORM/SQL) ├── schema.prisma # SchĂ©ma Prisma (ou TypeORM entities) └── migrations/ # Migrations SQL versionnĂ©es ``` --- ## 🔄 Workflow de GĂ©nĂ©ration ### 1. Frontend ↔ Backend **Source de vĂ©ritĂ© :** `frontend-backend/openapi.yaml` **GĂ©nĂ©ration du client Dart (Flutter) :** ```bash cd api-contracts/frontend-backend docker run --rm -v "${PWD}:/local" openapitools/openapi-generator-cli generate \ -i /local/openapi.yaml \ -g dart-dio \ -o /local/generated/dart ``` **GĂ©nĂ©ration des types TypeScript (NestJS) :** ```bash cd api-contracts/frontend-backend npx openapi-typescript openapi.yaml --output generated/typescript/api.types.ts ``` --- ### 2. Backend ↔ Database **Source de vĂ©ritĂ© :** `backend-database/schema.prisma` **GĂ©nĂ©ration du client Prisma :** ```bash cd api-contracts/backend-database npx prisma generate ``` **GĂ©nĂ©ration des migrations SQL :** ```bash cd api-contracts/backend-database npx prisma migrate dev --name ``` --- ## ✅ Avantages - **Frontend interchangeable** : React, Vue, Angular → il suffit de rĂ©gĂ©nĂ©rer le client API - **Backend interchangeable** : Python, Go, Java → tant qu'il respecte `openapi.yaml` - **Database read-only en prod** : User PostgreSQL `app_user` (pas de DDL) - **CohĂ©rence garantie** : Types gĂ©nĂ©rĂ©s = pas d'erreur de typage - **Documentation auto** : OpenAPI = documentation interactive (Swagger UI) --- ## 📚 Documentation - [OpenAPI 3.0 Spec](https://swagger.io/specification/) - [Prisma Schema](https://www.prisma.io/docs/concepts/components/prisma-schema) - [openapi-generator](https://openapi-generator.tech/) - [openapi-typescript](https://github.com/drwpow/openapi-typescript)