-- Migration 001 : Système de rôles et notes d'articles -- À exécuter une seule fois sur le serveur PostgreSQL -- Rôles disponibles CREATE TABLE IF NOT EXISTS roles ( id SERIAL PRIMARY KEY, name VARCHAR(50) UNIQUE NOT NULL, label TEXT NOT NULL ); INSERT INTO roles (name, label) VALUES ('admin', 'Administrateur'), ('editor', 'Rédacteur'), ('reader', 'Lecteur') ON CONFLICT (name) DO NOTHING; -- Association utilisateur ↔ rôle (clé : email, pour compatibilité OIDC sans FK) CREATE TABLE IF NOT EXISTS user_roles ( user_email TEXT NOT NULL, role_id INTEGER NOT NULL REFERENCES roles(id) ON DELETE CASCADE, granted_at TIMESTAMP DEFAULT NOW(), granted_by TEXT, PRIMARY KEY (user_email, role_id) ); -- Seed : cedric@abonnel.fr → admin INSERT INTO user_roles (user_email, role_id, granted_by) SELECT 'cedric@abonnel.fr', id, 'migration' FROM roles WHERE name = 'admin' ON CONFLICT DO NOTHING; -- Notes d'articles (1-5 étoiles, une note par utilisateur par article) CREATE TABLE IF NOT EXISTS article_ratings ( article_uuid VARCHAR(36) NOT NULL, user_email TEXT NOT NULL, rating SMALLINT NOT NULL CHECK (rating BETWEEN 1 AND 5), rated_at TIMESTAMP DEFAULT NOW(), PRIMARY KEY (article_uuid, user_email) );