From bf9844aca859a94f100f875c1bcdc077a4177546 Mon Sep 17 00:00:00 2001 From: Radu-Cristian Popa Date: Fri, 6 Sep 2024 09:33:10 +0300 Subject: [PATCH] feat(wallet/frontend): add temporary card service (#1554) * Add initial cards api * Add card service mock * Format --- packages/wallet/frontend/src/lib/api/card.ts | 175 ++++++++++++++++++ .../wallet/frontend/src/pages/card/index.tsx | 1 + 2 files changed, 176 insertions(+) create mode 100644 packages/wallet/frontend/src/lib/api/card.ts diff --git a/packages/wallet/frontend/src/lib/api/card.ts b/packages/wallet/frontend/src/lib/api/card.ts new file mode 100644 index 000000000..a0b522518 --- /dev/null +++ b/packages/wallet/frontend/src/lib/api/card.ts @@ -0,0 +1,175 @@ +import { + getError, + httpClient, + type ErrorResponse, + type SuccessResponse +} from '../httpClient' + +// TODO: update interface - can be moved to shared folder as well +export interface IUserCard { + name: string + number: string + expiry: string + cvv: number + isFrozen: boolean +} + +type GetDetailsResponse = SuccessResponse +type GetDetailsResult = GetDetailsResponse | ErrorResponse + +type TerminateCardResult = SuccessResponse | ErrorResponse + +type FreezeResult = SuccessResponse | ErrorResponse + +type UnfreezeResult = SuccessResponse | ErrorResponse + +type UpdateSpendingLimitResult = SuccessResponse | ErrorResponse + +type ChangePinResult = SuccessResponse | ErrorResponse + +interface UserCardService { + getDetails(cookies?: string): Promise + terminate(): Promise + freeze(): Promise + unfreeze(): Promise + updateSpendingLimit(): Promise + changePin(): Promise +} + +const createCardService = (): UserCardService => ({ + async getDetails(cookies) { + try { + const response = await httpClient + .get(`card`, { + headers: { + ...(cookies ? { Cookie: cookies } : {}) + } + }) + .json() + return response + } catch (error) { + return getError(error, '[TODO] UPDATE ME!') + } + }, + + async terminate() { + try { + const response = await httpClient + .post('card/terminate') + .json() + return response + } catch (error) { + return getError(error, '[TODO] UPDATE ME!') + } + }, + + async freeze() { + try { + const response = await httpClient + .post('card/freeze') + .json() + return response + } catch (error) { + return getError(error, '[TODO] UPDATE ME!') + } + }, + + async unfreeze() { + try { + const response = await httpClient + .post('card/unfreeze') + .json() + return response + } catch (error) { + return getError(error, '[TODO] UPDATE ME!') + } + }, + + async updateSpendingLimit() { + try { + const response = await httpClient + .post('card/update-spending-limit') + .json() + return response + } catch (error) { + return getError(error, '[TODO] UPDATE ME!') + } + }, + + async changePin() { + try { + const response = await httpClient + .post('card/change-pin') + .json() + return response + } catch (error) { + return getError(error, '[TODO] UPDATE ME!') + } + } +}) + +const mock = (): UserCardService => ({ + async getDetails() { + return Promise.resolve({ + success: true, + message: 'Mocked getDetails', + result: { + name: 'John Doe', + number: '4242 4242 4242 4242', + expiry: '01/27', + cvv: 321, + isFrozen: Math.random() > 0.5 ? true : false + } + }) + }, + + async terminate() { + return Promise.resolve({ + success: true, + message: 'Mocked terminate', + result: true + }) + }, + + async freeze() { + return Promise.resolve({ + success: true, + message: 'Mocked freeze', + result: true + }) + }, + + async unfreeze() { + return Promise.resolve({ + success: true, + message: 'Mocked unfreeze', + result: true + }) + }, + + async updateSpendingLimit() { + try { + const response = await httpClient + .post('card/update-spending-limit') + .json() + return response + } catch (error) { + return getError(error, '[TODO] UPDATE ME!') + } + }, + + async changePin() { + try { + const response = await httpClient + .post('card/change-pin') + .json() + return response + } catch (error) { + return getError(error, '[TODO] UPDATE ME!') + } + } +}) + +const cardService = createCardService() +const cardServiceMock = mock() +export { cardService, cardServiceMock } diff --git a/packages/wallet/frontend/src/pages/card/index.tsx b/packages/wallet/frontend/src/pages/card/index.tsx index 3ccf38049..ebd81bf68 100644 --- a/packages/wallet/frontend/src/pages/card/index.tsx +++ b/packages/wallet/frontend/src/pages/card/index.tsx @@ -14,6 +14,7 @@ function CardContainer() { ) } + const UserCardPage: NextPageWithLayout = () => { return ( <>