====== 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