feat: add superadmin plan management module

This commit is contained in:
2026-06-16 18:55:48 +05:30
parent d8587a43d4
commit 6c97f89b30
19 changed files with 1082 additions and 1 deletions

View File

@@ -10,3 +10,4 @@ export * from './permission.service';
export * from './role.service';
export * from './user.service';
export * from './client.service';
export * from './plan.service';

View File

@@ -1,9 +1,16 @@
import axiosClient from '../axios/axios';
import type { PermissionResponse } from '@/types';
import type { PermissionResponse, PermissionTreeNode } from '@/types';
export const permissionService = {
getPermissions: async (): Promise<PermissionResponse> => {
const response = await axiosClient.get<PermissionResponse>('api/permissions/my-permissions');
return response.data;
},
getOrganizationPermissionTree: async (): Promise<PermissionTreeNode[]> => {
const response = await axiosClient.get<PermissionTreeNode[]>(
'api/permissions/organization-tree',
);
return response.data;
},
};

View File

@@ -0,0 +1,56 @@
import axiosClient from '../axios/axios';
import type { Plan, PlanListParams, PlanListResponse, PlanRequest } from '@/types';
const PLANS_ENDPOINT = 'api/superadmin/plans';
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>(PLANS_ENDPOINT, {
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>(`${PLANS_ENDPOINT}/${payload.id}`, requestPayload)
: await axiosClient.post<Plan>(PLANS_ENDPOINT, requestPayload);
return response.data;
},
updatePlanStatus: async (id: number, isActive: boolean): Promise<Plan> => {
const response = await axiosClient.patch<Plan>(`${PLANS_ENDPOINT}/${id}/status`, {
is_active: isActive,
});
return response.data;
},
};