All files / services disbursementApi.ts

77.77% Statements 7/9
100% Branches 4/4
71.42% Functions 5/7
77.77% Lines 7/9

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72                                                                1x 1x   5x   5x               5x       5x                                         1x  
import type {
	Disbursement,
	DisbursementHistoryPagination,
	DisbursementHistoryQuery,
	MarkDisbursedPayload
} from '../types/disbursement';
import {api} from './api';
 
interface PendingResponse {
	success: boolean;
	data: {disbursements: Disbursement[]};
}
 
interface HistoryResponse {
	success: boolean;
	data: {
		disbursements: Disbursement[];
		pagination: DisbursementHistoryPagination;
	};
}
 
interface MarkDisbursedResponse {
	success: boolean;
	message: string;
	data: {disbursement: Disbursement};
}
 
export interface DisbursementHistoryResult {
	disbursements: Disbursement[];
	pagination: DisbursementHistoryPagination;
}
 
export const disbursementApi = api.injectEndpoints({
	endpoints: (builder) => ({
		getPendingDisbursements: builder.query<Disbursement[], void>({
			query: () => '/admin/disbursements/pending',
			transformResponse: (response: PendingResponse) =>
				response.data.disbursements,
			providesTags: ['Disbursement']
		}),
 
		getDisbursementHistory: builder.query<
			DisbursementHistoryResult,
			DisbursementHistoryQuery
		>({
			query: ({status = 'disbursed', page = 1, perPage = 20} = {}) => ({
				url: '/admin/disbursements',
				params: {status, page, perPage}
			}),
			transformResponse: (response: HistoryResponse) => response.data,
			providesTags: ['Disbursement']
		}),
 
		markDisbursed: builder.mutation<Disbursement, MarkDisbursedPayload>({
			query: ({disbursementId, ...body}) => ({
				url: `/admin/disbursements/${disbursementId}/mark-disbursed`,
				method: 'POST',
				body
			}),
			transformResponse: (response: MarkDisbursedResponse) =>
				response.data.disbursement,
			invalidatesTags: ['Disbursement', 'Loan', 'Account', 'AccountSummary']
		})
	})
});
 
export const {
	useGetPendingDisbursementsQuery,
	useGetDisbursementHistoryQuery,
	useMarkDisbursedMutation
} = disbursementApi;