All files / lib/api/service lieuService.ts

88.23% Statements 15/17
100% Branches 5/5
50% Functions 1/2
85.71% Lines 12/14

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 591x                                   1x   1x                   3x   3x 1x 1x 1x 1x   1x 1x       3x                              
import {fetchApi} from '@/lib/api/core/fetchWrappers';
import {Lieu} from '@/type/evenement/lieu';
 
/**
 * Interface définissant les filtres disponibles pour les lieux
 */
export interface LieuFilters {
  /** Filtrage par nom de lieu */
  nom?: string;
  /** Numéro de page pour la pagination */
  page?: number;
  /** Nombre d'éléments par page */
  limit?: number;
}
 
/**
 * Service pour la gestion des lieux d'événements
 */
export class LieuService {
  /** Chemin de base pour les endpoints des lieux */
  private static readonly BASE_PATH = '/lieu';
 
  /**
   * Récupère tous les lieux avec filtres optionnels
   * @param filters - Filtres optionnels pour la recherche et la pagination
   * @returns Promise<Lieu[]> - Liste des lieux
   * @throws Error - En cas d'erreur de l'API ou de réseau
   * Route Django: path('lieu/', LieuListView.as_view(), name='lieu-list')
   */
  static async getAllLieux(filters?: LieuFilters): Promise<Lieu[]> {
    let url = `${this.BASE_PATH}/`;
 
    if (filters) {
      const params = new URLSearchParams();
      if (filters.nom) params.append('search', filters.nom);
      if (filters.page) params.append('page', filters.page.toString());
      if (filters.limit) params.append('limit', filters.limit.toString());
 
      if (params.toString()) {
        url += `?${params.toString()}`;
      }
    }
 
    return fetchApi<Lieu[]>(url);
  }
 
  /**
   * Récupère un lieu par son ID
   * @param id - ID du lieu à récupérer
   * @returns Promise<Lieu> - Le lieu correspondant
   * @throws Error - En cas d'erreur de l'API ou si le lieu n'existe pas
   * Route Django: path('lieu/<int:pk>/', LieuDetailView.as_view(), name='lieu-detail')
   */
  static async getLieuById(id: number): Promise<Lieu> {
    const url = `${this.BASE_PATH}/${id}/`;
    return fetchApi<Lieu>(url);
  }
}