feat(backend): endpoints inscriptions + feedback événements

Ajoute infrastructure complète pour gérer inscriptions et feedbacks événements.

## Entités
- FeedbackEvenement : note 1-5, commentaire, modération (PUBLIE/EN_ATTENTE/REJETE)
- InscriptionEvenement : déjà existait, utilisation ajoutée

## Repositories
- InscriptionEvenementRepository : findByMembreAndEvenement, findByEvenement, countConfirmees, isMembreInscrit
- FeedbackEvenementRepository : findByMembreAndEvenement, findPubliesByEvenement, calculateAverageNote

## Service (EvenementService)
Inscriptions :
- inscrireEvenement() : vérifie capacité, crée inscription CONFIRMEE
- desinscrireEvenement() : soft delete inscription
- getParticipants() : liste inscriptions confirmées
- getMesInscriptions() : inscriptions du membre connecté

Feedbacks :
- soumetteFeedback() : note 1-5 + commentaire, vérifie participation, événement terminé
- getFeedbacks() : liste feedbacks publiés
- getStatistiquesFeedback() : note moyenne + nombre feedbacks

## REST Endpoints (6 total)
Inscriptions :
- POST /api/evenements/{id}/inscriptions - S'inscrire
- DELETE /api/evenements/{id}/inscriptions - Se désinscrire
- GET /api/evenements/{id}/participants - Liste participants
- GET /api/evenements/mes-inscriptions - Mes inscriptions

Feedbacks :
- POST /api/evenements/{id}/feedback - Soumettre feedback (note+commentaire)
- GET /api/evenements/{id}/feedbacks - Liste feedbacks + stats

## Database
- Migration V7 : table feedbacks_evenement
- Contrainte unique: un feedback par membre/événement
- Index: membre_id, evenement_id, date_feedback, moderation_statut

Débloquer fonctionnalités événements mobile.

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
This commit is contained in:
dahoud
2026-03-16 20:11:03 +00:00
parent 3be01e28a7
commit a7bcaf9277
6 changed files with 690 additions and 0 deletions

View File

@@ -0,0 +1,46 @@
-- 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';