72 lines
2.3 KiB
TypeScript
72 lines
2.3 KiB
TypeScript
import { baseApi } from '../../../services/api/baseApi';
|
|
import type { UserProfile, AccountSummary } from '../../../types/app';
|
|
import { demoUser, demoAccounts } from '../../../constants/mockData';
|
|
import { resolveWithMock } from '../../../services/api/serviceHelpers';
|
|
|
|
export const profileApi = baseApi.injectEndpoints({
|
|
endpoints: (builder) => ({
|
|
getProfile: builder.query<UserProfile, void>({
|
|
queryFn: () =>
|
|
resolveWithMock({
|
|
mockData: demoUser,
|
|
request: async () => demoUser,
|
|
}),
|
|
providesTags: ['Profile'],
|
|
}),
|
|
updateProfile: builder.mutation<UserProfile, Partial<UserProfile>>({
|
|
queryFn: (updates) => {
|
|
const updated = { ...demoUser, ...updates };
|
|
return resolveWithMock({
|
|
mockData: updated,
|
|
request: async () => updated,
|
|
});
|
|
},
|
|
invalidatesTags: ['Profile'],
|
|
}),
|
|
getLinkedAccounts: builder.query<AccountSummary[], void>({
|
|
queryFn: () =>
|
|
resolveWithMock({
|
|
mockData: demoAccounts,
|
|
request: async () => demoAccounts,
|
|
}),
|
|
providesTags: ['Accounts'],
|
|
}),
|
|
addLinkedAccount: builder.mutation<AccountSummary, Partial<AccountSummary>>({
|
|
queryFn: (accountData) => {
|
|
const newAccount = {
|
|
id: `acc_${Math.random().toString(36).substr(2, 9)}`,
|
|
type: 'Savings',
|
|
accountHolder: demoUser.firstName + ' ' + demoUser.lastName,
|
|
branch: 'Mumbai Main',
|
|
maskedNumber: `XXXX ${accountData.maskedNumber?.slice(-4) || '9999'}`,
|
|
availableBalance: 0,
|
|
currentBalance: 0,
|
|
currency: 'INR',
|
|
...accountData,
|
|
} as AccountSummary;
|
|
return resolveWithMock({
|
|
mockData: newAccount,
|
|
request: async () => newAccount,
|
|
});
|
|
},
|
|
invalidatesTags: ['Accounts'],
|
|
}),
|
|
removeLinkedAccount: builder.mutation<void, string>({
|
|
queryFn: () =>
|
|
resolveWithMock<void>({
|
|
mockData: undefined as any,
|
|
request: async () => undefined as any,
|
|
}),
|
|
invalidatesTags: ['Accounts'],
|
|
}),
|
|
}),
|
|
});
|
|
|
|
export const {
|
|
useGetProfileQuery,
|
|
useUpdateProfileMutation,
|
|
useGetLinkedAccountsQuery,
|
|
useAddLinkedAccountMutation,
|
|
useRemoveLinkedAccountMutation,
|
|
} = profileApi;
|