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 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 | 6x 6x 6x 7x 7x 5x 5x 5x 5x 5x 5x 5x 5x 5x 7x 2x 2x 2x 3x 3x 2x 3x 6x 1x 1x 1x 1x 1x 1x | import { fetchApi } from '@/lib/api/core/fetchWrappers';
import { Epreuve } from '@/types/sportEvenement/epreuve';
// Types pour les requêtes
export interface CreateEpreuveRequest {
libelle: string;
disciplineId: number;
}
export interface UpdateEpreuveRequest {
id: number;
libelle: string;
disciplineId: number;
evenementId?: number | null;
}
export interface EpreuveFilters {
libelle?: string;
disciplineId?: number;
page?: number;
limit?: number;
sortBy?: 'nom' | 'discipline';
sortOrder?: 'asc' | 'desc';
}
// Service pour la gestion des épreuves
export class EpreuveService {
private static readonly BASE_PATH = '/epreuve';
/**
* Récupère toutes les épreuves avec filtres optionnels
* Route Django: path('epreuve/', EpreuveListView.as_view(), name='epreuve-list')
*/
static async getAllEpreuves(filters?: EpreuveFilters): Promise<Epreuve[]> {
let url = `${this.BASE_PATH}/`;
if (filters) {
const params = new URLSearchParams();
if (filters.libelle) params.append('search', filters.libelle);
if (filters.disciplineId) params.append('disciplineId', filters.disciplineId.toString());
if (filters.page) params.append('page', filters.page.toString());
if (filters.limit) params.append('limit', filters.limit.toString());
if (filters.sortBy) params.append('sortBy', filters.sortBy);
if (filters.sortOrder) params.append('sortOrder', filters.sortOrder);
if (params.toString()) {
url += `?${params.toString()}`;
}
}
return fetchApi<Epreuve[]>(url);
}
/**
* Récupère une épreuve par son ID
* Route Django: path('epreuve/<int:pk>/', EpreuveDetailView.as_view(), name='epreuve-detail')
*/
static async getEpreuveById(id: number): Promise<Epreuve> {
return fetchApi<Epreuve>(`${this.BASE_PATH}/${id}/`);
}
/**
* Crée une nouvelle épreuve
* Route Django: path('epreuve/create/', EpreuveCreateView.as_view(), name='epreuve-create')
*/
static async createEpreuve(data: CreateEpreuveRequest): Promise<Epreuve> {
const payload = {
libelle: data.libelle,
discipline_id: data.disciplineId,
evenement_id: null
};
return fetchApi<Epreuve>(`${this.BASE_PATH}/create/`, {
method: 'POST',
body: JSON.stringify(payload),
});
}
/**
* Met à jour une épreuve existante
* Route Django: path('epreuve/update/<int:pk>/', EpreuveUpdateView.as_view(), name='epreuve-update')
*/
static async updateEpreuve(data: UpdateEpreuveRequest): Promise<Epreuve> {
const payload = {
libelle: data.libelle,
discipline_id: data.disciplineId,
evenement_id: data.evenementId ?? null
};
return fetchApi<Epreuve>(`${this.BASE_PATH}/update/${data.id}/`, {
method: 'PUT',
body: JSON.stringify(payload),
});
}
/**
* Supprime une épreuve
* Route Django: path('epreuve/delete/<int:pk>/', EpreuveDeleteView.as_view(), name='epreuve-delete')
*/
static async deleteEpreuve(id: number): Promise<void> {
return fetchApi<void>(`${this.BASE_PATH}/delete/${id}/`, {
method: 'DELETE',
});
}
/**
* Recherche des épreuves (si implémentée côté backend)
* Note: Cette route n'existe pas dans les routes Django fournies
*/
static async searchEpreuves(query: string): Promise<Epreuve[]> {
return fetchApi<Epreuve[]>(`${this.BASE_PATH}/?search=${encodeURIComponent(query)}`);
}
}
// Fonctions utilitaires (approche fonctionnelle alternative)
export const epreuveApi = {
getAll: (filters?: EpreuveFilters) => EpreuveService.getAllEpreuves(filters),
getById: (id: number) => EpreuveService.getEpreuveById(id),
create: (data: CreateEpreuveRequest) => EpreuveService.createEpreuve(data),
update: (data: UpdateEpreuveRequest) => EpreuveService.updateEpreuve(data),
delete: (id: number) => EpreuveService.deleteEpreuve(id),
search: (query: string) => EpreuveService.searchEpreuves(query),
};
|