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

70 lines
1.9 KiB
TypeScript

import axiosClient from '../axios/axios';
import { API_ROUTES } from '@/constants/apiRoutes';
import type {
Plan,
PlanListParams,
PlanListResponse,
PlanRequest,
} from '@/types';
function toPlanPayload(payload: PlanRequest) {
return {
name: payload.name,
slug: payload.slug,
description: payload.description,
price: payload.price,
billing_cycle: payload.billing_cycle,
trial_days: payload.trial_days,
max_projects: payload.max_projects,
max_organizations: payload.max_organizations,
max_users: payload.max_users,
max_roles: payload.max_roles,
permission_ids: payload.permission_ids,
is_active: payload.is_active,
is_custom: payload.is_custom,
};
}
export const planService = {
getPlans: async (params?: PlanListParams): Promise<PlanListResponse> => {
const response = await axiosClient.get<PlanListResponse>(
API_ROUTES.PLANS.BASE,
{
params: {
skip: params?.skip ?? 0,
limit: params?.limit ?? 10,
search_term: params?.search_term,
name: params?.name,
slug: params?.slug,
is_active: params?.is_active,
is_custom: params?.is_custom,
sort_by: params?.sort_by,
sort_order: params?.sort_order,
},
},
);
return response.data;
},
savePlan: async (payload: PlanRequest): Promise<Plan> => {
const requestPayload = toPlanPayload(payload);
const response = payload.id
? await axiosClient.put<Plan>(
API_ROUTES.PLANS.DETAIL(payload.id),
requestPayload,
)
: await axiosClient.post<Plan>(API_ROUTES.PLANS.BASE, requestPayload);
return response.data;
},
updatePlanStatus: async (id: number, isActive: boolean): Promise<Plan> => {
const response = await axiosClient.patch<Plan>(
API_ROUTES.PLANS.STATUS(id),
{
is_active: isActive,
},
);
return response.data;
},
};