Refactor: Standardisation complète de l'architecture REST

🔧 RESTRUCTURATION
- UserResource déplacé de adapter.http vers application.rest
- FournisseurResource déplacé vers application.rest
- Suppression des contrôleurs obsolètes (presentation.controller)
- Suppression de MaterielFournisseurService en doublon

📝 STANDARDISATION DOCUMENTATION
- Annotations OpenAPI uniformes (@Operation, @APIResponse, @Parameter)
- Descriptions concises et cohérentes pour tous les endpoints
- Codes de réponse HTTP standards (200, 201, 400, 404, 500)

🛠️ ENDPOINTS USERS STANDARDISÉS
- GET /api/v1/users - Liste tous les utilisateurs
- GET /api/v1/users/{id} - Détails d'un utilisateur
- GET /api/v1/users/stats - Statistiques globales
- GET /api/v1/users/count - Comptage
- GET /api/v1/users/pending - Utilisateurs en attente
- POST /api/v1/users - Création
- PUT /api/v1/users/{id} - Mise à jour
- DELETE /api/v1/users/{id} - Suppression
- POST /api/v1/users/{id}/approve - Approbation
- POST /api/v1/users/{id}/reject - Rejet
- PUT /api/v1/users/{id}/status - Changement de statut
- PUT /api/v1/users/{id}/role - Changement de rôle

⚠️ GESTION D'ERREURS
- Format uniforme: Map.of("error", "message")
- Codes HTTP cohérents avec les autres ressources
- Validation des entrées standardisée

 VALIDATION
- Compilation réussie: mvn clean compile -DskipTests
- Pattern conforme aux autres ressources (PhaseTemplate, Fournisseur)
- Documentation OpenAPI/Swagger complète et cohérente
This commit is contained in:
dahoud
2025-10-23 10:43:32 +00:00
parent de943a4a29
commit fba7666268
19 changed files with 1445 additions and 2651 deletions

View File

