feat: add superadmin tenant module

This commit is contained in:
2026-06-16 22:30:29 +05:30
parent 6c97f89b30
commit 6f4399a048
18 changed files with 1146 additions and 0 deletions

View File

@@ -37,6 +37,11 @@ export const clientService = {
return response.data;
},
getClientById: async (id: number): Promise<Client> => {
const response = await axiosClient.get<Client>(`${CLIENTS_ENDPOINT}/${id}`);
return response.data;
},
saveClient: async (payload: ClientRequest): Promise<Client> => {
const requestPayload = toClientPayload(payload);
const response = payload.id

View File

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

View File

@@ -0,0 +1,71 @@
import axiosClient from '../axios/axios';
import type {
Tenant,
TenantCreateRequest,
TenantListParams,
TenantListResponse,
TenantUpdateRequest,
} from '@/types';
const TENANTS_ENDPOINT = 'api/superadmin/tenants';
function toCreatePayload(payload: TenantCreateRequest) {
return {
name: payload.name,
slug: payload.slug,
client_id: payload.client_id,
plan_id: payload.plan_id,
domain: payload.domain || undefined,
description: payload.description || undefined,
admin: {
first_name: payload.admin.first_name,
last_name: payload.admin.last_name,
email: payload.admin.email,
phone_number: payload.admin.phone_number || undefined,
},
};
}
function toUpdatePayload(payload: TenantUpdateRequest) {
return {
name: payload.name,
slug: payload.slug,
client_id: payload.client_id,
plan_id: payload.plan_id,
domain: payload.domain || undefined,
description: payload.description || undefined,
};
}
export const tenantService = {
getTenants: async (params?: TenantListParams): Promise<TenantListResponse> => {
const response = await axiosClient.get<TenantListResponse>(TENANTS_ENDPOINT, {
params: {
skip: params?.skip ?? 0,
limit: params?.limit ?? 10,
search_term: params?.search_term,
is_active: params?.is_active,
sort_by: params?.sort_by,
sort_order: params?.sort_order,
},
});
return response.data;
},
createTenant: async (payload: TenantCreateRequest): Promise<Tenant> => {
const response = await axiosClient.post<Tenant>(TENANTS_ENDPOINT, toCreatePayload(payload));
return response.data;
},
updateTenant: async (payload: TenantUpdateRequest): Promise<Tenant> => {
const response = await axiosClient.put<Tenant>(
`${TENANTS_ENDPOINT}/${payload.id}`,
toUpdatePayload(payload),
);
return response.data;
},
deleteTenant: async (id: number): Promise<void> => {
await axiosClient.delete(`${TENANTS_ENDPOINT}/${id}`);
},
};