-- ============================================================================= -- 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 -- =============================================================================