Table des matières

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 
DokuWiki Appliance - Powered by TurnKey Linux