# Contrôleur API pour la gestion des ressources d'événements # Fournit des points de terminaison RESTful pour les opérations CRUD sur le modèle Event module Api module V1 class EventsController < ApiController # Charge l'évén avant certaines actions pour réduire les duplications before_action :set_event, only: [ :show, :update, :destroy ] # GET /api/v1/events # Récupère tous les événements triés par date de création (du plus récent au plus ancien) def index @events = Event.all.order(created_at: :desc) render json: @events, status: :ok end # GET /api/v1/events/:id # Récupère un seul événement par son ID # Retourne 404 si l'événement n'est pas trouvé def show render json: @event, status: :ok end # POST /api/v1/events # Crée un nouvel événement avec les attributs fournis # Retourne 201 Created en cas de succès avec les données de l'événement # Retourne 422 Unprocessable Entity avec les messages d'erreur en cas d'échec def create @event = Event.new(event_params) if @event.save render json: @event, status: :created else render json: { errors: @event.errors.full_messages }, status: :unprocessable_entity end end # PATCH/PUT /api/v1/events/:id # Met à jour un événement existant avec les attributs fournis # Retourne 200 OK avec les données mises à jour en cas de succès # Retourne 422 Unprocessable Entity avec les messages d'erreur en cas d'échec def update if @event.update(event_params) render json: @event, status: :ok else render json: { errors: @event.errors.full_messages }, status: :unprocessable_entity end end # DELETE /api/v1/events/:id # Supprime définitivement un événement # Retourne 204 No Content en cas de succès def destroy @event.destroy head :no_content end private # Trouve un événement par son ID ou retourne 404 Introuvable # Utilisé comme before_action pour les actions show, update et destroy def set_event @event = Event.find(params[:id]) rescue ActiveRecord::RecordNotFound render json: { error: "Événement non trouvé" }, status: :not_found end # Paramètres forts pour la création et la mise à jour des événements # Liste blanche des attributs autorisés pour éviter les vulnérabilités de mass assignment def event_params params.require(:event).permit( :name, :description, :state, :venue_name, :venue_address, :latitude, :longitude, :featured ) end end end end