HSB-445 feature: storing user last login timestamp (#4074)

* feat: lastLoggedOn added in schema and service function

* feat: add lastLoggedOn logic for magic link

* test: update test cases

* feat: add lastLoggedOn in gql model

* fix: nullable allowed in model attribute

* fix: resolve feedback

* feat: user last login interceptor added
This commit is contained in:
Mir Arif Hasan
2024-05-27 22:19:42 +06:00
committed by GitHub
parent f8ac6dfeb1
commit f4f3fdf2d5
15 changed files with 123 additions and 34 deletions

View File

@@ -42,6 +42,7 @@ const user: AuthUser = {
currentRESTSession: {},
currentGQLSession: {},
refreshToken: 'hbfvdkhjbvkdvdfjvbnkhjb',
lastLoggedOn: currentTime,
createdOn: currentTime,
};
@@ -54,6 +55,7 @@ const adminUser: AuthUser = {
currentRESTSession: {},
currentGQLSession: {},
refreshToken: 'hbfvdkhjbvkdvdfjvbnkhjb',
lastLoggedOn: currentTime,
createdOn: currentTime,
};
@@ -67,6 +69,7 @@ const users: AuthUser[] = [
currentRESTSession: {},
currentGQLSession: {},
refreshToken: 'hbfvdkhjbvkdvdfjvbnkhjb',
lastLoggedOn: currentTime,
createdOn: currentTime,
},
{
@@ -78,6 +81,7 @@ const users: AuthUser[] = [
currentRESTSession: {},
currentGQLSession: {},
refreshToken: 'hbfvdkhjbvkdvdfjvbnkhjb',
lastLoggedOn: currentTime,
createdOn: currentTime,
},
{
@@ -89,6 +93,7 @@ const users: AuthUser[] = [
currentRESTSession: {},
currentGQLSession: {},
refreshToken: 'hbfvdkhjbvkdvdfjvbnkhjb',
lastLoggedOn: currentTime,
createdOn: currentTime,
},
];
@@ -103,6 +108,7 @@ const adminUsers: AuthUser[] = [
currentRESTSession: {},
currentGQLSession: {},
refreshToken: 'hbfvdkhjbvkdvdfjvbnkhjb',
lastLoggedOn: currentTime,
createdOn: currentTime,
},
{
@@ -114,6 +120,7 @@ const adminUsers: AuthUser[] = [
currentRESTSession: {},
currentGQLSession: {},
refreshToken: 'hbfvdkhjbvkdvdfjvbnkhjb',
lastLoggedOn: currentTime,
createdOn: currentTime,
},
{
@@ -125,6 +132,7 @@ const adminUsers: AuthUser[] = [
currentRESTSession: {},
currentGQLSession: {},
refreshToken: 'hbfvdkhjbvkdvdfjvbnkhjb',
lastLoggedOn: currentTime,
createdOn: currentTime,
},
];
@@ -495,6 +503,26 @@ describe('UserService', () => {
});
});
describe('updateUserLastLoggedOn', () => {
test('should resolve right and update user last logged on', async () => {
const currentTime = new Date();
mockPrisma.user.update.mockResolvedValueOnce({
...user,
lastLoggedOn: currentTime,
});
const result = await userService.updateUserLastLoggedOn(user.uid);
expect(result).toEqualRight(true);
});
test('should resolve left and error when invalid user uid is passed', async () => {
mockPrisma.user.update.mockRejectedValueOnce('NotFoundError');
const result = await userService.updateUserLastLoggedOn('invalidUserUid');
expect(result).toEqualLeft(USER_NOT_FOUND);
});
});
describe('fetchAllUsers', () => {
test('should resolve right and return 20 users when cursor is null', async () => {
mockPrisma.user.findMany.mockResolvedValueOnce(users);