import axios from 'axios'; import { httpClient, httpClientFetcher } from '@/services/http/client'; import { BaseApiResponse } from '@/types/api/api-general'; export class BaseApiService { basePath: string; header?: Record; constructor(basePath: string, header?: Record) { this.basePath = basePath; this.header = header; } 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) { const isFormData = typeof FormData !== 'undefined' && payload instanceof FormData; try { const headers = isFormData ? { ...(this.header ?? {}) } : { 'Content-Type': 'application/json', ...(this.header ?? {}) }; const createRes = await httpClient>(this.basePath, { method: 'POST', body: payload, headers, }); return createRes; } catch (error: unknown) { if (axios.isAxiosError>(error)) { return error.response?.data; } return undefined; } } async update(id: number, payload: UpdatePayloadGeneric) { const isFormData = typeof FormData !== 'undefined' && payload instanceof FormData; try { const updatePath = `${this.basePath}/${id}`; const headers = isFormData ? { ...(this.header ?? {}) } : { 'Content-Type': 'application/json', ...(this.header ?? {}) }; const updateRes = await httpClient>(updatePath, { method: 'PATCH', body: payload, headers, }); 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; } } }