# 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 ``` --- ## 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.