api issue
This commit is contained in:
@@ -0,0 +1,130 @@
|
||||
# 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/<org>/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 <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
|
||||
|
||||
```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)
|
||||
```
|
||||
Reference in New Issue
Block a user