Files
CBS-Mobile-App/src/modules/profile/services/profileApi.ts
T

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;