À 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.
—
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+
—
mkdir rental-platform cd rental-platform
—
git init
—
Exemple :
rental-platform
Puis :
git remote add origin git@github.com:organisation/rental-platform.git
—
npm init -y
—
npm install -D turbo
—
{
"$schema": "https://turbo.build/schema.json",
"tasks": {
"build": {
"dependsOn": ["^build"]
},
"lint": {},
"test": {},
"dev": {
"cache": false
}
}
}
—
mkdir apps mkdir packages mkdir prisma mkdir infrastructure mkdir docs mkdir .github
—
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
—
npx create-next-app@latest apps/web \ --typescript \ --tailwind \ --eslint \ --app \ --src-dir
—
npx create-next-app@latest apps/admin-portal \ --typescript \ --tailwind \ --eslint \ --app \ --src-dir
—
npx create-next-app@latest apps/owner-portal \ --typescript \ --tailwind \ --eslint \ --app \ --src-dir
—
npm install -g @nestjs/cli
—
nest new apps/api
Choisir :
npm
—
cd apps/api npm run start:dev
Swagger sera ajouté ultérieurement.
—
{
"private": true,
"workspaces": [
"apps/*",
"packages/*"
]
}
—
npm install
—
npm install prisma @prisma/client
—
npx prisma init
—
Le fichier doit exister :
prisma/schema.prisma
—
mkdir infrastructure/docker
—
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" ```
—
docker compose up -d
—
docker ps
Doit afficher :
postgres redis minio
—
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
—
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
},
})
npx prisma migrate dev --name init
—
npx prisma generate
—
npx prisma studio
—
Naviguer :
http://localhost:5555
—
cd apps/api npm install @nestjs/swagger swagger-ui-express
—
const config = new DocumentBuilder()
.setTitle('Rental Platform API')
.setVersion('1.0')
.build();
const document = SwaggerModule.createDocument(
app,
config,
);
SwaggerModule.setup(
'swagger',
app,
document,
);
—
http://localhost:3000/swagger
—
.github/workflows/ci.yml
—
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 ```
—
git add . git commit -m "chore: initialize platform foundation" git push -u origin main
—
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
—
À 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