79 lines
2.1 KiB
TypeScript
79 lines
2.1 KiB
TypeScript
import axiosClient from '../axios/axios';
|
|
import { API_ROUTES } from '@/constants/apiRoutes';
|
|
import type {
|
|
Tenant,
|
|
TenantCreateRequest,
|
|
TenantListParams,
|
|
TenantListResponse,
|
|
TenantUpdateRequest,
|
|
} from '@/types';
|
|
|
|
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>(
|
|
API_ROUTES.TENANTS.BASE,
|
|
{
|
|
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>(
|
|
API_ROUTES.TENANTS.BASE,
|
|
toCreatePayload(payload),
|
|
);
|
|
return response.data;
|
|
},
|
|
|
|
updateTenant: async (payload: TenantUpdateRequest): Promise<Tenant> => {
|
|
const response = await axiosClient.put<Tenant>(
|
|
API_ROUTES.TENANTS.DETAIL(payload.id),
|
|
toUpdatePayload(payload),
|
|
);
|
|
return response.data;
|
|
},
|
|
|
|
deleteTenant: async (id: number): Promise<void> => {
|
|
await axiosClient.delete(API_ROUTES.TENANTS.DETAIL(id));
|
|
},
|
|
};
|