From 15a4315266c49c4f18bac3a933e0150215bddfb5 Mon Sep 17 00:00:00 2001 From: Radu-Cristian Popa Date: Fri, 6 Sep 2024 05:04:51 +0300 Subject: [PATCH 1/3] Add initial cards api --- packages/wallet/frontend/src/lib/api/card.ts | 130 +++++++++++++++++++ 1 file changed, 130 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..7b6ed2f29 --- /dev/null +++ b/packages/wallet/frontend/src/lib/api/card.ts @@ -0,0 +1,130 @@ +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: string + 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 cardService = createCardService() +export { cardService } From d16f7d731ae09fffcd0405a7ff598c420822f835 Mon Sep 17 00:00:00 2001 From: Radu-Cristian Popa Date: Fri, 6 Sep 2024 05:10:36 +0300 Subject: [PATCH 2/3] Add card service mock --- packages/wallet/frontend/src/lib/api/card.ts | 103 +++++++++++++----- .../wallet/frontend/src/pages/card/index.tsx | 1 + 2 files changed, 75 insertions(+), 29 deletions(-) diff --git a/packages/wallet/frontend/src/lib/api/card.ts b/packages/wallet/frontend/src/lib/api/card.ts index 7b6ed2f29..83d3e9c1e 100644 --- a/packages/wallet/frontend/src/lib/api/card.ts +++ b/packages/wallet/frontend/src/lib/api/card.ts @@ -10,18 +10,18 @@ export interface IUserCard { name: string number: string expiry: string - cvv: string + cvv: number isFrozen: boolean } type GetDetailsResponse = SuccessResponse type GetDetailsResult = GetDetailsResponse | ErrorResponse -type TerminateCardResult = SuccessResponse | ErrorResponse +type TerminateCardResult = SuccessResponse | ErrorResponse -type FreezeResult = SuccessResponse | ErrorResponse +type FreezeResult = SuccessResponse | ErrorResponse -type UnfreezeResult = SuccessResponse | ErrorResponse +type UnfreezeResult = SuccessResponse | ErrorResponse type UpdateSpendingLimitResult = SuccessResponse | ErrorResponse @@ -48,10 +48,7 @@ const createCardService = (): UserCardService => ({ .json() return response } catch (error) { - return getError( - error, - '[TODO] UPDATE ME!' - ) + return getError(error, '[TODO] UPDATE ME!') } }, @@ -62,10 +59,7 @@ const createCardService = (): UserCardService => ({ .json() return response } catch (error) { - return getError( - error, - '[TODO] UPDATE ME!' - ) + return getError(error, '[TODO] UPDATE ME!') } }, @@ -76,10 +70,7 @@ const createCardService = (): UserCardService => ({ .json() return response } catch (error) { - return getError( - error, - '[TODO] UPDATE ME!' - ) + return getError(error, '[TODO] UPDATE ME!') } }, @@ -90,10 +81,7 @@ const createCardService = (): UserCardService => ({ .json() return response } catch (error) { - return getError( - error, - '[TODO] UPDATE ME!' - ) + return getError(error, '[TODO] UPDATE ME!') } }, @@ -104,10 +92,7 @@ const createCardService = (): UserCardService => ({ .json() return response } catch (error) { - return getError( - error, - '[TODO] UPDATE ME!' - ) + return getError(error, '[TODO] UPDATE ME!') } }, @@ -118,13 +103,73 @@ const createCardService = (): UserCardService => ({ .json() return response } catch (error) { - return getError( - error, - '[TODO] UPDATE ME!' - ) + 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() -export { cardService } +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 ( <> From aed0605c1256af8d0f28dc2718ec282ac4964e6f Mon Sep 17 00:00:00 2001 From: Radu-Cristian Popa Date: Fri, 6 Sep 2024 05:13:37 +0300 Subject: [PATCH 3/3] Format --- packages/wallet/frontend/src/lib/api/card.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/wallet/frontend/src/lib/api/card.ts b/packages/wallet/frontend/src/lib/api/card.ts index 83d3e9c1e..a0b522518 100644 --- a/packages/wallet/frontend/src/lib/api/card.ts +++ b/packages/wallet/frontend/src/lib/api/card.ts @@ -10,7 +10,7 @@ export interface IUserCard { name: string number: string expiry: string - cvv: number + cvv: number isFrozen: boolean }