feat(FE-41): create BaseApiService class

This commit is contained in:
ValdiANS
2025-10-05 12:59:15 +07:00
parent 508a530c3a
commit f7b0933c0f
+82
View File
@@ -0,0 +1,82 @@
import axios from 'axios';
import { httpClient, httpClientFetcher } from '@/services/http/client';
import { BaseApiResponse } from '@/types/api/api-general';
export class BaseApiService<T, CreatePayloadGeneric, UpdatePayloadGeneric> {
basePath: string;
constructor(basePath: string) {
this.basePath = basePath;
}
async getAllFetcher(endpoint: string): Promise<BaseApiResponse<T[]>> {
return await httpClientFetcher<BaseApiResponse<T[]>>(endpoint);
}
async getSingle(id: number) {
try {
const getSinglePath = `${this.basePath}/${id}`;
const getSingleRes = await httpClient<BaseApiResponse<T>>(getSinglePath);
return getSingleRes;
} catch (error) {
if (axios.isAxiosError<BaseApiResponse<T>>(error)) {
return error.response?.data;
}
return undefined;
}
}
async create(payload: CreatePayloadGeneric) {
try {
const createRes = await httpClient<BaseApiResponse<T>>(this.basePath, {
method: 'POST',
body: payload,
});
return createRes;
} catch (error: unknown) {
if (axios.isAxiosError<BaseApiResponse<T>>(error)) {
return error.response?.data;
}
return undefined;
}
}
async update(id: number, payload: UpdatePayloadGeneric) {
try {
const updatePath = `${this.basePath}/${id}`;
const updateRes = await httpClient<BaseApiResponse<T>>(updatePath, {
method: 'PATCH',
body: payload,
});
return updateRes;
} catch (error: unknown) {
if (axios.isAxiosError<BaseApiResponse<T>>(error)) {
return error.response?.data;
}
return undefined;
}
}
async delete(id: number) {
try {
const deletePath = `${this.basePath}/${id}`;
const deleteRes = await httpClient<BaseApiResponse>(deletePath, {
method: 'DELETE',
});
return deleteRes;
} catch (error) {
if (axios.isAxiosError<BaseApiResponse>(error)) {
return error.response?.data;
}
return undefined;
}
}
}