-- Migration V7: Création table feedbacks_evenement
-- Auteur: UnionFlow Team
-- Date: 2026-03-16
-- Description: Ajoute la table pour les feedbacks/évaluations des événements

-- Table feedbacks_evenement (évaluations post-événement)
CREATE TABLE IF NOT EXISTS feedbacks_evenement (
    -- Colonnes BaseEntity
    id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
    date_creation TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
    date_modification TIMESTAMP,
    cree_par VARCHAR(255),
    modifie_par VARCHAR(255),
    version INTEGER NOT NULL DEFAULT 0,
    actif BOOLEAN NOT NULL DEFAULT TRUE,

    -- Relations
    membre_id UUID NOT NULL,
    evenement_id UUID NOT NULL,

    -- Données de feedback
    note INTEGER NOT NULL CHECK (note >= 1 AND note <= 5),
    commentaire VARCHAR(1000),
    date_feedback TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,

    -- Modération
    moderation_statut VARCHAR(20) NOT NULL DEFAULT 'PUBLIE' CHECK (moderation_statut IN ('PUBLIE', 'EN_ATTENTE', 'REJETE')),
    raison_moderation VARCHAR(500),

    -- Contraintes
    CONSTRAINT fk_feedback_membre FOREIGN KEY (membre_id) REFERENCES utilisateurs(id) ON DELETE CASCADE,
    CONSTRAINT fk_feedback_evenement FOREIGN KEY (evenement_id) REFERENCES evenements(id) ON DELETE CASCADE,
    CONSTRAINT uk_feedback_membre_evenement UNIQUE (membre_id, evenement_id)
);

-- Index pour performance
CREATE INDEX IF NOT EXISTS idx_feedback_membre ON feedbacks_evenement(membre_id);
CREATE INDEX IF NOT EXISTS idx_feedback_evenement ON feedbacks_evenement(evenement_id);
CREATE INDEX IF NOT EXISTS idx_feedback_date ON feedbacks_evenement(date_feedback);
CREATE INDEX IF NOT EXISTS idx_feedback_moderation ON feedbacks_evenement(moderation_statut);

-- Commentaires
COMMENT ON TABLE feedbacks_evenement IS 'Feedbacks et évaluations des participants après un événement';
COMMENT ON COLUMN feedbacks_evenement.note IS 'Note de 1 à 5 étoiles';
COMMENT ON COLUMN feedbacks_evenement.moderation_statut IS 'Statut de modération: PUBLIE, EN_ATTENTE, REJETE';
COMMENT ON COLUMN feedbacks_evenement.date_feedback IS 'Date de soumission du feedback';
