Files
Infra/Installation-Developpement.md
T
2026-05-25 07:16:42 +02:00

151 lines
3.9 KiB
Markdown

# Installation Développement
Cette page décrit comment démarrer l'environnement de développement local pour le projet **Bonsai API**.
## Prérequis
| Outil | Version minimale |
|---|---|
| Java JDK | 25 |
| Docker + Docker Compose | 24+ |
| Gradle | 8+ (wrapper inclus dans le dépôt) |
---
## Cloner le dépôt
```bash
git clone https://git.goutailler-olivier.com/bonsai/bonsai-api.git
cd bonsai-api
```
---
## Option A — Hot-reload avec Docker Compose (recommandé)
Cette option monte les sources depuis l'hôte dans le conteneur. Gradle détecte les changements et relance automatiquement l'application.
```bash
docker compose -f docker-compose.dev.yml up --build
```
- L'API est disponible sur `http://localhost:8080`
- PostgreSQL est disponible sur `localhost:5432`
- Le cache Gradle est conservé dans un volume dédié (`gradle_home`) : le premier build télécharge les dépendances, les suivants sont rapides
Pour arrêter et tout supprimer (y compris les volumes) :
```bash
docker compose -f docker-compose.dev.yml down -v
```
---
## Option B — Gradle en local + PostgreSQL Docker
Démarrer uniquement la base de données :
```bash
docker compose up db -d
```
Lancer l'API avec le wrapper Gradle :
```bash
./gradlew bootRun
```
Flyway applique automatiquement la migration `V1__init.sql` au premier démarrage.
---
## Variables d'environnement
En développement, les valeurs par défaut sont utilisées automatiquement (définies dans `src/main/resources/application.yml`). Aucun `.env` n'est nécessaire.
| Variable | Valeur locale | Description |
|---|---|---|
| `DATASOURCE_URL` | `jdbc:postgresql://localhost:5432/bonsai` | URL JDBC |
| `DATASOURCE_USERNAME` | `bonsai` | Utilisateur PostgreSQL |
| `DATASOURCE_PASSWORD` | `bonsai` | Mot de passe PostgreSQL |
| `KEYCLOAK_JWKS_URI` | `https://auth.goutailler-olivier.com/realms/bonsai/protocol/openid-connect/certs` | Endpoint JWKS |
| `CORS_ALLOWED_ORIGIN_PROD` | `https://bonsai.goutailler-olivier.com` | Origine CORS de prod |
L'origine `http://localhost:4200` est toujours autorisée en CORS (front Angular en dev).
---
## Documentation de l'API
Swagger UI est disponible à l'adresse suivante une fois l'API démarrée :
```
http://localhost:8080/swagger-ui.html
```
La spécification OpenAPI (JSON) est accessible sur :
```
http://localhost:8080/v3/api-docs
```
---
## Lancer les tests
```bash
./gradlew test
```
Le rapport HTML est généré dans `build/reports/tests/test/index.html`.
---
## Structure du projet
```
src/main/java/fr/bonsai/api/
├── domain/model/ # Entités métier (sans dépendance Spring)
├── application/
│ ├── port/in/ # Interfaces des use cases
│ ├── port/out/ # Interface du repository
│ └── usecase/ # Logique métier (IssueService)
├── adapter/
│ ├── in/web/ # Controllers REST et DTOs
│ └── out/persistence/ # Entités JPA et adaptateur repository
└── config/ # Configuration Spring (Security, CORS, Beans)
```
---
## Sécurité
Toutes les routes nécessitent un token JWT Bearer valide émis par Keycloak :
- **Realm** : `bonsai`
- **Client** : `bonsai-webapp`
- **Issuer** : `https://auth.goutailler-olivier.com/realms/bonsai`
Pour tester sans Keycloak local, utiliser l'instance de production comme fournisseur JWKS (valeur par défaut).
```http
Authorization: Bearer <token>
```
---
## Endpoints disponibles
| Méthode | Route | Description |
|---|---|---|
| `GET` | `/issues` | Liste toutes les issues |
| `POST` | `/issues` | Crée une issue |
| `PUT` | `/issues/{id}` | Remplace une issue |
| `DELETE` | `/issues/{id}` | Supprime une issue (204) |
---
## CI/CD
Le pipeline Gitea Actions (`.gitea/workflows/`) construit l'image Docker et la pousse sur le registre interne à chaque push sur `main`. Le runner `ubuntu-latest` est fourni par le conteneur `act_runner` de la stack Gitea.