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