86 lines
3.8 KiB
SQL
86 lines
3.8 KiB
SQL
-- =============================================================================
|
|
-- 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
|
|
-- =============================================================================
|