Setup local

Guide d'installation et de configuration de l'environnement de developpement local pour Place API.

Setup local

Pre-requis

OutilVersion minimaleUtilisation
.NET SDK10.0Build et execution de l'API
Docker20+PostgreSQL, Testcontainers, Mailpit
Node.js18+Husky (pre-commit hooks), commitlint
Git2.30+Controle de version

Verifier les pre-requis

dotnet --version    # 10.0.x
docker --version    # Docker version 20+
node --version      # v18+
git --version       # git version 2.30+

Clone et restauration

1. Cloner le depot

git clone <url-du-depot> place-api
cd place-api

2. Restaurer les outils .NET

dotnet tool restore

3. Installer les dependances Node.js (Husky)

npm install

Cela installe Husky et configure les hooks pre-commit pour enforcer les conventional commits.

4. Restaurer les packages NuGet

dotnet restore

5. Build de verification

dotnet build

Configuration de l'environnement

Variables d'environnement

Copier le fichier .env.example en .env et remplir les valeurs :

cp .env.example .env

Variables principales

VariableDescriptionExemple
POSTGRES_USERUtilisateur PostgreSQLplace_admin
POSTGRES_PASSWORDMot de passe PostgreSQLstrong_password
DATABASE_CONNECTION_STRINGConnexion Identity DBServer=postgres;Port=5432;...
AUDIT_CONNECTION_STRINGConnexion Audit DBServer=postgres;Port=5432;...
HANGFIRE_CONNECTION_STRINGConnexion Hangfire DBServer=postgres;Port=5432;...
JWT_PRIVATE_KEY_BASE64Cle privee RSA en base64<rsa-key-base64>
JWT_ISSUERIssuer JWThttps://your-domain.com
JWT_AUDIENCEAudience JWTplace-api
REFRESH_TOKEN_PEPPERSecret pour le hachage des refresh tokens<random-secret>

Configuration applicative

Le fichier src/Api/appsettings.json contient la configuration par defaut :

{
  "PostgresOptions": {
    "ConnectionString": "Server=localhost;Port=5432;Database=identity;User Id=postgres;Password=postgres"
  },
  "JwtOptions": {
    "Issuer": "http://localhost:5000",
    "Audience": "booking-api",
    "AccessTokenLifetimeMinutes": 60,
    "RefreshTokenLifetimeMinutes": 43200
  },
  "PasswordPolicy": {
    "MinLength": 8,
    "HistoryCount": 5,
    "PasswordExpiryDays": 90,
    "EnforcePasswordExpiry": true
  },
  "SessionOptions": {
    "MaxActiveSessions": 5,
    "EnforceSessionBinding": true
  }
}

Base de donnees

Option 1 : Avec Aspire (recommande)

Aspire orchestre automatiquement PostgreSQL, Mailpit et l'API :

dotnet run --project src/Aspire/src/AppHost/AppHost.csproj

Aspire demarre :

  • PostgreSQL 17 avec 5 bases de donnees (identity, audit, messaging, hangfire, persist-message)
  • Mailpit pour la capture d'emails locaux (UI sur http://localhost:8025)
  • Place API sur http://localhost:5000 et https://localhost:5001
  • Place Admin Web sur http://localhost:5175 (via Bun)

Le dashboard Aspire est accessible pour monitorer tous les services.

Option 2 : PostgreSQL via Docker

Demarrer PostgreSQL manuellement :

docker run -d \
  --name place-postgres \
  -e POSTGRES_USER=postgres \
  -e POSTGRES_PASSWORD=postgres \
  -p 5432:5432 \
  postgres:17

Creer les bases de donnees :

docker exec -it place-postgres psql -U postgres -c "CREATE DATABASE identity;"
docker exec -it place-postgres psql -U postgres -c "CREATE DATABASE audit;"
docker exec -it place-postgres psql -U postgres -c "CREATE DATABASE messaging;"
docker exec -it place-postgres psql -U postgres -c "CREATE DATABASE hangfire;"
docker exec -it place-postgres psql -U postgres -c "CREATE DATABASE persist_message;"

Appliquer les migrations

Les migrations sont appliquees automatiquement au demarrage de l'application. Pour les appliquer manuellement :

# Identity
dotnet ef database update \
  --project src/Modules/Identity/Identity \
  --startup-project src/Api \
  --context IdentityContext

# Audit
dotnet ef database update \
  --project src/Modules/Audit/Audit \
  --startup-project src/Api \
  --context AuditContext

# Messaging (si migrations presentes)
dotnet ef database update \
  --project src/Modules/Messaging/Messaging \
  --startup-project src/Api \
  --context MessagingContext

Donnees de seed

Le module Identity seed automatiquement :

  • Un utilisateur administrateur (configure dans IdentityDataSeeder)
  • Des roles par defaut
  • Des donnees de test (en environnement Development)

Execution de l'API

Avec Aspire (recommande)

dotnet run --project src/Aspire/src/AppHost/AppHost.csproj

Directement

dotnet run --project src/Api/Api.csproj

L'API est disponible sur :

  • HTTP : http://localhost:5000
  • HTTPS : https://localhost:5001

URLs utiles

URLDescription
http://localhost:5000/swaggerSwagger UI
http://localhost:5000/scalar/v1Scalar API documentation
http://localhost:5000/hangfireDashboard Hangfire
http://localhost:5000/healthHealth check endpoint
http://localhost:5000/aliveLiveness probe
http://localhost:8025Mailpit UI (avec Aspire)

Mode debug

En mode developpement, l'endpoint GET /debug/endpoints liste toutes les routes enregistrees.


Generer une cle JWT RSA

Pour le developpement local, generer une paire de cles RSA :

# Generer la cle privee
openssl genpkey -algorithm RSA -out private.pem -pkeyopt rsa_keygen_bits:2048

# Encoder en base64
cat private.pem | base64 | tr -d '\n'

Placer la valeur base64 dans JwtOptions:PrivateKeyBase64 ou la variable d'environnement JWT_PRIVATE_KEY_BASE64.


Configuration email (dev)

Avec Aspire

Aspire demarre automatiquement Mailpit, un serveur SMTP de capture. Tous les emails envoyes par l'application sont interceptes et consultables sur http://localhost:8025.

Sans Aspire

Configurer un serveur SMTP local (ex: Mailpit standalone) :

docker run -d \
  --name mailpit \
  -p 1025:1025 \
  -p 8025:8025 \
  axllent/mailpit

La configuration par defaut dans appsettings.json pointe vers localhost:1025.


REST Client

Le fichier booking.rest a la racine du projet contient des requetes pre-construites pour VS Code REST Client, facilitant le test des endpoints.