import axios from 'axios'; import { httpClient, httpClientFetcher } from '@/services/http/client'; import { BaseApiResponse } from '@/types/api/api-general'; export class BaseApiService { basePath: string; constructor(basePath: string) { this.basePath = basePath; } async getAllFetcher(endpoint: string): Promise> { return await httpClientFetcher>(endpoint); } async getSingle(id: number) { try { const getSinglePath = `${this.basePath}/${id}`; const getSingleRes = await httpClient>(getSinglePath); return getSingleRes; } catch (error) { if (axios.isAxiosError>(error)) { return error.response?.data; } return undefined; } } async create(payload: CreatePayloadGeneric) { try { const createRes = await httpClient>(this.basePath, { method: 'POST', body: payload, }); return createRes; } catch (error: unknown) { if (axios.isAxiosError>(error)) { return error.response?.data; } return undefined; } } async update(id: number, payload: UpdatePayloadGeneric) { try { const updatePath = `${this.basePath}/${id}`; const updateRes = await httpClient>(updatePath, { method: 'PATCH', body: payload, }); return updateRes; } catch (error: unknown) { if (axios.isAxiosError>(error)) { return error.response?.data; } return undefined; } } async delete(id: number) { try { const deletePath = `${this.basePath}/${id}`; const deleteRes = await httpClient(deletePath, { method: 'DELETE', }); return deleteRes; } catch (error) { if (axios.isAxiosError(error)) { return error.response?.data; } return undefined; } } }