Skip to content

Commit bf9844a

Browse files
feat(wallet/frontend): add temporary card service (#1554)
* Add initial cards api * Add card service mock * Format
1 parent f80db89 commit bf9844a

2 files changed

Lines changed: 176 additions & 0 deletions

File tree

Lines changed: 175 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,175 @@
1+
import {
2+
getError,
3+
httpClient,
4+
type ErrorResponse,
5+
type SuccessResponse
6+
} from '../httpClient'
7+
8+
// TODO: update interface - can be moved to shared folder as well
9+
export interface IUserCard {
10+
name: string
11+
number: string
12+
expiry: string
13+
cvv: number
14+
isFrozen: boolean
15+
}
16+
17+
type GetDetailsResponse = SuccessResponse<IUserCard>
18+
type GetDetailsResult = GetDetailsResponse | ErrorResponse
19+
20+
type TerminateCardResult = SuccessResponse<boolean> | ErrorResponse
21+
22+
type FreezeResult = SuccessResponse<boolean> | ErrorResponse
23+
24+
type UnfreezeResult = SuccessResponse<boolean> | ErrorResponse
25+
26+
type UpdateSpendingLimitResult = SuccessResponse | ErrorResponse
27+
28+
type ChangePinResult = SuccessResponse | ErrorResponse
29+
30+
interface UserCardService {
31+
getDetails(cookies?: string): Promise<GetDetailsResult>
32+
terminate(): Promise<TerminateCardResult>
33+
freeze(): Promise<FreezeResult>
34+
unfreeze(): Promise<UnfreezeResult>
35+
updateSpendingLimit(): Promise<UpdateSpendingLimitResult>
36+
changePin(): Promise<ChangePinResult>
37+
}
38+
39+
const createCardService = (): UserCardService => ({
40+
async getDetails(cookies) {
41+
try {
42+
const response = await httpClient
43+
.get(`card`, {
44+
headers: {
45+
...(cookies ? { Cookie: cookies } : {})
46+
}
47+
})
48+
.json<GetDetailsResponse>()
49+
return response
50+
} catch (error) {
51+
return getError(error, '[TODO] UPDATE ME!')
52+
}
53+
},
54+
55+
async terminate() {
56+
try {
57+
const response = await httpClient
58+
.post('card/terminate')
59+
.json<SuccessResponse>()
60+
return response
61+
} catch (error) {
62+
return getError(error, '[TODO] UPDATE ME!')
63+
}
64+
},
65+
66+
async freeze() {
67+
try {
68+
const response = await httpClient
69+
.post('card/freeze')
70+
.json<SuccessResponse>()
71+
return response
72+
} catch (error) {
73+
return getError(error, '[TODO] UPDATE ME!')
74+
}
75+
},
76+
77+
async unfreeze() {
78+
try {
79+
const response = await httpClient
80+
.post('card/unfreeze')
81+
.json<SuccessResponse>()
82+
return response
83+
} catch (error) {
84+
return getError(error, '[TODO] UPDATE ME!')
85+
}
86+
},
87+
88+
async updateSpendingLimit() {
89+
try {
90+
const response = await httpClient
91+
.post('card/update-spending-limit')
92+
.json<SuccessResponse>()
93+
return response
94+
} catch (error) {
95+
return getError(error, '[TODO] UPDATE ME!')
96+
}
97+
},
98+
99+
async changePin() {
100+
try {
101+
const response = await httpClient
102+
.post('card/change-pin')
103+
.json<SuccessResponse>()
104+
return response
105+
} catch (error) {
106+
return getError(error, '[TODO] UPDATE ME!')
107+
}
108+
}
109+
})
110+
111+
const mock = (): UserCardService => ({
112+
async getDetails() {
113+
return Promise.resolve({
114+
success: true,
115+
message: 'Mocked getDetails',
116+
result: {
117+
name: 'John Doe',
118+
number: '4242 4242 4242 4242',
119+
expiry: '01/27',
120+
cvv: 321,
121+
isFrozen: Math.random() > 0.5 ? true : false
122+
}
123+
})
124+
},
125+
126+
async terminate() {
127+
return Promise.resolve({
128+
success: true,
129+
message: 'Mocked terminate',
130+
result: true
131+
})
132+
},
133+
134+
async freeze() {
135+
return Promise.resolve({
136+
success: true,
137+
message: 'Mocked freeze',
138+
result: true
139+
})
140+
},
141+
142+
async unfreeze() {
143+
return Promise.resolve({
144+
success: true,
145+
message: 'Mocked unfreeze',
146+
result: true
147+
})
148+
},
149+
150+
async updateSpendingLimit() {
151+
try {
152+
const response = await httpClient
153+
.post('card/update-spending-limit')
154+
.json<SuccessResponse>()
155+
return response
156+
} catch (error) {
157+
return getError(error, '[TODO] UPDATE ME!')
158+
}
159+
},
160+
161+
async changePin() {
162+
try {
163+
const response = await httpClient
164+
.post('card/change-pin')
165+
.json<SuccessResponse>()
166+
return response
167+
} catch (error) {
168+
return getError(error, '[TODO] UPDATE ME!')
169+
}
170+
}
171+
})
172+
173+
const cardService = createCardService()
174+
const cardServiceMock = mock()
175+
export { cardService, cardServiceMock }

packages/wallet/frontend/src/pages/card/index.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ function CardContainer() {
1414
</div>
1515
)
1616
}
17+
1718
const UserCardPage: NextPageWithLayout = () => {
1819
return (
1920
<>

0 commit comments

Comments
 (0)