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 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 | 1x 1x 1x | import {api} from './api';
import type {
CheckEligibilityResponse,
Loan,
LoanResponse,
LoansResponse,
PaymentScheduleItem,
PendingLoansResponse
} from '../types/loan';
export const loanApi = api.injectEndpoints({
endpoints: (builder) => ({
checkEligibility: builder.query<CheckEligibilityResponse, void>({
query: () => '/loans/eligibility',
providesTags: ['Loan']
}),
getMyLoans: builder.query<LoansResponse, void>({
query: () => '/loans',
providesTags: ['Loan']
}),
getLoan: builder.query<{
success: boolean;
data: {
loan: Loan;
paymentSchedule?: PaymentScheduleItem[];
};
}, number>({
query: (id) => `/loans/${id}`,
providesTags: (_r, _e, id) => [{type: 'Loan', id}]
}),
requestLoan: builder.mutation<LoanResponse, { amount: string; termMonths: number }>({
query: (body) => ({url: '/loans', method: 'POST', body}),
invalidatesTags: ['Loan', 'AccountSummary', 'Account']
}),
getPendingLoans: builder.query<PendingLoansResponse, void>({
query: () => '/admin/loans/pending',
providesTags: ['Loan']
}),
getApprovedLoans: builder.query<LoansResponse, void>({
query: () => '/admin/loans/approved',
providesTags: ['Loan']
}),
getActiveLoans: builder.query<LoansResponse, void>({
query: () => '/admin/loans/active',
providesTags: ['Loan']
}),
approveLoan: builder.mutation<LoanResponse, {
id: number;
payload?: { approvedAmount?: string; approvedTermMonths?: number; interestRate?: string; notes?: string };
}>({
query: ({id, payload}) => ({url: `/admin/loans/${id}/approve`, method: 'POST', body: payload ?? {}}),
invalidatesTags: ['Loan']
}),
denyLoan: builder.mutation<LoanResponse, { id: number; payload: { reason: string } }>({
query: ({id, payload}) => ({url: `/admin/loans/${id}/deny`, method: 'POST', body: payload}),
invalidatesTags: ['Loan']
}),
makePayment: builder.mutation<{
success: boolean;
message: string;
data: { loan: Loan; paymentId: number; amountPaid: string };
}, number>({
query: (loanId) => ({url: `/loans/${loanId}/payment`, method: 'POST'}),
invalidatesTags: ['Loan', 'Account', 'AccountSummary', 'Transaction']
}),
makeAdditionalPayment: builder.mutation<{
success: boolean;
message: string;
data: { loan: Loan; paymentId: number; amountPaid: string };
}, { loanId: number; amount: string }>({
query: ({loanId, amount}) => ({url: `/loans/${loanId}/additional-payment`, method: 'POST', body: {amount}}),
invalidatesTags: ['Loan', 'Account', 'AccountSummary', 'Transaction']
}),
acceptLoan: builder.mutation<LoanResponse, number>({
query: (loanId) => ({url: `/loans/${loanId}/accept`, method: 'POST'}),
invalidatesTags: ['Loan']
}),
declineLoan: builder.mutation<LoanResponse, { loanId: number; reason: string }>({
query: ({loanId, reason}) => ({url: `/loans/${loanId}/decline`, method: 'POST', body: {reason}}),
invalidatesTags: ['Loan']
})
})
});
export const {
useCheckEligibilityQuery,
useGetMyLoansQuery,
useGetLoanQuery,
useRequestLoanMutation,
useGetPendingLoansQuery,
useGetApprovedLoansQuery,
useGetActiveLoansQuery,
useApproveLoanMutation,
useDenyLoanMutation,
useMakePaymentMutation,
useMakeAdditionalPaymentMutation,
useAcceptLoanMutation,
useDeclineLoanMutation
} = loanApi;
|