Compare commits

..

8 Commits

Author SHA1 Message Date
6cdf4a345e docs: Vault path final — applications/afterwork-server/{db,oidc} (rename cosmétique fait 2026-04-24)
Some checks failed
CI/CD Lions Pipeline / Build + Push + Deploy (push) Failing after 6s
2026-04-24 23:54:05 +00:00
2d0b1db015 fix(quarkus-327): add quarkus.hibernate-orm.mapping.format.global=ignore
Some checks failed
CI/CD Lions Pipeline / Build + Push + Deploy (push) Failing after 10s
Quarkus 3.27.x enforce une séparation entre le FormatMapper REST (quarkus.jackson.*) et celui utilisé pour les colonnes JSON en BDD. Sans 'format.global=ignore', Quarkus bloque le démarrage si write-dates-as-timestamps=false (ce qui est notre cas).

Solution recommandée par la migration guide Quarkus : opt-in au futur défaut 'ignore' → BuiltinFormatMapperBehaviour ne bloque plus le démarrage.
2026-04-24 23:38:16 +00:00
951d9f0435 chore(quarkus-327): upgrade Quarkus 3.16.3 → 3.27.3 LTS + Java 17 → 21
Some checks failed
CI/CD Lions Pipeline / Build + Push + Deploy (push) Failing after 10s
Aligne afterwork-server-impl-quarkus sur le reste de l'écosystème LionsDev (tous les autres backends sont sur 3.27.3 LTS / Java 21 depuis 2026-04-24).

- pom.xml : quarkus.platform.version 3.16.3 → 3.27.3
- maven.compiler.release 17 → 21
- Build OK dès la première compilation (pas de breaking changes API)
- README : mise à jour stack + historique
2026-04-24 22:58:53 +00:00
f54f959fdc docs: cleanup REALTIME_DEV.md + application*.properties stale mic-after-work refs
Some checks failed
CI/CD Lions Pipeline / Build + Push + Deploy (push) Failing after 7s
2026-04-24 19:45:43 +00:00
82b927fdd1 docs: cleanup stale mic-after-work refs in kubernetes manifests + docker/README.md
Some checks failed
CI/CD Lions Pipeline / Build + Push + Deploy (push) Failing after 9s
2026-04-24 19:43:12 +00:00
da2e763428 docs: complete README rewrite + cleanup stale mic-after-work refs in .env.example, DEPLOYMENT.md, QUICK_DEPLOY.md, DATABASE_CONFIG.md, AUDIT — delete backend_log.txt
Some checks failed
CI/CD Lions Pipeline / Build + Push + Deploy (push) Failing after 9s
2026-04-24 19:38:29 +00:00
770176092d rename: artifactId mic-after-work-server-impl-quarkus-main → afterwork-server-impl-quarkus
Some checks failed
CI/CD Lions Pipeline / Build + Push + Deploy (push) Failing after 9s
- pom.xml artifactId
- application.properties + application-prod.properties : DB_NAME default afterwork
- src/main/docker/Dockerfile.* : refs images
- Dockerfile racine ajouté (lionsctl pipeline : ubi8/openjdk-21:1.21, UID 1001)
- Cohérence avec renaming Gitea repo lionsdev/afterwork-server-impl-quarkus
2026-04-24 18:51:19 +00:00
dahoud
2dd20ee068 ci: ajouter workflow Gitea Actions
Some checks failed
CI/CD Lions Pipeline / Build + Push + Deploy (push) Failing after 5s
2026-04-22 16:03:01 +00:00
22 changed files with 313 additions and 9040 deletions

View File

@@ -26,7 +26,7 @@ DB_PASSWORD=skyfile
# === Production Lions (via Kubernetes Secrets) === # === Production Lions (via Kubernetes Secrets) ===
# DB_HOST=postgresql-service.postgresql.svc.cluster.local # DB_HOST=postgresql-service.postgresql.svc.cluster.local
# DB_PORT=5432 # DB_PORT=5432
# DB_NAME=mic-after-work-server-impl-quarkus-main # DB_NAME=afterwork-server-impl-quarkus
# DB_USERNAME=lionsuser # DB_USERNAME=lionsuser
# DB_PASSWORD=<voir-kubernetes-secrets> # DB_PASSWORD=<voir-kubernetes-secrets>
@@ -115,7 +115,7 @@ QUARKUS_SMALLRYE_HEALTH_UI_ENABLE=true
# ============================================ # ============================================
# Pour déployer avec lionsctl: # Pour déployer avec lionsctl:
# lionsctl pipeline \ # lionsctl pipeline \
# -u https://git.lions.dev/lionsdev/mic-after-work-server-impl-quarkus-main \ # -u https://git.lions.dev/lionsdev/afterwork-server-impl-quarkus \
# -b develop \ # -b develop \
# -j 17 \ # -j 17 \
# -e production \ # -e production \

58
.gitea/workflows/ci.yml Normal file
View File

@@ -0,0 +1,58 @@
name: CI/CD Lions Pipeline
on:
push:
branches: [main, develop]
workflow_dispatch:
inputs:
environment:
description: 'Environnement cible'
required: true
default: 'production'
type: choice
options:
- dev
- staging
- production
env:
LIONS_CLUSTER: k1
LIONS_JAVA_VERSION: '17' # override si app en Java 21
jobs:
pipeline:
name: Build + Push + Deploy
runs-on: ubuntu-latest
timeout-minutes: 30
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Setup lionsctl
run: |
# Suppose lionsctl installé sur le runner (via image custom)
# Alternative : curl -L https://git.lions.dev/lionsdev/lionsctl/releases/download/latest/lionsctl -o /usr/local/bin/lionsctl
lionsctl --version
- name: Pipeline deploy
env:
LIONS_REGISTRY_USERNAME: ${{ secrets.LIONS_REGISTRY_USERNAME }}
LIONS_REGISTRY_PASSWORD: ${{ secrets.LIONS_REGISTRY_PASSWORD }}
LIONS_GIT_USERNAME: lionsctl-bot
LIONS_GIT_PASSWORD: ${{ secrets.LIONS_GIT_PASSWORD }}
LIONS_GIT_ACCESS_TOKEN: ${{ secrets.LIONS_GIT_ACCESS_TOKEN }}
SMTP_HOST: ${{ secrets.SMTP_HOST }}
SMTP_USERNAME: ${{ secrets.SMTP_USERNAME }}
SMTP_PASSWORD: ${{ secrets.SMTP_PASSWORD }}
SMTP_FROM: ${{ secrets.SMTP_FROM }}
run: |
ENV="${{ github.event.inputs.environment || 'production' }}"
lionsctl pipeline \
-u ${{ gitea.server_url }}/${{ gitea.repository }} \
-b ${{ gitea.ref_name }} \
-j ${{ env.LIONS_JAVA_VERSION }} \
-e "$ENV" \
-c ${{ env.LIONS_CLUSTER }} \
-p prod \
-m admin@lions.dev

