2026-05-25 18:38:53 +02:00
2026-05-24 19:02:46 +02:00
2026-05-24 07:30:05 +02:00
2026-05-25 18:03:02 +02:00
2026-05-24 07:30:05 +02:00
2026-05-24 07:30:05 +02:00
2026-05-25 07:26:00 +02:00
2026-05-24 10:07:47 +02:00
2026-05-24 09:27:43 +02:00
2026-05-24 09:27:43 +02:00
2026-05-24 10:07:47 +02:00
2026-05-24 10:07:47 +02:00
2026-05-24 09:27:43 +02:00
2026-05-24 07:30:05 +02:00

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

git clone https://git.goutailler-olivier.com/<org>/bonsai-api.git
cd bonsai-api

2. Démarrer la base de données

docker compose up db -d

PostgreSQL démarre sur localhost:5432, base bonsai, utilisateur bonsai, mot de passe bonsai.

3. Lancer l'API

./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 :

docker compose up --build

Pour arrêter et supprimer les conteneurs :

docker compose down

Pour supprimer également le volume PostgreSQL (réinitialise la base) :

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
Authorization: Bearer <token>

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

./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
Description
No description provided
Readme 110 KiB
Languages
Java 91.9%
Bru 6.9%
Dockerfile 1.2%