Skip to content

Commit b5cf544

Browse files
authored
Merge pull request #3170 from TechnologyEnhancedLearning/Develop/Feature/TD-3712-UpdateLastAccessedDateForUsersDuringLogin
TD-3712 Update LastAccessed Date For Users During Login
2 parents 13a4d51 + 52cb242 commit b5cf544

File tree

5 files changed

+56
-2
lines changed

5 files changed

+56
-2
lines changed
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
namespace DigitalLearningSolutions.Data.DataServices
2+
{
3+
using Dapper;
4+
using System.Data;
5+
6+
public interface ILoginDataService
7+
{
8+
void UpdateLastAccessedForUsersTable(int Id);
9+
}
10+
11+
public class LoginDataService : ILoginDataService
12+
{
13+
private readonly IDbConnection connection;
14+
15+
public LoginDataService(IDbConnection connection)
16+
{
17+
this.connection = connection;
18+
}
19+
20+
public void UpdateLastAccessedForUsersTable(int Id)
21+
{
22+
connection.Execute(
23+
@"UPDATE Users SET
24+
LastAccessed = GetUtcDate()
25+
WHERE ID = @Id",
26+
new
27+
{
28+
Id
29+
}
30+
);
31+
}
32+
}
33+
}

DigitalLearningSolutions.Web.Tests/Services/LoginServiceTests.cs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
using System.Collections.Generic;
44
using System.Linq;
55
using System.Threading.Tasks;
6+
using DigitalLearningSolutions.Data.DataServices;
67
using DigitalLearningSolutions.Data.Enums;
78
using DigitalLearningSolutions.Data.Helpers;
89
using DigitalLearningSolutions.Data.Models;
@@ -32,14 +33,15 @@ private static readonly (string?, List<(int centreId, string centreName, string
3233
private LoginService loginService = null!;
3334
private IUserService userService = null!;
3435
private IUserVerificationService userVerificationService = null!;
36+
private ILoginDataService loginDataService = null!;
3537

3638
[SetUp]
3739
public void Setup()
3840
{
3941
userVerificationService = A.Fake<IUserVerificationService>(x => x.Strict());
4042
userService = A.Fake<IUserService>(x => x.Strict());
4143

42-
loginService = new LoginService(userService, userVerificationService);
44+
loginService = new LoginService(userService, userVerificationService, loginDataService);
4345
}
4446

4547
[Test]

DigitalLearningSolutions.Web/Controllers/LoginController.cs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,13 @@ public async Task<IActionResult> Index(LoginViewModel model, string timeZone = "
8282

8383
var loginResult = loginService.AttemptLogin(model.Username!.Trim(), model.Password!);
8484

85+
if (loginResult.LoginAttemptResult == LoginAttemptResult.LogIntoSingleCentre ||
86+
loginResult.LoginAttemptResult == LoginAttemptResult.ChooseACentre)
87+
{
88+
loginService.UpdateLastAccessedForUsersTable(loginResult.UserEntity.UserAccount.Id);
89+
}
90+
91+
8592
switch (loginResult.LoginAttemptResult)
8693
{
8794
case LoginAttemptResult.InvalidCredentials:

DigitalLearningSolutions.Web/Services/LoginService.cs

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,12 @@
55
using System.Linq;
66
using System.Security.Claims;
77
using System.Threading.Tasks;
8+
using DigitalLearningSolutions.Data.DataServices;
89
using DigitalLearningSolutions.Data.Enums;
910
using DigitalLearningSolutions.Data.Helpers;
1011
using DigitalLearningSolutions.Data.Models;
1112
using DigitalLearningSolutions.Data.Models.User;
13+
using DigitalLearningSolutions.Data.Utilities;
1214
using DigitalLearningSolutions.Data.ViewModels;
1315
using DigitalLearningSolutions.Web.Helpers;
1416
using Microsoft.AspNetCore.Authentication;
@@ -28,6 +30,8 @@ List<int> idsOfCentresWithUnverifiedEmails
2830

2931
bool CentreEmailIsVerified(int userId, int centreIdIfLoggingIntoSingleCentre);
3032

33+
void UpdateLastAccessedForUsersTable(int Id);
34+
3135
Task<string> HandleLoginResult(
3236
LoginResult loginResult,
3337
TicketReceivedContext context,
@@ -41,11 +45,18 @@ public class LoginService : ILoginService
4145
{
4246
private readonly IUserService userService;
4347
private readonly IUserVerificationService userVerificationService;
48+
private readonly ILoginDataService loginDataService;
4449

45-
public LoginService(IUserService userService, IUserVerificationService userVerificationService)
50+
public LoginService(IUserService userService, IUserVerificationService userVerificationService, ILoginDataService loginDataService)
4651
{
4752
this.userService = userService;
4853
this.userVerificationService = userVerificationService;
54+
this.loginDataService = loginDataService;
55+
}
56+
57+
public void UpdateLastAccessedForUsersTable(int Id)
58+
{
59+
loginDataService.UpdateLastAccessedForUsersTable(Id);
4960
}
5061

5162
public LoginResult AttemptLogin(string username, string password)

DigitalLearningSolutions.Web/Startup.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -534,6 +534,7 @@ private static void RegisterDataServices(IServiceCollection services)
534534
services.AddScoped<IRequestSupportTicketDataService, RequestSupportTicketDataService>();
535535
services.AddScoped<ICentreApplicationsDataService, CentreApplicationsDataService>();
536536
services.AddScoped<ICentreSelfAssessmentsDataService, CentreSelfAssessmentsDataService>();
537+
services.AddScoped<ILoginDataService, LoginDataService>();
537538
}
538539

539540
private static void RegisterHelpers(IServiceCollection services)

0 commit comments

Comments
 (0)