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

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));
},
};