# Bonsai API API REST de gestion d'issues (type Jira léger), construite avec Spring Boot 3.5 / Java 25 en Clean Architecture. --- ## Prérequis | Outil | Version minimale | |---|---| | Java (JDK) | 25 | | Docker + Docker Compose | 24+ | | Gradle (wrapper inclus) | 8+ | --- ## Démarrage en développement ### 1. Cloner le dépôt ```bash git clone https://git.goutailler-olivier.com//bonsai-api.git cd bonsai-api ``` ### 2. Démarrer la base de données ```bash docker compose up db -d ``` PostgreSQL démarre sur `localhost:5432`, base `bonsai`, utilisateur `bonsai`, mot de passe `bonsai`. ### 3. Lancer l'API ```bash ./gradlew bootRun ``` Flyway applique automatiquement la migration `V1__init.sql` au premier démarrage. L'API est disponible sur `http://localhost:8080`. --- ## Démarrage complet via Docker Compose Pour lancer l'API et la base de données en une seule commande : ```bash docker compose up --build ``` Pour arrêter et supprimer les conteneurs : ```bash docker compose down ``` Pour supprimer également le volume PostgreSQL (réinitialise la base) : ```bash docker compose down -v ``` --- ## Variables d'environnement Les valeurs par défaut conviennent pour le développement local. En production, surcharger les variables suivantes : | Variable | Défaut | Description | |---|---|---| | `DATASOURCE_URL` | `jdbc:postgresql://localhost:5432/bonsai` | URL JDBC PostgreSQL | | `DATASOURCE_USERNAME` | `bonsai` | Utilisateur base de données | | `DATASOURCE_PASSWORD` | `bonsai` | Mot de passe base de données | | `KEYCLOAK_JWKS_URI` | `https://auth.goutailler-olivier.com/realms/bonsai/protocol/openid-connect/certs` | Endpoint JWKS Keycloak | | `CORS_ALLOWED_ORIGIN_PROD` | `https://bonsai.goutailler-olivier.com` | Origine CORS de production | --- ## 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` ```http Authorization: Bearer ``` --- ## Endpoints | Méthode | Route | Description | |---|---|---| | `GET` | `/issues` | Liste toutes les issues | | `POST` | `/issues` | Crée une issue | | `PUT` | `/issues/{id}` | Remplace une issue complète | | `DELETE` | `/issues/{id}` | Supprime une issue (204) | --- ## 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) ```