View File

@@ -1,7 +1,7 @@
# Audit intégral Frontend (Flutter) & Backend (Quarkus) # Audit intégral Frontend (Flutter) & Backend (Quarkus)
**Date** : 4 février 2026 **Date** : 4 février 2026
**Périmètre** : `afterwork` (Flutter), `mic-after-work-server-impl-quarkus-main` (Quarkus) **Périmètre** : `afterwork` (Flutter), `afterwork-server-impl-quarkus` (Quarkus)
**Références** : bonnes pratiques Quarkus REST, Flutter clean architecture, REST/JWT, WebSocket, Kafka (recherches web et documentation officielle). **Références** : bonnes pratiques Quarkus REST, Flutter clean architecture, REST/JWT, WebSocket, Kafka (recherches web et documentation officielle).
--- ---

View File

@@ -97,7 +97,7 @@ Remplacez `<org>` par votre organisation Git (ex. `lionsdev`, `developer`) et `<
```bash ```bash
# Déploiement en dev (clone + build + image + déploiement K8s) # Déploiement en dev (clone + build + image + déploiement K8s)
lionsctl pipeline \ lionsctl pipeline \
-u https://git.lions.dev/<org>/mic-after-work-server-impl-quarkus-main \ -u https://git.lions.dev/<org>/afterwork-server-impl-quarkus \
-b develop \ -b develop \
-j 17 \ -j 17 \
-e dev \ -e dev \
@@ -106,7 +106,7 @@ lionsctl pipeline \
# Déploiement en production sur le cluster k2 # Déploiement en production sur le cluster k2
lionsctl pipeline \ lionsctl pipeline \
-u https://git.lions.dev/<org>/mic-after-work-server-impl-quarkus-main \ -u https://git.lions.dev/<org>/afterwork-server-impl-quarkus \
-b main \ -b main \
-j 17 \ -j 17 \
-e production \ -e production \
@@ -116,7 +116,7 @@ lionsctl pipeline \
# Avec déploiement Helm (charts générés automatiquement) # Avec déploiement Helm (charts générés automatiquement)
lionsctl pipeline \ lionsctl pipeline \
-u https://git.lions.dev/<org>/mic-after-work-server-impl-quarkus-main \ -u https://git.lions.dev/<org>/afterwork-server-impl-quarkus \
-b develop \ -b develop \
-j 17 \ -j 17 \
-e dev \ -e dev \
@@ -129,7 +129,7 @@ lionsctl pipeline \
| Option | Description | Exemple | | Option | Description | Exemple |
|--------|-------------|---------| |--------|-------------|---------|
| `-u`, `--url` | URL du repo Git (obligatoire) | `https://git.lions.dev/.../mic-after-work-server-impl-quarkus-main` | | `-u`, `--url` | URL du repo Git (obligatoire) | `https://git.lions.dev/.../afterwork-server-impl-quarkus` |
| `-b`, `--branch` | Branche à déployer | `develop`, `main` | | `-b`, `--branch` | Branche à déployer | `develop`, `main` |
| `-j`, `--java-version` | Version Java (821) | `17` | | `-j`, `--java-version` | Version Java (821) | `17` |
| `-e`, `--environment` | Environnement (dev / staging / production) | `dev`, `production` | | `-e`, `--environment` | Environnement (dev / staging / production) | `dev`, `production` |
@@ -141,11 +141,11 @@ lionsctl pipeline \
### Vérification du déploiement ### Vérification du déploiement
```bash ```bash
# Pods et statut (nom d'app dérivé du repo, ex. mic-after-work-server-impl-quarkus-main) # Pods et statut (nom d'app dérivé du repo, ex. afterwork-server-impl-quarkus)
kubectl get pods -n applications -l app=mic-after-work-server-impl-quarkus-main kubectl get pods -n applications -l app=afterwork-server-impl-quarkus
# Logs en temps réel # Logs en temps réel
kubectl logs -n applications -l app=mic-after-work-server-impl-quarkus-main -f kubectl logs -n applications -l app=afterwork-server-impl-quarkus -f
# Health check # Health check
curl https://api.lions.dev/afterwork/q/health/ready curl https://api.lions.dev/afterwork/q/health/ready
@@ -307,7 +307,7 @@ spec:
### Étape 1 : Préparation ### Étape 1 : Préparation
```bash ```bash
cd C:\Users\dadyo\PersonalProjects\mic-after-work-server-impl-quarkus-main cd C:\Users\dadyo\PersonalProjects/lions-workspace/afterwork/afterwork-server-impl-quarkus
# Build Maven # Build Maven
mvn clean package -DskipTests mvn clean package -DskipTests
@@ -361,7 +361,7 @@ kubectl apply -f kubernetes/afterwork-service.yaml
kubectl apply -f kubernetes/afterwork-ingress.yaml kubectl apply -f kubernetes/afterwork-ingress.yaml
# Ou via lionsctl pipeline (clone + build + déploiement) # Ou via lionsctl pipeline (clone + build + déploiement)
lionsctl pipeline -u https://git.lions.dev/<org>/mic-after-work-server-impl-quarkus-main -b develop -j 17 -e dev -c k1 -m <email> lionsctl pipeline -u https://git.lions.dev/<org>/afterwork-server-impl-quarkus -b develop -j 17 -e dev -c k1 -m <email>
``` ```
### Étape 5 : Vérification ### Étape 5 : Vérification

21
Dockerfile Normal file
View File

