====== Phase 1 — Fondation du dépôt (pas à pas complet) ====== ===== Objectif ===== À la fin de cette phase, un développeur doit pouvoir exécuter : docker compose up et obtenir : ✓ PostgreSQL ✓ Redis ✓ MinIO ✓ API NestJS ✓ Frontend NextJS ✓ Swagger ✓ Prisma Studio sans aucun développement métier. --- ====== Étape 1 — Préparer le poste de développement ====== ===== Installer les prérequis ===== Vérifier : node -v npm -v git --version docker --version docker compose version Versions recommandées : NodeJS 22 LTS npm 10+ Docker 27+ Git 2.45+ --- ====== Étape 2 — Création du repository ====== ===== Créer le dossier ===== mkdir rental-platform cd rental-platform --- ===== Initialiser Git ===== git init --- ===== Créer le dépôt GitHub ===== Exemple : rental-platform Puis : git remote add origin git@github.com:organisation/rental-platform.git --- ====== Étape 3 — Initialiser le monorepo ====== ===== Créer package.json ===== npm init -y --- ===== Installer Turborepo ===== npm install -D turbo --- ===== Créer turbo.json ===== { "$schema": "https://turbo.build/schema.json", "tasks": { "build": { "dependsOn": ["^build"] }, "lint": {}, "test": {}, "dev": { "cache": false } } } --- ====== Étape 4 — Créer l'arborescence ====== mkdir apps mkdir packages mkdir prisma mkdir infrastructure mkdir docs mkdir .github --- ===== Créer les sous-dossiers ===== mkdir apps/api mkdir apps/web mkdir apps/admin-portal mkdir apps/owner-portal mkdir packages/ui mkdir packages/sdk mkdir packages/shared mkdir packages/eslint-config mkdir packages/tsconfig --- ====== Étape 5 — Initialiser NextJS ====== ===== Front Office ===== npx create-next-app@latest apps/web \ --typescript \ --tailwind \ --eslint \ --app \ --src-dir --- ===== Back Office ===== npx create-next-app@latest apps/admin-portal \ --typescript \ --tailwind \ --eslint \ --app \ --src-dir --- ===== Extranet propriétaire ===== npx create-next-app@latest apps/owner-portal \ --typescript \ --tailwind \ --eslint \ --app \ --src-dir --- ====== Étape 6 — Initialiser NestJS ====== ===== Installer Nest CLI ===== npm install -g @nestjs/cli --- ===== Générer l'API ===== nest new apps/api Choisir : npm --- ===== Tester ===== cd apps/api npm run start:dev Swagger sera ajouté ultérieurement. --- ====== Étape 7 — Configurer les Workspaces ====== ===== Modifier package.json racine ===== { "private": true, "workspaces": [ "apps/*", "packages/*" ] } --- ===== Installer les dépendances ===== npm install --- ====== Étape 8 — Installer Prisma ====== ===== Dépendances ===== npm install prisma @prisma/client --- ===== Initialiser Prisma ===== npx prisma init --- ===== Vérifier ===== Le fichier doit exister : prisma/schema.prisma --- ====== Étape 9 — Préparer Docker ====== ===== Créer le dossier ===== mkdir infrastructure/docker --- ===== Créer docker-compose.yml ===== services: postgres: ``` image: postgres:17 environment: POSTGRES_USER: postgres POSTGRES_PASSWORD: postgres POSTGRES_DB: rental_platform ports: - "5432:5432" ``` redis: ``` image: redis:7 ports: - "6379:6379" ``` minio: ``` image: minio/minio command: server /data environment: MINIO_ROOT_USER: minio MINIO_ROOT_PASSWORD: minio123 ports: - "9000:9000" - "9001:9001" ``` --- ===== Lancer ===== docker compose up -d --- ===== Vérifier ===== docker ps Doit afficher : postgres redis minio --- ====== Étape 10 — Variables d'environnement ====== ===== Créer .env ===== DATABASE_URL="postgresql://postgres:postgres@localhost:5432/rental_platform" REDIS_URL="redis://localhost:6379" MINIO_ENDPOINT="localhost" MINIO_PORT=9000 MINIO_ACCESS_KEY=minio MINIO_SECRET_KEY=minio123 --- ====== Étape 11 — Premier modèle Prisma ====== ===== Modifier schema.prisma ===== datasource db { provider = "postgresql" url = env("DATABASE_URL") } generator client { provider = "prisma-client-js" } model User { id String @id @default(uuid()) email String @unique createdAt DateTime @default(now()) } --- En version prisma 7, il faut supprimer la ligne url dans le fichier du schema --- datasource db { provider = "postgresql" } generator client { provider = "prisma-client-js" } model User { id String @id @default(uuid()) email String @unique createdAt DateTime @default(now()) } --- et adapter le fichier de prisma.config.ts --- import path from 'node:path' import { defineConfig } from 'prisma/config' import { PrismaPg } from '@prisma/adapter-pg' export default defineConfig({ earlyAccess: true, schema: path.join('prisma', 'schema.prisma'), migrate: { adapter() { return new PrismaPg({ connectionString: process.env.DATABASE_URL! }) }, url: process.env.DATABASE_URL!, // 👈 this is what's missing }, }) ===== Générer migration ===== npx prisma migrate dev --name init --- ===== Générer client ===== npx prisma generate --- ====== Étape 12 — Prisma Studio ====== ===== Lancer ===== npx prisma studio --- ===== Vérifier ===== Naviguer : http://localhost:5555 --- ====== Étape 13 — Installer Swagger NestJS ====== ===== Dépendances ===== cd apps/api npm install @nestjs/swagger swagger-ui-express --- ===== Modifier main.ts ===== const config = new DocumentBuilder() .setTitle('Rental Platform API') .setVersion('1.0') .build(); const document = SwaggerModule.createDocument( app, config, ); SwaggerModule.setup( 'swagger', app, document, ); --- ===== Tester ===== http://localhost:3000/swagger --- ====== Étape 14 — GitHub Actions ====== ===== Créer ===== .github/workflows/ci.yml --- ===== Contenu ===== name: CI on: push: jobs: build: ``` runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: actions/setup-node@v4 - run: npm install - run: npm run build ``` --- ====== Étape 15 — Premier commit ====== git add . git commit -m "chore: initialize platform foundation" git push -u origin main --- ====== Critères de validation ====== La phase 1 est terminée lorsque : ✓ Monorepo opérationnel ✓ Turborepo opérationnel ✓ NextJS opérationnel ✓ NestJS opérationnel ✓ PostgreSQL opérationnel ✓ Redis opérationnel ✓ MinIO opérationnel ✓ Prisma opérationnel ✓ Swagger opérationnel ✓ Docker Compose opérationnel ✓ GitHub Actions opérationnel --- ====== Livrable obtenu ====== À ce stade, le projet dispose d'un socle exécutable complet permettant d'entamer immédiatement : Sprint 1 Authentification Register Login JWT RBAC User Profile