Skip to content

Commit 1c513a2

Browse files
committed
feat: add iban foolproof
1 parent 1735063 commit 1c513a2

File tree

11 files changed

+28
-26
lines changed

11 files changed

+28
-26
lines changed

api/prisma/schema.prisma

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -8,13 +8,14 @@ datasource db {
88
}
99

1010
model User {
11-
id String @id
12-
email String @unique
13-
pwdHash String
14-
firstName String
15-
lastName String
16-
balance Int
17-
processed Boolean @default(false)
18-
iban String? @db.Text
19-
locker String? @db.Text
20-
}
11+
id String @id
12+
email String @unique
13+
pwdHash String
14+
firstName String
15+
lastName String
16+
balance Int
17+
processed Boolean @default(false)
18+
iban String? @db.Text
19+
ibanFoolproof String? @db.Char(4)
20+
locker String? @db.Text
21+
}

api/src/auth/auth.controller.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ export class AuthController {
3232
access_token: token,
3333
currentBalance: user.balance,
3434
firstName: user.firstName,
35-
paymentMethodRegistered: !!user.iban,
35+
paymentMethodRegistered: user?.iban ? user?.ibanFoolproof : null,
3636
};
3737
}
3838

@@ -71,7 +71,7 @@ export class AuthController {
7171
valid,
7272
currentBalance: user?.balance,
7373
firstName: user?.firstName,
74-
paymentMethodRegistered: !!user?.iban,
74+
paymentMethodRegistered: user?.iban ? user?.ibanFoolproof : null,
7575
};
7676
}
7777
}

api/src/auth/dto/res/access-token-res.dto.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,5 +2,5 @@ export default class AccessTokenResDto {
22
access_token: string;
33
firstName: string;
44
currentBalance: number;
5-
paymentMethodRegistered: boolean;
5+
paymentMethodRegistered: string | null;
66
}

api/src/auth/dto/res/token-validity-res.dto.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,5 +2,5 @@ export default class TokenValidityResDto {
22
valid: boolean;
33
firstName: string;
44
currentBalance: number;
5-
paymentMethodRegistered: boolean;
5+
paymentMethodRegistered: string | null;
66
}

api/src/user/interfaces/user.interface.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ const USER_SELECT_FILTER = {
88
lastName: true,
99
balance: true,
1010
iban: true,
11+
ibanFoolproof: true,
1112
locker: true,
1213
processed: true,
1314
},

api/src/user/user.service.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@ export default class UsersService {
5656
where: { id: userId },
5757
data: {
5858
iban: cryptedIban,
59+
ibanFoolproof: data.slice(-4).padStart(4, 'X'),
5960
},
6061
} as const);
6162
}
@@ -100,7 +101,6 @@ export default class UsersService {
100101
);
101102
rawData = decrypted.toString('utf8');
102103
} catch (e) {
103-
console.warn(e);
104104
} finally {
105105
await this.prisma.user.update({
106106
where: {

front/public/locales/fr/common.json.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ export default {
1212
'login.fail.other': 'Impossible de se connecter',
1313
'dashboard.hi': 'Salut',
1414
'dashboard.balance': 'Ton solde BuckUTT :',
15-
'dashboard.iban.yes': 'IBAN enregistré',
15+
'dashboard.iban.yes': 'IBAN enregistré (finissant par {{last4}})',
1616
'dashboard.iban.no': "Pas d'IBAN enregistré",
1717
'dashboard.iban.save': 'Enregistrer',
1818
'dashboard.balanceTooLow': 'Ton solde est insuffisant pour effectuer un virement',

front/src/api/api.ts

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -103,9 +103,7 @@ export class ResponseHandler<T, R = undefined> {
103103
* @param rawResponse The raw response from the API.
104104
*/
105105
function formatResponse<T>(rawResponse: RawResponseType<T>): T {
106-
if (typeof rawResponse === 'string' && !isNaN(Date.parse(rawResponse))) {
107-
return new Date(rawResponse) as T;
108-
} else if (Array.isArray(rawResponse)) {
106+
if (Array.isArray(rawResponse)) {
109107
return rawResponse.map(formatResponse) as T;
110108
} else if (typeof rawResponse === 'object' && rawResponse !== null) {
111109
return Object.fromEntries(

front/src/app/login/page.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ export default function LoginPage() {
1414
<div id="login-page" className={styles.loginPage}>
1515
<LoginForm />
1616
<div className={styles.bottomNotes}>
17-
<div>© 2024 UTT NET GROUP</div>
17+
<div>© 2025 UTT NET GROUP</div>
1818
<div>BuckUTT</div>
1919
<div>BDE UTT</div>
2020
<Link className={styles.bottomLink} href={'/legal'}>

front/src/app/page.tsx

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,9 @@ export default function HomePage() {
6666
</div>
6767
<div
6868
className={[styles.ibanRegistered, user?.paymentMethodRegistered ? styles.true : styles.false].join(' ')}>
69-
{user?.paymentMethodRegistered ? t('common:dashboard.iban.yes') : t('common:dashboard.iban.no')}
69+
{user?.paymentMethodRegistered
70+
? t('common:dashboard.iban.yes', { last4: user.paymentMethodRegistered })
71+
: t('common:dashboard.iban.no')}
7072
</div>
7173
</div>
7274
{(user?.currentBalance ?? 0) > 0 ? (
@@ -96,7 +98,7 @@ export default function HomePage() {
9698
api
9799
.put<SetIbanRequestDto, { errorCode?: number }>('/user/iban', { data })
98100
.on('success', async () => {
99-
dispatch(setIbanRegistered());
101+
dispatch(setIbanRegistered(value));
100102
setIbanErrorMessage('');
101103
})
102104
.on(401, (body) =>
@@ -121,7 +123,7 @@ export default function HomePage() {
121123
)}
122124
</div>
123125
<div className={styles.bottomNotes}>
124-
<div>© 2024 UTT NET GROUP</div>
126+
<div>© 2025 UTT NET GROUP</div>
125127
<div>BuckUTT</div>
126128
<div>BDE UTT</div>
127129
<Link className={styles.bottomLink} href={'/legal'}>

0 commit comments

Comments
 (0)