@@ -0,0 +1,21 @@
# Dockerfile for afterwork-server-impl-quarkus
# Used by lionsctl pipeline. Expects `mvn clean package -Pprod` to have produced target/quarkus-app/ (fast-jar).
FROM registry.access.redhat.com/ubi8/openjdk-21:1.21
ENV LANGUAGE='en_US:en'
COPY --chown=1001:1001 target/quarkus-app/lib/ /deployments/lib/
COPY --chown=1001:1001 target/quarkus-app/*.jar /deployments/
COPY --chown=1001:1001 target/quarkus-app/app/ /deployments/app/
COPY --chown=1001:1001 target/quarkus-app/quarkus/ /deployments/quarkus/
USER 1001
EXPOSE 8080
ENV JAVA_OPTS="-Dquarkus.http.host=0.0.0.0 -Djava.util.logging.manager=org.jboss.logmanager.LogManager"
HEALTHCHECK --interval=30s --timeout=3s --start-period=30s --retries=3 \
CMD curl -f http://localhost:8080/q/health/live || exit 1
ENTRYPOINT [ "java", "-jar", "/deployments/quarkus-run.jar" ]

View File

@@ -5,7 +5,7 @@
### Option 1 : Déploiement Automatique via Script PowerShell ### Option 1 : Déploiement Automatique via Script PowerShell
```powershell ```powershell
cd C:\Users\dadyo\PersonalProjects\mic-after-work-server-impl-quarkus-main cd C:\Users\dadyo\PersonalProjects/lions-workspace/afterwork/afterwork-server-impl-quarkus
# Déploiement complet (build + push + deploy) # Déploiement complet (build + push + deploy)
.\scripts\deploy.ps1 -Action all -Version 1.0.0 .\scripts\deploy.ps1 -Action all -Version 1.0.0
@@ -22,7 +22,7 @@ cd C:\Users\dadyo\PersonalProjects\mic-after-work-server-impl-quarkus-main
### Option 2 : Déploiement Manuel ### Option 2 : Déploiement Manuel
```powershell ```powershell
cd C:\Users\dadyo\PersonalProjects\mic-after-work-server-impl-quarkus-main cd C:\Users\dadyo\PersonalProjects/lions-workspace/afterwork/afterwork-server-impl-quarkus
# 1. Build Maven (tests non-bloquants) # 1. Build Maven (tests non-bloquants)
mvn clean package -DskipTests mvn clean package -DskipTests
@@ -51,12 +51,12 @@ kubectl logs -n applications -l app=afterwork-api -f
### Option 3 : Déploiement via lionsctl pipeline ### Option 3 : Déploiement via lionsctl pipeline
```bash ```bash
cd C:\Users\dadyo\PersonalProjects\mic-after-work-server-impl-quarkus-main cd C:\Users\dadyo\PersonalProjects/lions-workspace/afterwork/afterwork-server-impl-quarkus
# Le pipeline clone le repo, build Maven, construit limage Docker et déploie sur K8s. Remplacer <org> et <email>. # Le pipeline clone le repo, build Maven, construit limage Docker et déploie sur K8s. Remplacer <org> et <email>.
# Déploiement # Déploiement
lionsctl pipeline -u https://git.lions.dev/<org>/mic-after-work-server-impl-quarkus-main -b develop -j 17 -e dev -c k1 -m <email> lionsctl pipeline -u https://git.lions.dev/<org>/afterwork-server-impl-quarkus -b develop -j 17 -e dev -c k1 -m <email>
``` ```
--- ---

262
README.md
View File

@@ -1,113 +1,185 @@
# mic-after-work-server-impl-quarkus-main # afterwork-server-impl-quarkus
This project uses Quarkus, the Supersonic Subatomic Java Framework. > Backend REST — application sociale AfterWork (événements, chat temps réel, social feed, stories)
If you want to learn more about Quarkus, please visit its website: <https://quarkus.io/>. ## Dépôt Git
## Running the application in dev mode `https://git.lions.dev/lionsdev/afterwork-server-impl-quarkus`
You can run your application in dev mode that enables live coding using:
```shell script
./mvnw compile quarkus:dev
```
> **_NOTE:_** Quarkus now ships with a Dev UI, which is available in dev mode only at <http://localhost:8080/q/dev/>.
## Packaging and running the application
The application can be packaged using:
```shell script
./mvnw package
```
It produces the `quarkus-run.jar` file in the `target/quarkus-app/` directory.
Be aware that its not an _über-jar_ as the dependencies are copied into the `target/quarkus-app/lib/` directory.
The application is now runnable using `java -jar target/quarkus-app/quarkus-run.jar`.
If you want to build an _über-jar_, execute the following command:
```shell script
./mvnw package -Dquarkus.package.jar.type=uber-jar
```
The application, packaged as an _über-jar_, is now runnable using `java -jar target/*-runner.jar`.
## Creating a native executable
You can create a native executable using:
```shell script
./mvnw package -Dnative
```
Or, if you don't have GraalVM installed, you can run the native executable build in a container using:
```shell script
./mvnw package -Dnative -Dquarkus.native.container-build=true
```
You can then execute your native executable with: `./target/mic-after-work-server-impl-quarkus-main-1.0.0-SNAPSHOT-runner`
If you want to learn more about building native executables, please consult <https://quarkus.io/guides/maven-tooling>.
## Fonctionnalités métier (AfterWork)
### Notifications
- **Service** : `NotificationService` — création, lecture, pagination, marquage lu/suppression des notifications en base.
- **Déclencheurs** : Notifications créées automatiquement pour les demandes damitié (destinataire), les likes/commentaires sur les posts (auteur du post), les nouvelles notes détablissement (manager).
- **API** : `GET/POST /notifications/user/{userId}`, pagination, marquer lu, supprimer. Voir [SECURITY.md](SECURITY.md) pour lusage en production (userId issu de lauth).
### Jobs planifiés (Quarkus Scheduler)
- **Stories** : Désactivation des stories expirées (cron : toutes les heures).
- **Tokens** : Suppression des tokens de réinitialisation de mot de passe expirés (tous les jours à 3h).
- **Abonnements** : Expiration des abonnements établissements et désactivation des établissements non payés (toutes les heures).
- **Rappels événements** : Notifications en base pour les participants (J-1 et H-1), exécution toutes les 15 minutes.
- **Avertissement abonnement** : Envoi demails J-3 avant expiration aux managers (tous les jours à 9h).
Configuration : `quarkus.scheduler.enabled=true` (désactivé en test via `%test.quarkus.scheduler.enabled=false`).
### Emails transactionnels
- **EmailService** : Réinitialisation mot de passe, bienvenue, confirmation de paiement Wave, rappel événement, avertissement expiration abonnement, confirmation de réservation, échec de paiement Wave.
- Configuration SMTP via variables denvironnement (`MAILER_HOST`, `MAILER_USERNAME`, `MAILER_PASSWORD`, etc.) ; en test le mailer peut être en mode mock.
### Paiement Wave (établissements)
- Initiation de paiement (abonnement mensuel/annuel), webhook `POST /webhooks/wave` pour `payment.completed`, `payment.refunded`, `payment.failed`, etc.
- Vérification optionnelle de la signature du webhook (header `X-Wave-Signature`, HMAC-SHA256) si `wave.webhook.secret` est configuré. Voir [SECURITY.md](SECURITY.md).
--- ---
## Related Guides ## Responsabilités
- Hibernate ORM ([guide](https://quarkus.io/guides/hibernate-orm)): Define your persistent model with Hibernate ORM and Jakarta Persistence - API REST sécurisée (JWT HS256 + OIDC Keycloak)
- SmallRye OpenAPI ([guide](https://quarkus.io/guides/openapi-swaggerui)): Document your REST APIs with OpenAPI - comes with Swagger UI - Gestion des utilisateurs, amis, événements, cotisations
- RESTEasy Classic ([guide](https://quarkus.io/guides/resteasy)): REST endpoint framework implementing Jakarta REST and more - Chat temps réel (WebSocket)
- Logging JSON ([guide](https://quarkus.io/guides/logging#json-logging)): Add JSON formatter for console logging - Notifications push temps réel
- JDBC Driver - PostgreSQL ([guide](https://quarkus.io/guides/datasource)): Connect to the PostgreSQL database via JDBC - Social feed (posts, likes, commentaires, stories)
- Upload médias (images/vidéos)
- Emailing transactionnel (via Brevo SMTP)
## Sécurité et déploiement ---
- **Sécurité** : Voir [SECURITY.md](SECURITY.md) (auth, webhook Wave, secrets, validation). ## API principales
- **Docker** : Voir [docker/README.md](docker/README.md) pour lancer lapp et les dépendances (PostgreSQL, etc.).
## Provided Code | Domaine | Path |
|---------|------|
| Auth | `/api/auth/*` |
| Utilisateurs | `/api/users/*` |
| Amis | `/api/friends/*` |
| Événements | `/api/events/*` |
| Posts / Stories | `/api/posts/*`, `/api/stories/*` |
| Chat | `/api/chat/*` + WebSocket `/ws/chat/{userId}` |
| Notifications | WebSocket `/ws/notifications/{userId}` |
| Health | `/q/health` |
| Swagger | `/q/swagger-ui` |
### Hibernate ORM ---
Create your first JPA entity ## Stack
[Related guide section...](https://quarkus.io/guides/hibernate-orm) | Composant | Technologie |
|-----------|-------------|
| Framework | Quarkus 3.27.3 LTS |
| API | Quarkus REST (RESTEasy Reactive) + Jackson |
| Auth | JWT HS256 + `quarkus-oidc` (Keycloak) |
| ORM | Hibernate ORM Panache |
| Base de données | PostgreSQL 15 |
| Migrations | Flyway |
| Messaging | Kafka (event streaming) |
| Emailing | Brevo SMTP (via `quarkus-mailer`) |
| Temps réel | WebSockets-Next |
| Templates | Qute |
| Docs | SmallRye OpenAPI (Swagger UI) |
---
## Développement local
### RESTEasy JAX-RS ### Prérequis
Easily start your RESTful Web Services - Java 21 LTS
- Maven 3.9+
- PostgreSQL sur `localhost:5432` (DB : `afterwork`)
- Keycloak sur `localhost:8180` (realm à configurer)
[Related guide section...](https://quarkus.io/guides/getting-started#the-jax-rs-resources) ### Démarrage
```bash
mvn quarkus:dev
```
Swagger UI : `http://localhost:8080/q/swagger-ui`
### Configuration dev
Variables d'environnement recommandées (voir `.env.example`) :
```bash
DB_NAME=afterwork
DB_USERNAME=lionsuser
DB_PASSWORD=...
JWT_SECRET=dev-jwt-secret-min-32-chars
```
---
## Configuration production
Fichier : `src/main/resources/application-prod.properties`
Toutes les valeurs sensibles via variables d'env ou secrets K8s. Principales :
| Variable | Description |
|----------|-------------|
| `DB_HOST` / `DB_PORT` / `DB_NAME` | PostgreSQL (défaut DB `afterwork`) |
| `QUARKUS_DATASOURCE_USERNAME` / `QUARKUS_DATASOURCE_PASSWORD` | Injectés via secret `afterwork-db-eso` (ESO Vault) |
| `QUARKUS_OIDC_*` | Config Keycloak (via `afterwork-oidc-eso`) |
| `JWT_SECRET` | Clé HS256 ≥32 caractères |
| `STORAGE_PATH` | Chemin stockage uploads (défaut `/app/storage` en prod) |
| Brevo SMTP | `QUARKUS_MAILER_*` via `brevo-smtp-eso` |
---
## Build
```bash
# Build standard (dev)
mvn clean package -DskipTests
# Build production (fast-jar)
mvn clean package -Pprod -DskipTests
```
Produit `target/quarkus-app/` (fast-jar, runnable via `java -jar target/quarkus-app/quarkus-run.jar`).
---
## Déploiement (lionsctl)
```bash
lionsctl pipeline \
-u https://git.lions.dev/lionsdev/afterwork-server-impl-quarkus \
-b develop -j 21 -e production -c k1 -p prod
```
> La branche prod est `develop` (pas `main`).
**Pipeline** : clone → `mvn package -P prod``docker build -f Dockerfile` (racine, fast-jar, `ubi8/openjdk-21:1.21`, UID 1001) → push `registry.lions.dev``kubectl apply` → health check
**URL prod** : `https://api.lions.dev/afterwork`
**Health prod** : `https://api.lions.dev/afterwork/q/health`
**Pré-requis infrastructure** (migration Helm → lionsctl pipeline, fait 2026-04-24) :
- Secret K8s `afterwork-server-impl-quarkus-db-secret` (clés `QUARKUS_DATASOURCE_USERNAME/PASSWORD`)
- ExternalSecrets `afterwork-db-eso` + `afterwork-oidc-eso` (ESO Vault, path `applications/afterwork-server/*`)
- DB PostgreSQL `afterwork` (renommée depuis `mic-after-work-server-impl-quarkus-main`)
- Override `QUARKUS_DATASOURCE_JDBC_URL=jdbc:postgresql://postgresql-service.postgresql.svc.cluster.local:5432/afterwork` sur le deployment
- Deployment Helm existant supprimé au préalable (selector immutable)
- `envFrom: [afterwork-db-eso, afterwork-oidc-eso]` patché post-deploy
### Helm (alternative GitOps)
Repo values dédié : [`afterwork-server-impl-quarkus-k1`](https://git.lions.dev/lionsdev/afterwork-server-impl-quarkus-k1) (Chart `lions-app 1.0.3`).
---
## Tests
```bash
mvn test # unitaires
mvn verify # avec intégration
```
---
## Structure
```
src/main/
├── java/com/lions/dev/
│ ├── entity/ # Entités JPA (User, Event, Post, Story, Message, ...)
│ ├── repository/ # Repositories Panache
│ ├── service/ # Services métier
│ ├── resource/ # Resources JAX-RS
│ ├── websocket/ # Endpoints WebSocket (chat, notifications)
│ ├── security/ # JWT + OIDC filters
│ └── mapper/ # MapStruct mappers
└── resources/
├── db/migration/ # Scripts Flyway
├── application.properties
└── application-prod.properties
```
---
## Historique récent
- **2026-04-24** — Refactor `mic-after-work-server-impl-quarkus-main``afterwork-server-impl-quarkus` (Gitea repo, artifactId, DB `afterwork`, ingress path `/afterwork`, ExternalSecrets ESO). Déployé en prod via lionsctl pipeline.
- **2026-04-24** — Upgrade Quarkus **3.16.3 → 3.27.3 LTS** + Java **17 → 21** (cohérence avec les autres backends de l'écosystème).
---
## Licence
Propriétaire — Lions Dev © 2026

View File

@@ -57,7 +57,7 @@ docker run -d --name kafka-dev -p 9092:9092 \
## 2. Démarrer le backend Quarkus (profil dev) ## 2. Démarrer le backend Quarkus (profil dev)
```bash ```bash
cd mic-after-work-server-impl-quarkus-main cd afterwork-server-impl-quarkus
mvn quarkus:dev mvn quarkus:dev
``` ```

File diff suppressed because it is too large Load Diff

View File

@@ -44,7 +44,7 @@ Lapplication se connecte à PostgreSQL sur lhôte (`host.docker.internal:5
CREATE USER afterwork WITH PASSWORD 'changeme'; CREATE USER afterwork WITH PASSWORD 'changeme';
CREATE DATABASE afterwork_db OWNER afterwork; CREATE DATABASE afterwork_db OWNER afterwork;
``` ```
- Ou utiliser **vos** identifiants via un fichier **`.env` à la racine du projet** (mic-after-work-server-impl-quarkus-main) — Docker Compose le charge quand vous lancez depuis cette racine : - Ou utiliser **vos** identifiants via un fichier **`.env` à la racine du projet** (afterwork-server-impl-quarkus) — Docker Compose le charge quand vous lancez depuis cette racine :
```bash ```bash
# Contenu de .env à la racine du projet # Contenu de .env à la racine du projet
DB_USERNAME=monuser DB_USERNAME=monuser

View File

@@ -1,10 +1,10 @@
apiVersion: apps/v1 apiVersion: apps/v1
kind: Deployment kind: Deployment
metadata: metadata:
name: mic-after-work-server-impl-quarkus-main name: afterwork-server-impl-quarkus
namespace: applications namespace: applications
labels: labels:
app: mic-after-work-server-impl-quarkus-main app: afterwork-server-impl-quarkus
version: "1.0.0" version: "1.0.0"
environment: production environment: production
component: application component: application
@@ -22,11 +22,11 @@ spec:
maxUnavailable: 0 maxUnavailable: 0
selector: selector:
matchLabels: matchLabels:
app: mic-after-work-server-impl-quarkus-main app: afterwork-server-impl-quarkus
template: template:
metadata: metadata:
labels: labels:
app: mic-after-work-server-impl-quarkus-main app: afterwork-server-impl-quarkus
version: "1.0.0" version: "1.0.0"
component: application component: application
project: lions-infrastructure-2025 project: lions-infrastructure-2025
@@ -45,8 +45,8 @@ spec:
type: RuntimeDefault type: RuntimeDefault
terminationGracePeriodSeconds: 30 terminationGracePeriodSeconds: 30
containers: containers:
- name: mic-after-work-server-impl-quarkus-main - name: afterwork-server-impl-quarkus
image: registry.lions.dev/lionsdev/mic-after-work-server-impl-quarkus-main:latest image: registry.lions.dev/lionsdev/afterwork-server-impl-quarkus:latest
imagePullPolicy: Always imagePullPolicy: Always
ports: ports:
- containerPort: 8080 - containerPort: 8080

View File

@@ -1,10 +1,10 @@
apiVersion: networking.k8s.io/v1 apiVersion: networking.k8s.io/v1
kind: Ingress kind: Ingress
metadata: metadata:
name: mic-after-work-server-impl-quarkus-main-ingress name: afterwork-server-impl-quarkus-ingress
namespace: applications namespace: applications
labels: labels:
app: mic-after-work-server-impl-quarkus-main app: afterwork-server-impl-quarkus
annotations: annotations:
# SSL/TLS # SSL/TLS
cert-manager.io/cluster-issuer: "letsencrypt-prod" cert-manager.io/cluster-issuer: "letsencrypt-prod"
@@ -27,7 +27,7 @@ metadata:
# WebSocket support # WebSocket support
nginx.ingress.kubernetes.io/proxy-http-version: "1.1" nginx.ingress.kubernetes.io/proxy-http-version: "1.1"
nginx.ingress.kubernetes.io/websocket-services: "mic-after-work-server-impl-quarkus-main-service" nginx.ingress.kubernetes.io/websocket-services: "afterwork-server-impl-quarkus-service"
# Security headers and CORS # Security headers and CORS
nginx.ingress.kubernetes.io/enable-cors: "true" nginx.ingress.kubernetes.io/enable-cors: "true"
@@ -63,6 +63,6 @@ spec:
pathType: Prefix pathType: Prefix
backend: backend:
service: service:
name: mic-after-work-server-impl-quarkus-main-service name: afterwork-server-impl-quarkus-service
port: port:
number: 80 number: 80

View File

@@ -18,13 +18,13 @@ metadata:
name: afterwork-api-monitor name: afterwork-api-monitor
namespace: monitoring namespace: monitoring
labels: labels:
app: mic-after-work-server-impl-quarkus-main app: afterwork-server-impl-quarkus
release: prometheus release: prometheus
project: lions-infrastructure-2025 project: lions-infrastructure-2025
spec: spec:
selector: selector:
matchLabels: matchLabels:
app: mic-after-work-server-impl-quarkus-main app: afterwork-server-impl-quarkus
namespaceSelector: namespaceSelector:
matchNames: matchNames:
- applications - applications
@@ -45,7 +45,7 @@ metadata:
name: afterwork-api-alerts name: afterwork-api-alerts
namespace: monitoring namespace: monitoring
labels: labels:
app: mic-after-work-server-impl-quarkus-main app: afterwork-server-impl-quarkus
release: prometheus release: prometheus
project: lions-infrastructure-2025 project: lions-infrastructure-2025
spec: spec:
@@ -68,12 +68,12 @@ spec:
expr: | expr: |
sum(rate(http_server_requests_seconds_count{ sum(rate(http_server_requests_seconds_count{
kubernetes_namespace="applications", kubernetes_namespace="applications",
app="mic-after-work-server-impl-quarkus-main", app="afterwork-server-impl-quarkus",
status=~"5.." status=~"5.."
}[5m])) / }[5m])) /
sum(rate(http_server_requests_seconds_count{ sum(rate(http_server_requests_seconds_count{
kubernetes_namespace="applications", kubernetes_namespace="applications",
app="mic-after-work-server-impl-quarkus-main" app="afterwork-server-impl-quarkus"
}[5m])) > 0.05 }[5m])) > 0.05
for: 5m for: 5m
labels: labels:
@@ -88,7 +88,7 @@ spec:
expr: | expr: |
histogram_quantile(0.95, sum(rate(http_server_requests_seconds_bucket{ histogram_quantile(0.95, sum(rate(http_server_requests_seconds_bucket{
kubernetes_namespace="applications", kubernetes_namespace="applications",
app="mic-after-work-server-impl-quarkus-main" app="afterwork-server-impl-quarkus"
}[5m])) by (le)) > 2 }[5m])) by (le)) > 2
for: 5m for: 5m
labels: labels:
@@ -103,11 +103,11 @@ spec:
expr: | expr: |
sum(container_memory_working_set_bytes{ sum(container_memory_working_set_bytes{
namespace="applications", namespace="applications",
pod=~"mic-after-work-server-impl-quarkus-main.*" pod=~"afterwork-server-impl-quarkus.*"
}) / }) /
sum(container_spec_memory_limit_bytes{ sum(container_spec_memory_limit_bytes{
namespace="applications", namespace="applications",
pod=~"mic-after-work-server-impl-quarkus-main.*" pod=~"afterwork-server-impl-quarkus.*"
}) > 0.85 }) > 0.85
for: 5m for: 5m
labels: labels:
@@ -122,7 +122,7 @@ spec:
expr: | expr: |
increase(kube_pod_container_status_restarts_total{ increase(kube_pod_container_status_restarts_total{
namespace="applications", namespace="applications",
pod=~"mic-after-work-server-impl-quarkus-main.*" pod=~"afterwork-server-impl-quarkus.*"
}[1h]) > 3 }[1h]) > 3
for: 5m for: 5m
labels: labels:
@@ -143,7 +143,7 @@ metadata:
namespace: monitoring namespace: monitoring
labels: labels:
grafana_dashboard: "1" grafana_dashboard: "1"
app: mic-after-work-server-impl-quarkus-main app: afterwork-server-impl-quarkus
project: lions-infrastructure-2025 project: lions-infrastructure-2025
data: data:
afterwork-api-dashboard.json: | afterwork-api-dashboard.json: |
@@ -184,7 +184,7 @@ data:
"options": {}, "options": {},
"targets": [ "targets": [
{ {
"expr": "sum(rate(http_server_requests_seconds_count{kubernetes_namespace=\"applications\",app=\"mic-after-work-server-impl-quarkus-main\"}[5m]))", "expr": "sum(rate(http_server_requests_seconds_count{kubernetes_namespace=\"applications\",app=\"afterwork-server-impl-quarkus\"}[5m]))",
"legendFormat": "Requests/s", "legendFormat": "Requests/s",
"refId": "A" "refId": "A"
} }
@@ -210,12 +210,12 @@ data:
"options": {}, "options": {},
"targets": [ "targets": [
{ {
"expr": "histogram_quantile(0.95, sum(rate(http_server_requests_seconds_bucket{kubernetes_namespace=\"applications\",app=\"mic-after-work-server-impl-quarkus-main\"}[5m])) by (le)) * 1000", "expr": "histogram_quantile(0.95, sum(rate(http_server_requests_seconds_bucket{kubernetes_namespace=\"applications\",app=\"afterwork-server-impl-quarkus\"}[5m])) by (le)) * 1000",
"legendFormat": "p95 Latency", "legendFormat": "p95 Latency",
"refId": "A" "refId": "A"
}, },
{ {
"expr": "histogram_quantile(0.50, sum(rate(http_server_requests_seconds_bucket{kubernetes_namespace=\"applications\",app=\"mic-after-work-server-impl-quarkus-main\"}[5m])) by (le)) * 1000", "expr": "histogram_quantile(0.50, sum(rate(http_server_requests_seconds_bucket{kubernetes_namespace=\"applications\",app=\"afterwork-server-impl-quarkus\"}[5m])) by (le)) * 1000",
"legendFormat": "p50 Latency", "legendFormat": "p50 Latency",
"refId": "B" "refId": "B"
} }
@@ -241,7 +241,7 @@ data:
"options": {}, "options": {},
"targets": [ "targets": [
{ {
"expr": "sum(rate(http_server_requests_seconds_count{kubernetes_namespace=\"applications\",app=\"mic-after-work-server-impl-quarkus-main\",status=~\"5..\"}[5m])) / sum(rate(http_server_requests_seconds_count{kubernetes_namespace=\"applications\",app=\"mic-after-work-server-impl-quarkus-main\"}[5m])) * 100", "expr": "sum(rate(http_server_requests_seconds_count{kubernetes_namespace=\"applications\",app=\"afterwork-server-impl-quarkus\",status=~\"5..\"}[5m])) / sum(rate(http_server_requests_seconds_count{kubernetes_namespace=\"applications\",app=\"afterwork-server-impl-quarkus\"}[5m])) * 100",
"legendFormat": "Error Rate %", "legendFormat": "Error Rate %",
"refId": "A" "refId": "A"
} }
@@ -267,12 +267,12 @@ data:
"options": {}, "options": {},
"targets": [ "targets": [
{ {
"expr": "sum(container_memory_working_set_bytes{namespace=\"applications\",pod=~\"mic-after-work-server-impl-quarkus-main.*\"})", "expr": "sum(container_memory_working_set_bytes{namespace=\"applications\",pod=~\"afterwork-server-impl-quarkus.*\"})",
"legendFormat": "Memory Used", "legendFormat": "Memory Used",
"refId": "A" "refId": "A"
}, },
{ {
"expr": "sum(container_spec_memory_limit_bytes{namespace=\"applications\",pod=~\"mic-after-work-server-impl-quarkus-main.*\"})", "expr": "sum(container_spec_memory_limit_bytes{namespace=\"applications\",pod=~\"afterwork-server-impl-quarkus.*\"})",
"legendFormat": "Memory Limit", "legendFormat": "Memory Limit",
"refId": "B" "refId": "B"
} }
@@ -298,7 +298,7 @@ data:
"options": {}, "options": {},
"targets": [ "targets": [
{ {
"expr": "sum(rate(container_cpu_usage_seconds_total{namespace=\"applications\",pod=~\"mic-after-work-server-impl-quarkus-main.*\"}[5m])) * 1000", "expr": "sum(rate(container_cpu_usage_seconds_total{namespace=\"applications\",pod=~\"afterwork-server-impl-quarkus.*\"}[5m])) * 1000",
"legendFormat": "CPU Usage (millicores)", "legendFormat": "CPU Usage (millicores)",
"refId": "A" "refId": "A"
} }
@@ -379,7 +379,7 @@ data:
}, },
"targets": [ "targets": [
{ {
"expr": "increase(kube_pod_container_status_restarts_total{namespace=\"applications\",pod=~\"mic-after-work-server-impl-quarkus-main.*\"}[1h])", "expr": "increase(kube_pod_container_status_restarts_total{namespace=\"applications\",pod=~\"afterwork-server-impl-quarkus.*\"}[1h])",
"legendFormat": "Restarts (1h)", "legendFormat": "Restarts (1h)",
"refId": "A" "refId": "A"
} }

View File

@@ -63,7 +63,7 @@ data:
# ============================================================================== # ==============================================================================
DB_HOST: "postgresql-service.postgresql.svc.cluster.local" DB_HOST: "postgresql-service.postgresql.svc.cluster.local"
DB_PORT: "5432" DB_PORT: "5432"
DB_NAME: "mic-after-work-server-impl-quarkus-main" DB_NAME: "afterwork-server-impl-quarkus"
DB_USERNAME: "lionsuser" DB_USERNAME: "lionsuser"
# ============================================================================== # ==============================================================================

View File

@@ -1,10 +1,10 @@
apiVersion: v1 apiVersion: v1
kind: Service kind: Service
metadata: metadata:
name: mic-after-work-server-impl-quarkus-main-service name: afterwork-server-impl-quarkus-service
namespace: applications namespace: applications
labels: labels:
app: mic-after-work-server-impl-quarkus-main app: afterwork-server-impl-quarkus
component: application component: application
project: lions-infrastructure-2025 project: lions-infrastructure-2025
annotations: annotations:
@@ -27,4 +27,4 @@ spec:
protocol: TCP protocol: TCP
name: http-direct name: http-direct
selector: selector:
app: mic-after-work-server-impl-quarkus-main app: afterwork-server-impl-quarkus

View File

@@ -2,17 +2,17 @@
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
<groupId>dev.lions</groupId> <groupId>dev.lions</groupId>
<artifactId>mic-after-work-server-impl-quarkus-main</artifactId> <artifactId>afterwork-server-impl-quarkus</artifactId>
<version>1.0.0-SNAPSHOT</version> <version>1.0.0-SNAPSHOT</version>
<properties> <properties>
<compiler-plugin.version>3.13.0</compiler-plugin.version> <compiler-plugin.version>3.13.0</compiler-plugin.version>
<maven.compiler.release>17</maven.compiler.release> <maven.compiler.release>21</maven.compiler.release>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<quarkus.platform.artifact-id>quarkus-bom</quarkus.platform.artifact-id> <quarkus.platform.artifact-id>quarkus-bom</quarkus.platform.artifact-id>
<quarkus.platform.group-id>io.quarkus.platform</quarkus.platform.group-id> <quarkus.platform.group-id>io.quarkus.platform</quarkus.platform.group-id>
<quarkus.platform.version>3.16.3</quarkus.platform.version> <quarkus.platform.version>3.27.3</quarkus.platform.version>
<quarkus.package.type>fast-jar</quarkus.package.type> <quarkus.package.type>fast-jar</quarkus.package.type>
<skipITs>true</skipITs> <skipITs>true</skipITs>
<surefire-plugin.version>3.5.0</surefire-plugin.version> <surefire-plugin.version>3.5.0</surefire-plugin.version>

View File

@@ -7,11 +7,11 @@
# #
# Then, build the image with: # Then, build the image with:
# #
# docker build -f src/main/docker/Dockerfile.jvm -t quarkus/mic-after-work-server-impl-quarkus-main-jvm . # docker build -f src/main/docker/Dockerfile.jvm -t quarkus/afterwork-jvm .
# #
# Then run the container using: # Then run the container using:
# #
# docker run -i --rm -p 8080:8080 quarkus/mic-after-work-server-impl-quarkus-main-jvm # docker run -i --rm -p 8080:8080 quarkus/afterwork-jvm
# #
# If you want to include the debug port into your docker image # If you want to include the debug port into your docker image
# you will have to expose the debug port (default 5005 being the default) like this : EXPOSE 8080 5005. # you will have to expose the debug port (default 5005 being the default) like this : EXPOSE 8080 5005.
@@ -20,7 +20,7 @@
# #
# Then run the container using : # Then run the container using :
# #
# docker run -i --rm -p 8080:8080 quarkus/mic-after-work-server-impl-quarkus-main-jvm # docker run -i --rm -p 8080:8080 quarkus/afterwork-jvm
# #
# This image uses the `run-java.sh` script to run the application. # This image uses the `run-java.sh` script to run the application.
# This scripts computes the command line to execute your Java application, and # This scripts computes the command line to execute your Java application, and

View File

@@ -7,11 +7,11 @@
# #
# Then, build the image with: # Then, build the image with:
# #
# docker build -f src/main/docker/Dockerfile.legacy-jar -t quarkus/mic-after-work-server-impl-quarkus-main-legacy-jar . # docker build -f src/main/docker/Dockerfile.legacy-jar -t quarkus/afterwork-legacy-jar .
# #
# Then run the container using: # Then run the container using:
# #
# docker run -i --rm -p 8080:8080 quarkus/mic-after-work-server-impl-quarkus-main-legacy-jar # docker run -i --rm -p 8080:8080 quarkus/afterwork-legacy-jar
# #
# If you want to include the debug port into your docker image # If you want to include the debug port into your docker image
# you will have to expose the debug port (default 5005 being the default) like this : EXPOSE 8080 5005. # you will have to expose the debug port (default 5005 being the default) like this : EXPOSE 8080 5005.
@@ -20,7 +20,7 @@
# #
# Then run the container using : # Then run the container using :
# #
# docker run -i --rm -p 8080:8080 quarkus/mic-after-work-server-impl-quarkus-main-legacy-jar # docker run -i --rm -p 8080:8080 quarkus/afterwork-legacy-jar
# #
# This image uses the `run-java.sh` script to run the application. # This image uses the `run-java.sh` script to run the application.
# This scripts computes the command line to execute your Java application, and # This scripts computes the command line to execute your Java application, and

View File

@@ -7,11 +7,11 @@
# #
# Then, build the image with: # Then, build the image with:
# #
# docker build -f src/main/docker/Dockerfile.native -t quarkus/mic-after-work-server-impl-quarkus-main . # docker build -f src/main/docker/Dockerfile.native -t quarkus/afterwork .
# #
# Then run the container using: # Then run the container using:
# #
# docker run -i --rm -p 8080:8080 quarkus/mic-after-work-server-impl-quarkus-main # docker run -i --rm -p 8080:8080 quarkus/afterwork
# #
### ###
FROM registry.access.redhat.com/ubi8/ubi-minimal:8.10 FROM registry.access.redhat.com/ubi8/ubi-minimal:8.10

View File

@@ -10,11 +10,11 @@
# #
# Then, build the image with: # Then, build the image with:
# #
# docker build -f src/main/docker/Dockerfile.native-micro -t quarkus/mic-after-work-server-impl-quarkus-main . # docker build -f src/main/docker/Dockerfile.native-micro -t quarkus/afterwork .
# #
# Then run the container using: # Then run the container using:
# #
# docker run -i --rm -p 8080:8080 quarkus/mic-after-work-server-impl-quarkus-main # docker run -i --rm -p 8080:8080 quarkus/afterwork
# #
### ###
FROM quay.io/quarkus/quarkus-micro-image:2.0 FROM quay.io/quarkus/quarkus-micro-image:2.0

View File

@@ -37,7 +37,7 @@ quarkus.smallrye-openapi.servers=https://api.lions.dev
# IMPORTANT: Les credentials doivent ?tre fournis via variables d'environnement # IMPORTANT: Les credentials doivent ?tre fournis via variables d'environnement
# en production (Kubernetes Secrets ou Vault). # en production (Kubernetes Secrets ou Vault).
quarkus.datasource.db-kind=postgresql quarkus.datasource.db-kind=postgresql
quarkus.datasource.jdbc.url=jdbc:postgresql://${DB_HOST:postgresql-service.postgresql.svc.cluster.local}:${DB_PORT:5432}/${DB_NAME:mic-after-work-server-impl-quarkus-main} quarkus.datasource.jdbc.url=jdbc:postgresql://${DB_HOST:postgresql-service.postgresql.svc.cluster.local}:${DB_PORT:5432}/${DB_NAME:afterwork-server-impl-quarkus}
quarkus.datasource.username=${DB_USERNAME:lionsuser} quarkus.datasource.username=${DB_USERNAME:lionsuser}
quarkus.datasource.password=${DB_PASSWORD} quarkus.datasource.password=${DB_PASSWORD}
quarkus.datasource.jdbc.driver=org.postgresql.Driver quarkus.datasource.jdbc.driver=org.postgresql.Driver

View File

@@ -104,7 +104,7 @@ quarkus.http.root-path=/afterwork
# ne pourra pas utiliser PostgreSQL en prod. Donc on met la config prod par défaut ; # ne pourra pas utiliser PostgreSQL en prod. Donc on met la config prod par défaut ;
# le profil dev surcharge avec PostgreSQL local (application-dev.properties). # le profil dev surcharge avec PostgreSQL local (application-dev.properties).
quarkus.datasource.db-kind=postgresql quarkus.datasource.db-kind=postgresql
quarkus.datasource.jdbc.url=jdbc:postgresql://${DB_HOST:postgresql-service.postgresql.svc.cluster.local}:${DB_PORT:5432}/${DB_NAME:mic-after-work-server-impl-quarkus-main} quarkus.datasource.jdbc.url=jdbc:postgresql://${DB_HOST:postgresql-service.postgresql.svc.cluster.local}:${DB_PORT:5432}/${DB_NAME:afterwork-server-impl-quarkus}
quarkus.datasource.username=${DB_USERNAME:lionsuser} quarkus.datasource.username=${DB_USERNAME:lionsuser}
quarkus.datasource.password=${DB_PASSWORD} quarkus.datasource.password=${DB_PASSWORD}
quarkus.datasource.jdbc.driver=org.postgresql.Driver quarkus.datasource.jdbc.driver=org.postgresql.Driver
@@ -115,6 +115,8 @@ quarkus.datasource.devservices.enabled=false
# Hibernate ORM (prod : Flyway gère le schéma ; dev/test surchargent) # Hibernate ORM (prod : Flyway gère le schéma ; dev/test surchargent)
quarkus.hibernate-orm.database.generation=none quarkus.hibernate-orm.database.generation=none
quarkus.hibernate-orm.log.sql=false quarkus.hibernate-orm.log.sql=false
# Quarkus 3.27 : opt-in au nouveau comportement par défaut (séparation REST JSON vs colonnes JSON en BDD)
quarkus.hibernate-orm.mapping.format.global=ignore
# ==================================================================== # ====================================================================
# Upload de fichiers (commun à tous les environnements) # Upload de fichiers (commun à tous les environnements)