Files
folio/database/migration_001_roles_ratings.sql
T

40 lines
1.3 KiB
SQL

-- 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)
);