chore(quarkus-327): bump to Quarkus 3.27.3 LTS, make pom autonomous, fix UserServiceImpl tests (search → searchByUsername), rename deprecated config keys
Some checks failed
CI/CD Pipeline / pipeline (push) Failing after 1m57s
Some checks failed
CI/CD Pipeline / pipeline (push) Failing after 1m57s
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<beans xmlns="https://jakarta.ee/xml/ns/jakartajsf"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="https://jakarta.ee/xml/ns/jakartajsf https://jakarta.ee/xml/ns/jakartajsf/beans_3_0.xsd"
|
||||
bean-discovery-mode="annotated">
|
||||
</beans>
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<beans xmlns="https://jakarta.ee/xml/ns/jakartajsf"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="https://jakarta.ee/xml/ns/jakartajsf https://jakarta.ee/xml/ns/jakartajsf/beans_3_0.xsd"
|
||||
bean-discovery-mode="annotated">
|
||||
</beans>
|
||||
|
||||
@@ -1,33 +1,33 @@
|
||||
[
|
||||
{
|
||||
"name": "dev.lions.user.manager.dto.realm.RealmAssignmentDTO",
|
||||
"allDeclaredFields": true,
|
||||
"allDeclaredMethods": true,
|
||||
"allDeclaredConstructors": true
|
||||
},
|
||||
{
|
||||
"name": "dev.lions.user.manager.dto.role.RoleDTO",
|
||||
"allDeclaredFields": true,
|
||||
"allDeclaredMethods": true,
|
||||
"allDeclaredConstructors": true
|
||||
},
|
||||
{
|
||||
"name": "dev.lions.user.manager.dto.role.RoleDTO$RoleCompositeDTO",
|
||||
"allDeclaredFields": true,
|
||||
"allDeclaredMethods": true,
|
||||
"allDeclaredConstructors": true
|
||||
},
|
||||
{
|
||||
"name": "dev.lions.user.manager.dto.user.UserDTO",
|
||||
"allDeclaredFields": true,
|
||||
"allDeclaredMethods": true,
|
||||
"allDeclaredConstructors": true
|
||||
},
|
||||
{
|
||||
"name": "dev.lions.user.manager.dto.user.UserSearchResultDTO",
|
||||
"allDeclaredFields": true,
|
||||
"allDeclaredMethods": true,
|
||||
"allDeclaredConstructors": true
|
||||
}
|
||||
]
|
||||
|
||||
[
|
||||
{
|
||||
"name": "dev.lions.user.manager.dto.realm.RealmAssignmentDTO",
|
||||
"allDeclaredFields": true,
|
||||
"allDeclaredMethods": true,
|
||||
"allDeclaredConstructors": true
|
||||
},
|
||||
{
|
||||
"name": "dev.lions.user.manager.dto.role.RoleDTO",
|
||||
"allDeclaredFields": true,
|
||||
"allDeclaredMethods": true,
|
||||
"allDeclaredConstructors": true
|
||||
},
|
||||
{
|
||||
"name": "dev.lions.user.manager.dto.role.RoleDTO$RoleCompositeDTO",
|
||||
"allDeclaredFields": true,
|
||||
"allDeclaredMethods": true,
|
||||
"allDeclaredConstructors": true
|
||||
},
|
||||
{
|
||||
"name": "dev.lions.user.manager.dto.user.UserDTO",
|
||||
"allDeclaredFields": true,
|
||||
"allDeclaredMethods": true,
|
||||
"allDeclaredConstructors": true
|
||||
},
|
||||
{
|
||||
"name": "dev.lions.user.manager.dto.user.UserSearchResultDTO",
|
||||
"allDeclaredFields": true,
|
||||
"allDeclaredMethods": true,
|
||||
"allDeclaredConstructors": true
|
||||
}
|
||||
]
|
||||
|
||||
|
||||
@@ -68,7 +68,7 @@ quarkus.datasource.jdbc.url=jdbc:postgresql://${DB_HOST:localhost}:${DB_PORT:543
|
||||
# ============================================
|
||||
# Hibernate ORM Configuration DEV
|
||||
# ============================================
|
||||
quarkus.hibernate-orm.database.generation=update
|
||||
quarkus.hibernate-orm.schema-management.strategy=update
|
||||
quarkus.hibernate-orm.log.sql=true
|
||||
|
||||
# ============================================
|
||||
@@ -89,11 +89,11 @@ quarkus.log.category."io.quarkus.oidc.runtime".level=DEBUG
|
||||
quarkus.log.category."io.quarkus.security".level=DEBUG
|
||||
quarkus.log.category."io.quarkus.security.runtime".level=DEBUG
|
||||
|
||||
quarkus.log.console.enable=true
|
||||
quarkus.log.console.enabled=true
|
||||
quarkus.log.console.format=%d{HH:mm:ss} %-5p [%c{2.}] (%t) %s%e%n
|
||||
|
||||
# File Logging pour Audit DEV
|
||||
quarkus.log.file.enable=true
|
||||
quarkus.log.file.enabled=true
|
||||
quarkus.log.file.path=logs/dev/lions-user-manager.log
|
||||
quarkus.log.file.rotation.max-file-size=10M
|
||||
quarkus.log.file.rotation.max-backup-index=3
|
||||
@@ -102,7 +102,7 @@ quarkus.log.file.rotation.max-backup-index=3
|
||||
# OpenAPI/Swagger Configuration DEV
|
||||
# ============================================
|
||||
quarkus.swagger-ui.always-include=true
|
||||
quarkus.swagger-ui.enable=true
|
||||
quarkus.swagger-ui.enabled=true
|
||||
|
||||
# ============================================
|
||||
# Dev Services DEV
|
||||
|
||||
@@ -75,7 +75,7 @@ quarkus.datasource.jdbc.url=jdbc:postgresql://${DB_HOST}:${DB_PORT:5432}/${DB_NA
|
||||
# ============================================
|
||||
# Hibernate ORM Configuration PROD
|
||||
# ============================================
|
||||
quarkus.hibernate-orm.database.generation=none
|
||||
quarkus.hibernate-orm.schema-management.strategy=none
|
||||
quarkus.hibernate-orm.log.sql=false
|
||||
|
||||
# ============================================
|
||||
@@ -91,17 +91,17 @@ quarkus.log.category."dev.lions.user.manager".level=INFO
|
||||
quarkus.log.category."org.keycloak".level=WARN
|
||||
quarkus.log.category."io.quarkus".level=INFO
|
||||
|
||||
quarkus.log.console.enable=true
|
||||
quarkus.log.console.enabled=true
|
||||
quarkus.log.console.format=%d{yyyy-MM-dd HH:mm:ss,SSS} %-5p [%c{3.}] (%t) %s%e%n
|
||||
|
||||
# File Logging désactivé en PROD (logs centralisés via Kubernetes)
|
||||
quarkus.log.file.enable=false
|
||||
quarkus.log.file.enabled=false
|
||||
|
||||
# ============================================
|
||||
# OpenAPI/Swagger Configuration PROD
|
||||
# ============================================
|
||||
quarkus.swagger-ui.always-include=true
|
||||
quarkus.swagger-ui.enable=true
|
||||
quarkus.swagger-ui.enabled=true
|
||||
quarkus.swagger-ui.urls.default=/lions-user-manager/q/openapi
|
||||
|
||||
# ============================================
|
||||
|
||||
@@ -15,7 +15,7 @@ quarkus.application.version=1.0.0
|
||||
# HTTP Configuration (COMMUNE)
|
||||
# ============================================
|
||||
quarkus.http.host=0.0.0.0
|
||||
quarkus.http.cors=true
|
||||
quarkus.http.cors.enabled=true
|
||||
quarkus.http.cors.methods=GET,POST,PUT,DELETE,PATCH,OPTIONS
|
||||
quarkus.http.cors.headers=*
|
||||
|
||||
|
||||
@@ -1,175 +1,175 @@
|
||||
-- =============================================================================
|
||||
-- Migration Flyway V1.0.0 - Création de la table audit_logs
|
||||
-- =============================================================================
|
||||
-- Description: Création de la table pour la persistance des logs d'audit
|
||||
-- des actions effectuées sur le système de gestion des utilisateurs
|
||||
--
|
||||
-- Auteur: Lions Development Team
|
||||
-- Date: 2026-01-02
|
||||
-- Version: 1.0.0
|
||||
-- =============================================================================
|
||||
|
||||
-- Création de la table audit_logs
|
||||
CREATE TABLE IF NOT EXISTS audit_logs (
|
||||
-- Clé primaire générée automatiquement
|
||||
id BIGSERIAL PRIMARY KEY,
|
||||
|
||||
-- Informations sur l'utilisateur concerné
|
||||
user_id VARCHAR(255),
|
||||
|
||||
-- Type d'action effectuée
|
||||
action VARCHAR(100) NOT NULL,
|
||||
|
||||
-- Détails de l'action
|
||||
details TEXT,
|
||||
|
||||
-- Informations sur l'auteur de l'action
|
||||
auteur_action VARCHAR(255) NOT NULL,
|
||||
|
||||
-- Timestamp de l'action
|
||||
timestamp TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
|
||||
-- Informations de traçabilité réseau
|
||||
ip_address VARCHAR(45),
|
||||
user_agent VARCHAR(500),
|
||||
|
||||
-- Informations multi-tenant
|
||||
realm_name VARCHAR(255),
|
||||
|
||||
-- Statut de l'action
|
||||
success BOOLEAN NOT NULL DEFAULT TRUE,
|
||||
error_message TEXT,
|
||||
|
||||
-- Métadonnées
|
||||
CONSTRAINT chk_audit_action CHECK (action IN (
|
||||
-- Actions utilisateurs
|
||||
'CREATION_UTILISATEUR',
|
||||
'MODIFICATION_UTILISATEUR',
|
||||
'SUPPRESSION_UTILISATEUR',
|
||||
'ACTIVATION_UTILISATEUR',
|
||||
'DESACTIVATION_UTILISATEUR',
|
||||
'VERROUILLAGE_UTILISATEUR',
|
||||
'DEVERROUILLAGE_UTILISATEUR',
|
||||
|
||||
-- Actions mot de passe
|
||||
'RESET_PASSWORD',
|
||||
'CHANGE_PASSWORD',
|
||||
'FORCE_PASSWORD_RESET',
|
||||
|
||||
-- Actions sessions
|
||||
'LOGOUT_UTILISATEUR',
|
||||
'LOGOUT_ALL_SESSIONS',
|
||||
'SESSION_EXPIREE',
|
||||
|
||||
-- Actions rôles
|
||||
'ATTRIBUTION_ROLE',
|
||||
'REVOCATION_ROLE',
|
||||
'CREATION_ROLE',
|
||||
'MODIFICATION_ROLE',
|
||||
'SUPPRESSION_ROLE',
|
||||
|
||||
-- Actions groupes
|
||||
'AJOUT_GROUPE',
|
||||
'RETRAIT_GROUPE',
|
||||
|
||||
-- Actions realms
|
||||
'ATTRIBUTION_REALM',
|
||||
'REVOCATION_REALM',
|
||||
|
||||
-- Actions synchronisation
|
||||
'SYNC_MANUEL',
|
||||
'SYNC_AUTO',
|
||||
'SYNC_ERREUR',
|
||||
|
||||
-- Actions import/export
|
||||
'EXPORT_CSV',
|
||||
'IMPORT_CSV',
|
||||
|
||||
-- Actions système
|
||||
'CONNEXION_REUSSIE',
|
||||
'CONNEXION_ECHOUEE',
|
||||
'TENTATIVE_ACCES_NON_AUTORISE',
|
||||
'ERREUR_SYSTEME',
|
||||
'CONFIGURATION_MODIFIEE'
|
||||
))
|
||||
);
|
||||
|
||||
-- =============================================================================
|
||||
-- INDEX pour optimiser les requêtes
|
||||
-- =============================================================================
|
||||
|
||||
-- Index sur user_id pour recherches rapides par utilisateur
|
||||
CREATE INDEX idx_audit_user_id ON audit_logs(user_id)
|
||||
WHERE user_id IS NOT NULL;
|
||||
|
||||
-- Index sur action pour filtrer par type d'action
|
||||
CREATE INDEX idx_audit_action ON audit_logs(action);
|
||||
|
||||
-- Index sur timestamp pour recherches chronologiques et tri
|
||||
CREATE INDEX idx_audit_timestamp ON audit_logs(timestamp DESC);
|
||||
|
||||
-- Index sur auteur_action pour tracer les actions d'un administrateur
|
||||
CREATE INDEX idx_audit_auteur ON audit_logs(auteur_action);
|
||||
|
||||
-- Index sur realm_name pour isolation multi-tenant
|
||||
CREATE INDEX idx_audit_realm ON audit_logs(realm_name)
|
||||
WHERE realm_name IS NOT NULL;
|
||||
|
||||
-- Index composite pour recherches fréquentes
|
||||
CREATE INDEX idx_audit_user_timestamp ON audit_logs(user_id, timestamp DESC)
|
||||
WHERE user_id IS NOT NULL;
|
||||
|
||||
-- Index sur success pour identifier rapidement les échecs
|
||||
CREATE INDEX idx_audit_failures ON audit_logs(success, timestamp DESC)
|
||||
WHERE success = FALSE;
|
||||
|
||||
-- =============================================================================
|
||||
-- COMMENTAIRES sur les colonnes
|
||||
-- =============================================================================
|
||||
|
||||
COMMENT ON TABLE audit_logs IS 'Table de persistance des logs d''audit pour traçabilité complète';
|
||||
|
||||
COMMENT ON COLUMN audit_logs.id IS 'Identifiant unique auto-incrémenté du log';
|
||||
COMMENT ON COLUMN audit_logs.user_id IS 'ID de l''utilisateur concerné par l''action (null pour actions système)';
|
||||
COMMENT ON COLUMN audit_logs.action IS 'Type d''action effectuée (enum TypeActionAudit)';
|
||||
COMMENT ON COLUMN audit_logs.details IS 'Détails complémentaires sur l''action';
|
||||
COMMENT ON COLUMN audit_logs.auteur_action IS 'Identifiant de l''utilisateur ayant effectué l''action';
|
||||
COMMENT ON COLUMN audit_logs.timestamp IS 'Date et heure précise de l''action';
|
||||
COMMENT ON COLUMN audit_logs.ip_address IS 'Adresse IP du client ayant effectué l''action';
|
||||
COMMENT ON COLUMN audit_logs.user_agent IS 'User-Agent du navigateur/client';
|
||||
COMMENT ON COLUMN audit_logs.realm_name IS 'Nom du realm Keycloak concerné (multi-tenant)';
|
||||
COMMENT ON COLUMN audit_logs.success IS 'Indique si l''action a réussi (true) ou échoué (false)';
|
||||
COMMENT ON COLUMN audit_logs.error_message IS 'Message d''erreur en cas d''échec (null si success=true)';
|
||||
|
||||
-- =============================================================================
|
||||
-- POLITIQUE DE RÉTENTION (optionnel - à activer selon besoins)
|
||||
-- =============================================================================
|
||||
|
||||
-- Fonction pour nettoyer automatiquement les vieux logs
|
||||
-- Décommenter et adapter la période de rétention selon les besoins
|
||||
|
||||
/*
|
||||
CREATE OR REPLACE FUNCTION cleanup_old_audit_logs() RETURNS void AS $$
|
||||
BEGIN
|
||||
-- Supprime les logs de plus de 365 jours (configurable)
|
||||
DELETE FROM audit_logs
|
||||
WHERE timestamp < CURRENT_TIMESTAMP - INTERVAL '365 days';
|
||||
|
||||
RAISE NOTICE 'Logs d''audit plus anciens que 365 jours supprimés';
|
||||
END;
|
||||
$$ LANGUAGE plpgsql;
|
||||
|
||||
-- Créer un job CRON (nécessite extension pg_cron)
|
||||
-- SELECT cron.schedule('cleanup-audit-logs', '0 2 * * 0', 'SELECT cleanup_old_audit_logs()');
|
||||
*/
|
||||
|
||||
-- =============================================================================
|
||||
-- GRANTS (à adapter selon les rôles de votre base de données)
|
||||
-- =============================================================================
|
||||
|
||||
-- GRANT SELECT, INSERT ON audit_logs TO lions_app_user;
|
||||
-- GRANT USAGE, SELECT ON SEQUENCE audit_logs_id_seq TO lions_app_user;
|
||||
|
||||
-- =============================================================================
|
||||
-- FIN DE LA MIGRATION
|
||||
-- =============================================================================
|
||||
-- =============================================================================
|
||||
-- Migration Flyway V1.0.0 - Création de la table audit_logs
|
||||
-- =============================================================================
|
||||
-- Description: Création de la table pour la persistance des logs d'audit
|
||||
-- des actions effectuées sur le système de gestion des utilisateurs
|
||||
--
|
||||
-- Auteur: Lions Development Team
|
||||
-- Date: 2026-01-02
|
||||
-- Version: 1.0.0
|
||||
-- =============================================================================
|
||||
|
||||
-- Création de la table audit_logs
|
||||
CREATE TABLE IF NOT EXISTS audit_logs (
|
||||
-- Clé primaire générée automatiquement
|
||||
id BIGSERIAL PRIMARY KEY,
|
||||
|
||||
-- Informations sur l'utilisateur concerné
|
||||
user_id VARCHAR(255),
|
||||
|
||||
-- Type d'action effectuée
|
||||
action VARCHAR(100) NOT NULL,
|
||||
|
||||
-- Détails de l'action
|
||||
details TEXT,
|
||||
|
||||
-- Informations sur l'auteur de l'action
|
||||
auteur_action VARCHAR(255) NOT NULL,
|
||||
|
||||
-- Timestamp de l'action
|
||||
timestamp TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
|
||||
-- Informations de traçabilité réseau
|
||||
ip_address VARCHAR(45),
|
||||
user_agent VARCHAR(500),
|
||||
|
||||
-- Informations multi-tenant
|
||||
realm_name VARCHAR(255),
|
||||
|
||||
-- Statut de l'action
|
||||
success BOOLEAN NOT NULL DEFAULT TRUE,
|
||||
error_message TEXT,
|
||||
|
||||
-- Métadonnées
|
||||
CONSTRAINT chk_audit_action CHECK (action IN (
|
||||
-- Actions utilisateurs
|
||||
'CREATION_UTILISATEUR',
|
||||
'MODIFICATION_UTILISATEUR',
|
||||
'SUPPRESSION_UTILISATEUR',
|
||||
'ACTIVATION_UTILISATEUR',
|
||||
'DESACTIVATION_UTILISATEUR',
|
||||
'VERROUILLAGE_UTILISATEUR',
|
||||
'DEVERROUILLAGE_UTILISATEUR',
|
||||
|
||||
-- Actions mot de passe
|
||||
'RESET_PASSWORD',
|
||||
'CHANGE_PASSWORD',
|
||||
'FORCE_PASSWORD_RESET',
|
||||
|
||||
-- Actions sessions
|
||||
'LOGOUT_UTILISATEUR',
|
||||
'LOGOUT_ALL_SESSIONS',
|
||||
'SESSION_EXPIREE',
|
||||
|
||||
-- Actions rôles
|
||||
'ATTRIBUTION_ROLE',
|
||||
'REVOCATION_ROLE',
|
||||
'CREATION_ROLE',
|
||||
'MODIFICATION_ROLE',
|
||||
'SUPPRESSION_ROLE',
|
||||
|
||||
-- Actions groupes
|
||||
'AJOUT_GROUPE',
|
||||
'RETRAIT_GROUPE',
|
||||
|
||||
-- Actions realms
|
||||
'ATTRIBUTION_REALM',
|
||||
'REVOCATION_REALM',
|
||||
|
||||
-- Actions synchronisation
|
||||
'SYNC_MANUEL',
|
||||
'SYNC_AUTO',
|
||||
'SYNC_ERREUR',
|
||||
|
||||
-- Actions import/export
|
||||
'EXPORT_CSV',
|
||||
'IMPORT_CSV',
|
||||
|
||||
-- Actions système
|
||||
'CONNEXION_REUSSIE',
|
||||
'CONNEXION_ECHOUEE',
|
||||
'TENTATIVE_ACCES_NON_AUTORISE',
|
||||
'ERREUR_SYSTEME',
|
||||
'CONFIGURATION_MODIFIEE'
|
||||
))
|
||||
);
|
||||
|
||||
-- =============================================================================
|
||||
-- INDEX pour optimiser les requêtes
|
||||
-- =============================================================================
|
||||
|
||||
-- Index sur user_id pour recherches rapides par utilisateur
|
||||
CREATE INDEX idx_audit_user_id ON audit_logs(user_id)
|
||||
WHERE user_id IS NOT NULL;
|
||||
|
||||
-- Index sur action pour filtrer par type d'action
|
||||
CREATE INDEX idx_audit_action ON audit_logs(action);
|
||||
|
||||
-- Index sur timestamp pour recherches chronologiques et tri
|
||||
CREATE INDEX idx_audit_timestamp ON audit_logs(timestamp DESC);
|
||||
|
||||
-- Index sur auteur_action pour tracer les actions d'un administrateur
|
||||
CREATE INDEX idx_audit_auteur ON audit_logs(auteur_action);
|
||||
|
||||
-- Index sur realm_name pour isolation multi-tenant
|
||||
CREATE INDEX idx_audit_realm ON audit_logs(realm_name)
|
||||
WHERE realm_name IS NOT NULL;
|
||||
|
||||
-- Index composite pour recherches fréquentes
|
||||
CREATE INDEX idx_audit_user_timestamp ON audit_logs(user_id, timestamp DESC)
|
||||
WHERE user_id IS NOT NULL;
|
||||
|
||||
-- Index sur success pour identifier rapidement les échecs
|
||||
CREATE INDEX idx_audit_failures ON audit_logs(success, timestamp DESC)
|
||||
WHERE success = FALSE;
|
||||
|
||||
-- =============================================================================
|
||||
-- COMMENTAIRES sur les colonnes
|
||||
-- =============================================================================
|
||||
|
||||
COMMENT ON TABLE audit_logs IS 'Table de persistance des logs d''audit pour traçabilité complète';
|
||||
|
||||
COMMENT ON COLUMN audit_logs.id IS 'Identifiant unique auto-incrémenté du log';
|
||||
COMMENT ON COLUMN audit_logs.user_id IS 'ID de l''utilisateur concerné par l''action (null pour actions système)';
|
||||
COMMENT ON COLUMN audit_logs.action IS 'Type d''action effectuée (enum TypeActionAudit)';
|
||||
COMMENT ON COLUMN audit_logs.details IS 'Détails complémentaires sur l''action';
|
||||
COMMENT ON COLUMN audit_logs.auteur_action IS 'Identifiant de l''utilisateur ayant effectué l''action';
|
||||
COMMENT ON COLUMN audit_logs.timestamp IS 'Date et heure précise de l''action';
|
||||
COMMENT ON COLUMN audit_logs.ip_address IS 'Adresse IP du client ayant effectué l''action';
|
||||
COMMENT ON COLUMN audit_logs.user_agent IS 'User-Agent du navigateur/client';
|
||||
COMMENT ON COLUMN audit_logs.realm_name IS 'Nom du realm Keycloak concerné (multi-tenant)';
|
||||
COMMENT ON COLUMN audit_logs.success IS 'Indique si l''action a réussi (true) ou échoué (false)';
|
||||
COMMENT ON COLUMN audit_logs.error_message IS 'Message d''erreur en cas d''échec (null si success=true)';
|
||||
|
||||
-- =============================================================================
|
||||
-- POLITIQUE DE RÉTENTION (optionnel - à activer selon besoins)
|
||||
-- =============================================================================
|
||||
|
||||
-- Fonction pour nettoyer automatiquement les vieux logs
|
||||
-- Décommenter et adapter la période de rétention selon les besoins
|
||||
|
||||
/*
|
||||
CREATE OR REPLACE FUNCTION cleanup_old_audit_logs() RETURNS void AS $$
|
||||
BEGIN
|
||||
-- Supprime les logs de plus de 365 jours (configurable)
|
||||
DELETE FROM audit_logs
|
||||
WHERE timestamp < CURRENT_TIMESTAMP - INTERVAL '365 days';
|
||||
|
||||
RAISE NOTICE 'Logs d''audit plus anciens que 365 jours supprimés';
|
||||
END;
|
||||
$$ LANGUAGE plpgsql;
|
||||
|
||||
-- Créer un job CRON (nécessite extension pg_cron)
|
||||
-- SELECT cron.schedule('cleanup-audit-logs', '0 2 * * 0', 'SELECT cleanup_old_audit_logs()');
|
||||
*/
|
||||
|
||||
-- =============================================================================
|
||||
-- GRANTS (à adapter selon les rôles de votre base de données)
|
||||
-- =============================================================================
|
||||
|
||||
-- GRANT SELECT, INSERT ON audit_logs TO lions_app_user;
|
||||
-- GRANT USAGE, SELECT ON SEQUENCE audit_logs_id_seq TO lions_app_user;
|
||||
|
||||
-- =============================================================================
|
||||
-- FIN DE LA MIGRATION
|
||||
-- =============================================================================
|
||||
|
||||
@@ -1,85 +1,85 @@
|
||||
-- =============================================================================
|
||||
-- Migration Flyway V2.0.0 - Création des tables de synchronisation Keycloak
|
||||
-- =============================================================================
|
||||
-- Description: Tables pour la persistance des snapshots et de l'historique
|
||||
-- des synchronisations entre l'application et Keycloak.
|
||||
--
|
||||
-- Entités correspondantes:
|
||||
-- SyncHistoryEntity → sync_history
|
||||
-- SyncedUserEntity → synced_user
|
||||
-- SyncedRoleEntity → synced_role
|
||||
--
|
||||
-- Auteur: Lions Development Team
|
||||
-- Date: 2026-02-17
|
||||
-- Version: 2.0.0
|
||||
-- =============================================================================
|
||||
|
||||
|
||||
-- =============================================================================
|
||||
-- TABLE sync_history : historique des opérations de synchronisation
|
||||
-- =============================================================================
|
||||
CREATE TABLE IF NOT EXISTS sync_history (
|
||||
id BIGSERIAL PRIMARY KEY,
|
||||
realm_name VARCHAR(255) NOT NULL,
|
||||
sync_date TIMESTAMP NOT NULL,
|
||||
sync_type VARCHAR(50) NOT NULL, -- 'USER' ou 'ROLE'
|
||||
status VARCHAR(50) NOT NULL, -- 'SUCCESS' ou 'FAILURE'
|
||||
items_processed INTEGER,
|
||||
duration_ms BIGINT,
|
||||
error_message TEXT
|
||||
);
|
||||
|
||||
CREATE INDEX IF NOT EXISTS idx_sync_realm ON sync_history(realm_name);
|
||||
CREATE INDEX IF NOT EXISTS idx_sync_date ON sync_history(sync_date DESC);
|
||||
|
||||
COMMENT ON TABLE sync_history IS 'Historique des synchronisations Keycloak (users et rôles)';
|
||||
COMMENT ON COLUMN sync_history.sync_type IS 'Type de synchronisation : USER ou ROLE';
|
||||
COMMENT ON COLUMN sync_history.status IS 'Résultat : SUCCESS ou FAILURE';
|
||||
|
||||
|
||||
-- =============================================================================
|
||||
-- TABLE synced_user : snapshot local des utilisateurs Keycloak synchronisés
|
||||
-- =============================================================================
|
||||
CREATE TABLE IF NOT EXISTS synced_user (
|
||||
id BIGSERIAL PRIMARY KEY,
|
||||
realm_name VARCHAR(255) NOT NULL,
|
||||
keycloak_id VARCHAR(255) NOT NULL,
|
||||
username VARCHAR(255) NOT NULL,
|
||||
email VARCHAR(255),
|
||||
enabled BOOLEAN,
|
||||
email_verified BOOLEAN,
|
||||
created_at TIMESTAMP,
|
||||
CONSTRAINT uq_synced_user_realm_kc UNIQUE (realm_name, keycloak_id)
|
||||
);
|
||||
|
||||
CREATE INDEX IF NOT EXISTS idx_synced_user_realm
|
||||
ON synced_user(realm_name);
|
||||
CREATE UNIQUE INDEX IF NOT EXISTS idx_synced_user_realm_kc_id
|
||||
ON synced_user(realm_name, keycloak_id);
|
||||
|
||||
COMMENT ON TABLE synced_user IS 'Snapshot local des utilisateurs Keycloak pour rapports et vérifications';
|
||||
COMMENT ON COLUMN synced_user.keycloak_id IS 'UUID Keycloak de l''utilisateur';
|
||||
|
||||
|
||||
-- =============================================================================
|
||||
-- TABLE synced_role : snapshot local des rôles Keycloak synchronisés
|
||||
-- =============================================================================
|
||||
CREATE TABLE IF NOT EXISTS synced_role (
|
||||
id BIGSERIAL PRIMARY KEY,
|
||||
realm_name VARCHAR(255) NOT NULL,
|
||||
role_name VARCHAR(255) NOT NULL,
|
||||
description VARCHAR(500),
|
||||
CONSTRAINT uq_synced_role_realm_name UNIQUE (realm_name, role_name)
|
||||
);
|
||||
|
||||
CREATE INDEX IF NOT EXISTS idx_synced_role_realm
|
||||
ON synced_role(realm_name);
|
||||
CREATE UNIQUE INDEX IF NOT EXISTS idx_synced_role_realm_name
|
||||
ON synced_role(realm_name, role_name);
|
||||
|
||||
COMMENT ON TABLE synced_role IS 'Snapshot local des rôles Keycloak pour rapports et vérifications';
|
||||
COMMENT ON COLUMN synced_role.role_name IS 'Nom du rôle realm dans Keycloak';
|
||||
|
||||
-- =============================================================================
|
||||
-- FIN DE LA MIGRATION
|
||||
-- =============================================================================
|
||||
-- =============================================================================
|
||||
-- Migration Flyway V2.0.0 - Création des tables de synchronisation Keycloak
|
||||
-- =============================================================================
|
||||
-- Description: Tables pour la persistance des snapshots et de l'historique
|
||||
-- des synchronisations entre l'application et Keycloak.
|
||||
--
|
||||
-- Entités correspondantes:
|
||||
-- SyncHistoryEntity → sync_history
|
||||
-- SyncedUserEntity → synced_user
|
||||
-- SyncedRoleEntity → synced_role
|
||||
--
|
||||
-- Auteur: Lions Development Team
|
||||
-- Date: 2026-02-17
|
||||
-- Version: 2.0.0
|
||||
-- =============================================================================
|
||||
|
||||
|
||||
-- =============================================================================
|
||||
-- TABLE sync_history : historique des opérations de synchronisation
|
||||
-- =============================================================================
|
||||
CREATE TABLE IF NOT EXISTS sync_history (
|
||||
id BIGSERIAL PRIMARY KEY,
|
||||
realm_name VARCHAR(255) NOT NULL,
|
||||
sync_date TIMESTAMP NOT NULL,
|
||||
sync_type VARCHAR(50) NOT NULL, -- 'USER' ou 'ROLE'
|
||||
status VARCHAR(50) NOT NULL, -- 'SUCCESS' ou 'FAILURE'
|
||||
items_processed INTEGER,
|
||||
duration_ms BIGINT,
|
||||
error_message TEXT
|
||||
);
|
||||
|
||||
CREATE INDEX IF NOT EXISTS idx_sync_realm ON sync_history(realm_name);
|
||||
CREATE INDEX IF NOT EXISTS idx_sync_date ON sync_history(sync_date DESC);
|
||||
|
||||
COMMENT ON TABLE sync_history IS 'Historique des synchronisations Keycloak (users et rôles)';
|
||||
COMMENT ON COLUMN sync_history.sync_type IS 'Type de synchronisation : USER ou ROLE';
|
||||
COMMENT ON COLUMN sync_history.status IS 'Résultat : SUCCESS ou FAILURE';
|
||||
|
||||
|
||||
-- =============================================================================
|
||||
-- TABLE synced_user : snapshot local des utilisateurs Keycloak synchronisés
|
||||
-- =============================================================================
|
||||
CREATE TABLE IF NOT EXISTS synced_user (
|
||||
id BIGSERIAL PRIMARY KEY,
|
||||
realm_name VARCHAR(255) NOT NULL,
|
||||
keycloak_id VARCHAR(255) NOT NULL,
|
||||
username VARCHAR(255) NOT NULL,
|
||||
email VARCHAR(255),
|
||||
enabled BOOLEAN,
|
||||
email_verified BOOLEAN,
|
||||
created_at TIMESTAMP,
|
||||
CONSTRAINT uq_synced_user_realm_kc UNIQUE (realm_name, keycloak_id)
|
||||
);
|
||||
|
||||
CREATE INDEX IF NOT EXISTS idx_synced_user_realm
|
||||
ON synced_user(realm_name);
|
||||
CREATE UNIQUE INDEX IF NOT EXISTS idx_synced_user_realm_kc_id
|
||||
ON synced_user(realm_name, keycloak_id);
|
||||
|
||||
COMMENT ON TABLE synced_user IS 'Snapshot local des utilisateurs Keycloak pour rapports et vérifications';
|
||||
COMMENT ON COLUMN synced_user.keycloak_id IS 'UUID Keycloak de l''utilisateur';
|
||||
|
||||
|
||||
-- =============================================================================
|
||||
-- TABLE synced_role : snapshot local des rôles Keycloak synchronisés
|
||||
-- =============================================================================
|
||||
CREATE TABLE IF NOT EXISTS synced_role (
|
||||
id BIGSERIAL PRIMARY KEY,
|
||||
realm_name VARCHAR(255) NOT NULL,
|
||||
role_name VARCHAR(255) NOT NULL,
|
||||
description VARCHAR(500),
|
||||
CONSTRAINT uq_synced_role_realm_name UNIQUE (realm_name, role_name)
|
||||
);
|
||||
|
||||
CREATE INDEX IF NOT EXISTS idx_synced_role_realm
|
||||
ON synced_role(realm_name);
|
||||
CREATE UNIQUE INDEX IF NOT EXISTS idx_synced_role_realm_name
|
||||
ON synced_role(realm_name, role_name);
|
||||
|
||||
COMMENT ON TABLE synced_role IS 'Snapshot local des rôles Keycloak pour rapports et vérifications';
|
||||
COMMENT ON COLUMN synced_role.role_name IS 'Nom du rôle realm dans Keycloak';
|
||||
|
||||
-- =============================================================================
|
||||
-- FIN DE LA MIGRATION
|
||||
-- =============================================================================
|
||||
|
||||
Reference in New Issue
Block a user