From 6dec9268c95641820fd38ad766f34d2734e42f04 Mon Sep 17 00:00:00 2001 From: ValdiANS Date: Sat, 4 Oct 2025 12:22:25 +0700 Subject: [PATCH] feat(FE-41): create Master Data API Service class --- src/services/api/master-data.ts | 93 +++++++++++++++++++++++++++++++++ 1 file changed, 93 insertions(+) create mode 100644 src/services/api/master-data.ts diff --git a/src/services/api/master-data.ts b/src/services/api/master-data.ts new file mode 100644 index 00000000..10d7bbee --- /dev/null +++ b/src/services/api/master-data.ts @@ -0,0 +1,93 @@ +import axios from 'axios'; +import { httpClient, httpClientFetcher } from '@/services/http/client'; +import { BaseApiResponse } from '@/types/api/api-general'; +import { + CreateUomPayload, + Uom, + UpdateUomPayload, +} from '@/types/api/master-data/uom'; + +export class MasterDataApi { + 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; + } + } +} + +export const UomApi = new MasterDataApi< + Uom, + CreateUomPayload, + UpdateUomPayload +>('/master-data/uoms');