import { API_PATHS } from "@/api/api-paths"; import { apiDelete, apiGet, apiPost, apiPut } from "@/api/api"; import { handleApiResponse, handlePaginatedResponse } from "@/api/handle-api-response"; import { mapVendor, mapVendorListItems, mapVendorPortalToken, mapVendorToBackend, } from "@/domain/vendors/mappers/vendor-mapper"; import type { Vendor, VendorPortalToken, VendorsListParams, VendorsListResult, } from "@/domain/vendors/types/vendor"; function buildListParams(params: VendorsListParams): Record { return { search: params.search ?? "", page: params.page ?? 1, pageSize: params.pageSize ?? 12, }; } export const vendorsApi = { getList: async (params: VendorsListParams = {}): Promise => { const data = await apiGet(API_PATHS.vendor.getList, { searchParams: buildListParams(params), }); const paginated = handlePaginatedResponse(data, { page: params.page, pageSize: params.pageSize, }); return { items: mapVendorListItems(paginated.items), totalCount: paginated.totalCount, page: paginated.page, pageSize: paginated.pageSize, }; }, getById: async (id: string | number): Promise => { const data = await apiGet(`${API_PATHS.rest.vendors}/${id}`); return mapVendor(handleApiResponse(data)); }, create: async (payload: unknown): Promise => { const data = await apiPost(API_PATHS.rest.vendors, mapVendorToBackend(payload)); return mapVendor(handleApiResponse(data)); }, update: async (id: string | number, payload: unknown): Promise => { const data = await apiPut( `${API_PATHS.rest.vendors}/${id}`, mapVendorToBackend(payload), ); return mapVendor(handleApiResponse(data)); }, delete: async (id: string | number): Promise => { await apiDelete(`${API_PATHS.rest.vendors}/${id}`); }, getPortalToken: async (id: string | number): Promise => { const data = await apiGet(`${API_PATHS.rest.vendors}/${id}/portal-token`); return mapVendorPortalToken(handleApiResponse(data)); }, rotatePortalToken: async (id: string | number): Promise => { const data = await apiPost(`${API_PATHS.rest.vendors}/${id}/portal-token/rotate`); return mapVendorPortalToken(handleApiResponse(data)); }, revokePortalToken: async (id: string | number): Promise => { await apiPost(`${API_PATHS.rest.vendors}/${id}/portal-token/revoke`); }, };