import { API_PATHS } from "@/api/api-paths"; import { apiDelete, apiGet, apiPost, apiPut } from "@/api/api"; import { handleApiResponse, handlePaginatedResponse } from "@/api/handle-api-response"; import { mapLocation, mapLocationListItems, mapLocationSites, mapLocationToBackend, } from "@/domain/locations/mappers/location-mapper"; import type { Location, LocationSite, LocationsListParams, LocationsListResult, } from "@/domain/locations/types/location"; function buildSearchParams(params: LocationsListParams): Record { return { search: params.search ?? "", page: params.page ?? 1, pageSize: params.pageSize ?? 12, }; } export const locationsApi = { getList: async (params: LocationsListParams = {}): Promise => { const searchParams = buildSearchParams(params); const data = await apiGet(API_PATHS.location.getList, { searchParams }); const paginated = handlePaginatedResponse(data, { page: params.page, pageSize: params.pageSize, }); return { items: mapLocationListItems(paginated.items), totalCount: paginated.totalCount, page: paginated.page, pageSize: paginated.pageSize, }; }, getById: async (id: string | number): Promise => { const data = await apiGet(`${API_PATHS.rest.locations}/${id}`); return mapLocation(handleApiResponse(data)); }, getSites: async (search?: string): Promise => { const data = await apiGet(API_PATHS.location.sites, { searchParams: search?.trim() ? { search: search.trim() } : undefined, }); const items = handleApiResponse(data); return Array.isArray(items) ? mapLocationSites(items) : []; }, create: async (payload: unknown): Promise => { const data = await apiPost(API_PATHS.rest.locations, mapLocationToBackend(payload)); return mapLocation(handleApiResponse(data)); }, update: async (id: string | number, payload: unknown): Promise => { const data = await apiPut( `${API_PATHS.rest.locations}/${id}`, mapLocationToBackend(payload), ); return mapLocation(handleApiResponse(data)); }, delete: async (id: string | number): Promise => { await apiDelete(`${API_PATHS.rest.locations}/${id}`); }, };