Files
road-monitoring-ui/src/services/api/chainage.service.ts

100 lines
2.4 KiB
TypeScript

import axiosClient from '../axios/axios';
import { API_ROUTES } from '@/constants/apiRoutes';
import {
Chainage,
ChainageCreate,
ChainageUpdate,
PaginatedResponse,
PaginationParams,
} from '@/types';
/**
* Chainage Service
*/
export const chainageService = {
/**
* Fetch all chainages
*/
getChainages: async (
params?: PaginationParams & { search_term?: string },
): Promise<PaginatedResponse<Chainage>> => {
const skip = params?.skip ?? 0;
const limit = params?.limit ?? 100;
const response = await axiosClient.get<PaginatedResponse<Chainage>>(
API_ROUTES.CHAINAGES.BASE,
{
params: { skip, limit, search_term: params?.search_term },
},
);
return response.data;
},
/**
* Fetch chainages filtered by package ID
*/
getChainagesByPackage: async (
packageId: string,
params?: PaginationParams & { search_term?: string },
): Promise<PaginatedResponse<Chainage>> => {
const skip = params?.skip ?? 0;
const limit = params?.limit ?? 100;
const response = await axiosClient.get<PaginatedResponse<Chainage>>(
API_ROUTES.CHAINAGES.BASE,
{
params: {
package_id: packageId,
skip,
limit,
search_term: params?.search_term,
},
},
);
return response.data;
},
/**
* Fetch a chainage by ID
*/
getChainageById: async (chainageId: string): Promise<Chainage> => {
const response = await axiosClient.get<Chainage>(
API_ROUTES.CHAINAGES.DETAIL(chainageId),
);
return response.data;
},
/**
* Create a new chainage
*/
createChainage: async (data: ChainageCreate): Promise<Chainage> => {
const response = await axiosClient.post<Chainage>(
API_ROUTES.CHAINAGES.BASE,
data,
);
return response.data;
},
/**
* Update an existing chainage
*/
updateChainage: async (
chainageId: string,
data: ChainageUpdate,
): Promise<Chainage> => {
const response = await axiosClient.put<Chainage>(
API_ROUTES.CHAINAGES.DETAIL(chainageId),
data,
);
return response.data;
},
/**
* Delete a chainage
*/
deleteChainage: async (chainageId: string): Promise<{ message: string }> => {
const response = await axiosClient.delete<{ message: string }>(
API_ROUTES.CHAINAGES.DETAIL(chainageId),
);
return response.data;
},
};