173 lines
5.1 KiB
TypeScript
173 lines
5.1 KiB
TypeScript
import type {
|
|
AcceptServiceApplicationRequest,
|
|
AcceptServiceApplicationResponse,
|
|
AssigneeOption,
|
|
BeneficiaryDetailResponse,
|
|
BeneficiaryTagOption,
|
|
ConfirmUploadResponse,
|
|
CompleteServiceCaseRequest,
|
|
CompleteServiceCaseResponse,
|
|
CreateServiceRecordRequest,
|
|
CreateUploadIntentRequest,
|
|
CreateUploadIntentResponse,
|
|
DownloadUrlResponse,
|
|
PaginatedBeneficiariesResponse,
|
|
PaginatedServiceCasesResponse,
|
|
ReplaceCaseAssigneesRequest,
|
|
ServiceCaseDetailResponse,
|
|
ServiceCategory,
|
|
ServiceCaseStatus,
|
|
ServiceRecordResponse,
|
|
TransitionServiceApplicationRequest,
|
|
UpdateBeneficiaryRequest,
|
|
UpdateServiceRecordRequest,
|
|
} from '@lehuo/contracts';
|
|
|
|
import { apiRequest } from './api-client';
|
|
|
|
function queryString(values: Record<string, string | number | boolean | undefined>): string {
|
|
const params = new URLSearchParams();
|
|
Object.entries(values).forEach(([key, value]) => {
|
|
if (value !== undefined && value !== '') params.set(key, String(value));
|
|
});
|
|
return params.toString();
|
|
}
|
|
|
|
export function transitionServiceApplication(
|
|
publicId: string,
|
|
input: TransitionServiceApplicationRequest,
|
|
): Promise<{ status: string }> {
|
|
return apiRequest(
|
|
`/api/v1/admin/service-applications/${encodeURIComponent(publicId)}/transition`,
|
|
{
|
|
method: 'POST',
|
|
body: JSON.stringify(input),
|
|
},
|
|
);
|
|
}
|
|
|
|
export function acceptServiceApplication(
|
|
publicId: string,
|
|
input: AcceptServiceApplicationRequest,
|
|
): Promise<AcceptServiceApplicationResponse> {
|
|
return apiRequest(`/api/v1/admin/service-applications/${encodeURIComponent(publicId)}/accept`, {
|
|
method: 'POST',
|
|
body: JSON.stringify(input),
|
|
});
|
|
}
|
|
|
|
export function fetchBeneficiaryTags(): Promise<BeneficiaryTagOption[]> {
|
|
return apiRequest('/api/v1/admin/beneficiaries/tags');
|
|
}
|
|
|
|
export function fetchBeneficiaries(query: {
|
|
page: number;
|
|
pageSize: number;
|
|
primaryCategory?: ServiceCategory;
|
|
status?: string;
|
|
keyCareFlag?: boolean;
|
|
}): Promise<PaginatedBeneficiariesResponse> {
|
|
return apiRequest(`/api/v1/admin/beneficiaries?${queryString(query)}`);
|
|
}
|
|
|
|
export function fetchBeneficiary(publicId: string): Promise<BeneficiaryDetailResponse> {
|
|
return apiRequest(`/api/v1/admin/beneficiaries/${encodeURIComponent(publicId)}`);
|
|
}
|
|
|
|
export function updateBeneficiary(
|
|
publicId: string,
|
|
input: UpdateBeneficiaryRequest,
|
|
): Promise<BeneficiaryDetailResponse> {
|
|
return apiRequest(`/api/v1/admin/beneficiaries/${encodeURIComponent(publicId)}`, {
|
|
method: 'PUT',
|
|
body: JSON.stringify(input),
|
|
});
|
|
}
|
|
|
|
export function fetchAssigneeOptions(): Promise<AssigneeOption[]> {
|
|
return apiRequest('/api/v1/admin/service-cases/assignee-options');
|
|
}
|
|
|
|
export function fetchServiceCases(query: {
|
|
page: number;
|
|
pageSize: number;
|
|
status?: ServiceCaseStatus;
|
|
category?: ServiceCategory;
|
|
caseNo?: string;
|
|
}): Promise<PaginatedServiceCasesResponse> {
|
|
return apiRequest(`/api/v1/admin/service-cases?${queryString(query)}`);
|
|
}
|
|
|
|
export function fetchServiceCase(publicId: string): Promise<ServiceCaseDetailResponse> {
|
|
return apiRequest(`/api/v1/admin/service-cases/${encodeURIComponent(publicId)}`);
|
|
}
|
|
|
|
export function startServiceCase(publicId: string): Promise<ServiceCaseDetailResponse> {
|
|
return apiRequest(`/api/v1/admin/service-cases/${encodeURIComponent(publicId)}/start`, {
|
|
method: 'POST',
|
|
body: '{}',
|
|
});
|
|
}
|
|
|
|
export function completeServiceCase(
|
|
publicId: string,
|
|
input: CompleteServiceCaseRequest,
|
|
): Promise<CompleteServiceCaseResponse> {
|
|
return apiRequest(`/api/v1/admin/service-cases/${encodeURIComponent(publicId)}/complete`, {
|
|
method: 'POST',
|
|
body: JSON.stringify(input),
|
|
});
|
|
}
|
|
|
|
export function replaceCaseAssignees(
|
|
publicId: string,
|
|
input: ReplaceCaseAssigneesRequest,
|
|
): Promise<ServiceCaseDetailResponse> {
|
|
return apiRequest(`/api/v1/admin/service-cases/${encodeURIComponent(publicId)}/assignees`, {
|
|
method: 'PUT',
|
|
body: JSON.stringify(input),
|
|
});
|
|
}
|
|
|
|
export function createServiceRecord(
|
|
publicId: string,
|
|
input: CreateServiceRecordRequest,
|
|
): Promise<ServiceRecordResponse> {
|
|
return apiRequest(`/api/v1/admin/service-cases/${encodeURIComponent(publicId)}/records`, {
|
|
method: 'POST',
|
|
body: JSON.stringify(input),
|
|
});
|
|
}
|
|
|
|
export function updateServiceRecord(
|
|
casePublicId: string,
|
|
recordPublicId: string,
|
|
input: UpdateServiceRecordRequest,
|
|
): Promise<ServiceRecordResponse> {
|
|
return apiRequest(
|
|
`/api/v1/admin/service-cases/${encodeURIComponent(casePublicId)}/records/${encodeURIComponent(recordPublicId)}`,
|
|
{ method: 'PATCH', body: JSON.stringify(input) },
|
|
);
|
|
}
|
|
|
|
export function createUploadIntent(
|
|
casePublicId: string,
|
|
input: CreateUploadIntentRequest,
|
|
): Promise<CreateUploadIntentResponse> {
|
|
return apiRequest(
|
|
`/api/v1/service-cases/${encodeURIComponent(casePublicId)}/files/upload-intents`,
|
|
{ method: 'POST', body: JSON.stringify(input) },
|
|
);
|
|
}
|
|
|
|
export function confirmUpload(publicId: string): Promise<ConfirmUploadResponse> {
|
|
return apiRequest(`/api/v1/files/${encodeURIComponent(publicId)}/confirm`, {
|
|
method: 'POST',
|
|
body: '{}',
|
|
});
|
|
}
|
|
|
|
export function fetchDownloadUrl(publicId: string): Promise<DownloadUrlResponse> {
|
|
return apiRequest(`/api/v1/files/${encodeURIComponent(publicId)}/download-url`);
|
|
}
|