100 lines
2.4 KiB
TypeScript
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;
|
|
},
|
|
};
|