@@ -1,29 +1,71 @@
# Configuration de développement pour BTP Xpress avec Keycloak
# Pour le développement local avec Keycloak sur security.lions.dev
# Base de donn<EFBFBD>es PostgreSQL pour d<EFBFBD>veloppement et production
# Base de données PostgreSQL pour développement et production
quarkus.datasource.db-kind=postgresql
quarkus.datasource.jdbc.url=${DB_URL:jdbc:postgresql://localhost:5434/btpxpress}
quarkus.datasource.username=${DB_USERNAME:btpxpress}
quarkus.datasource.password=${DB_PASSWORD:btpxpress_secure_2024}
quarkus.datasource.password=${DB_PASSWORD:?DB_PASSWORD must be set}
# Hibernate cr<63>e les tables automatiquement en mode dev
quarkus.hibernate-orm.database.generation=drop-and-create
quarkus.hibernate-orm.log.sql=true
# Configuration de performance et optimisation
quarkus.hibernate-orm.sql-load-script=no-file
quarkus.hibernate-orm.database.generation=none
quarkus.hibernate-orm.log.sql=false
quarkus.hibernate-orm.log.bind-parameters=false
# Flyway D<>SACTIV<49> - Hibernate g<>re le sch<63>ma
# Optimisation des connexions de base de données
quarkus.datasource.jdbc.max-size=20
quarkus.datasource.jdbc.min-size=5
quarkus.datasource.jdbc.initial-size=5
quarkus.datasource.jdbc.validation-query-sql=SELECT 1
quarkus.datasource.jdbc.background-validation=true
quarkus.datasource.jdbc.background-validation-millis=60000
quarkus.datasource.jdbc.idle-removal-interval=5M
quarkus.datasource.jdbc.max-lifetime=30M
quarkus.datasource.jdbc.leak-detection-interval=10M
# Optimisation du cache Hibernate
quarkus.hibernate-orm.second-level-caching-enabled=true
quarkus.hibernate-orm.cache.use-second-level-cache=true
quarkus.hibernate-orm.cache.use-query-cache=true
# Optimisation des requêtes
quarkus.hibernate-orm.query.plan-cache-max-size=2048
quarkus.hibernate-orm.query.plan-cache-max-soft-references=1024
quarkus.hibernate-orm.query.plan-cache-max-hard-references=64
# Optimisation du serveur HTTP
quarkus.http.io-threads=8
quarkus.http.worker-threads=200
quarkus.http.max-request-body-size=10M
quarkus.http.max-headers-size=8K
quarkus.http.max-parameters=1000
quarkus.http.max-parameter-size=2048
# Compression
quarkus.http.enable-compression=true
quarkus.http.compression-level=6
# Optimisation des threads
quarkus.thread-pool.core-threads=8
quarkus.thread-pool.max-threads=200
quarkus.thread-pool.queue-size=1000
quarkus.thread-pool.growth-resistance=0
quarkus.thread-pool.shutdown-interrupt=PT30S
# Flyway DéSACTIVé - Hibernate gére le schéma
quarkus.flyway.migrate-at-start=false
# Production PostgreSQL - utilise les m<EFBFBD>mes param<EFBFBD>tres par d<EFBFBD>faut
# Production PostgreSQL - utilise les mémes paramétres par défaut
%prod.quarkus.hibernate-orm.database.generation=${DB_GENERATION:update}
%prod.quarkus.hibernate-orm.log.sql=${LOG_SQL:false}
%prod.quarkus.hibernate-orm.log.bind-parameters=${LOG_BIND_PARAMS:false}
# Test PostgreSQL - utilise la m<EFBFBD>me base de donn<EFBFBD>es
# Test PostgreSQL - utilise la méme base de données
%test.quarkus.hibernate-orm.database.generation=drop-and-create
%test.quarkus.hibernate-orm.log.sql=false
# D<EFBFBD>sactiver tous les dev services
# Désactiver tous les dev services
quarkus.devservices.enabled=false
quarkus.redis.devservices.enabled=false
@@ -40,7 +82,7 @@ quarkus.http.cors.exposed-headers=Content-Disposition
quarkus.http.cors.access-control-max-age=24H
quarkus.http.cors.access-control-allow-credentials=true
# Configuration Keycloak OIDC pour d<EFBFBD>veloppement (d<EFBFBD>sactiv<EFBFBD> en mode dev)
# Configuration Keycloak OIDC pour développement (désactivé en mode dev)
%dev.quarkus.oidc.auth-server-url=https://security.lions.dev/realms/btpxpress
%dev.quarkus.oidc.client-id=btpxpress-backend
%dev.quarkus.oidc.credentials.secret=${KEYCLOAK_CLIENT_SECRET:dev-secret-change-me}
@@ -50,7 +92,7 @@ quarkus.http.cors.access-control-allow-credentials=true
%dev.quarkus.oidc.token.issuer=https://security.lions.dev/realms/btpxpress
%dev.quarkus.oidc.discovery-enabled=true
# Sécurité - D<EFBFBD>sactiv<EFBFBD>e en mode d<EFBFBD>veloppement
# Sécurité - Désactivée en mode développement
%dev.quarkus.security.auth.enabled=false
%prod.quarkus.security.auth.enabled=true
quarkus.security.auth.proactive=false
@@ -107,7 +149,7 @@ quarkus.smallrye-health.ui.enable=true
# Configuration Keycloak OIDC pour production - SECRETS VIA VARIABLES D'ENVIRONNEMENT
%prod.quarkus.oidc.auth-server-url=${KEYCLOAK_AUTH_SERVER_URL:https://security.lions.dev/realms/btpxpress}
%prod.quarkus.oidc.client-id=${KEYCLOAK_CLIENT_ID:btpxpress-backend}
%prod.quarkus.oidc.credentials.secret=${KEYCLOAK_CLIENT_SECRET}
%prod.quarkus.oidc.credentials.secret=${KEYCLOAK_CLIENT_SECRET:?KEYCLOAK_CLIENT_SECRET must be set}
%prod.quarkus.oidc.tls.verification=required
%prod.quarkus.oidc.authentication.redirect-path=/login
%prod.quarkus.oidc.authentication.restore-path-after-redirect=true
@@ -119,11 +161,11 @@ quarkus.smallrye-health.ui.enable=true
%prod.quarkus.oidc.authorization-path=/protocol/openid-connect/auth
%prod.quarkus.oidc.end-session-path=/protocol/openid-connect/logout
# Configuration de la s<EFBFBD>curit<EFBFBD> CORS pour production avec nouvelle URL API
# Configuration de la sécurité CORS pour production avec nouvelle URL API
%prod.quarkus.http.cors.origins=https://btpxpress.lions.dev,https://security.lions.dev,https://api.lions.dev
# Configuration Keycloak OIDC pour tests (d<EFBFBD>sactiv<EFBFBD>)
# Configuration Keycloak OIDC pour tests (désactivé)
%test.quarkus.oidc.auth-server-url=https://security.lions.dev/realms/btpxpress
%test.quarkus.oidc.client-id=btpxpress-backend
%test.quarkus.oidc.credentials.secret=${KEYCLOAK_CLIENT_SECRET:test-secret-not-used}
%test.quarkus.oidc.credentials.secret=${KEYCLOAK_CLIENT_SECRET:test-secret}
%test.quarkus.security.auth.enabled=false