Proje: OkulUp · Hub: OkulUp — Conventions

Service Layer Pattern

Kurallar

Dosya Organizasyonu

  • Her resource için ayrı dosya: src/services/api/{resource}.ts
  • Named exports, default export yok
  • Barrel export: src/services/api/index.ts

Fonksiyon Return Pattern

// List → PaginatedResponse<T> döner (response.data'yı olduğu gibi)
export async function getAnnouncements(params): Promise<PaginatedResponse<Announcement>> {
  const response = await apiClient.get('/announcements', { params });
  return response.data;
}
 
// Detail/Create/Update → T döner (response.data.data unwrap)
export async function getAnnouncement(id: number): Promise<Announcement> {
  const response = await apiClient.get<ApiResponse<Announcement>>(`/announcements/${id}`);
  return response.data.data;
}
 
// Delete → void
export async function deleteAnnouncement(id: number): Promise<void> {
  await apiClient.delete(`/announcements/${id}`);
}
 
// File Upload → Content-Type override, createFormData() utility
export async function uploadMedia(file: MediaFile): Promise<Media> {
  const formData = createFormData(file);
  const response = await apiClient.post('/media', formData, {
    headers: { 'Content-Type': 'multipart/form-data' }
  });
  return response.data.data;
}

Endpoint Format

apiClient.get('/endpoint')/api prefix Axios baseURL’inde var, tekrar yazılmaz.