70 lines
1.9 KiB
TypeScript
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;
|
|
},
|
|
};
|