From 1d13fc09eee3da648df9311d701fbaff4487c480 Mon Sep 17 00:00:00 2001 From: swapnamol-abraham Date: Wed, 17 Sep 2025 10:27:06 +0100 Subject: [PATCH 1/3] Fixes for the SIT issues --- .../Services/DashboardService.cs | 5 +- .../Services/MoodleApiService.cs | 1 + .../Services/MyLearningService.cs | 10 ++- .../LearningHub.Nhs.Database.sqlproj | 1 + .../GetUserInProgressLearningActivities.sql | 84 +++++++++++++++++++ 5 files changed, 98 insertions(+), 3 deletions(-) create mode 100644 WebAPI/LearningHub.Nhs.Database/Stored Procedures/Activity/GetUserInProgressLearningActivities.sql diff --git a/OpenAPI/LearningHub.Nhs.OpenApi.Services/Services/DashboardService.cs b/OpenAPI/LearningHub.Nhs.OpenApi.Services/Services/DashboardService.cs index 37cb4319..e5cf0fff 100644 --- a/OpenAPI/LearningHub.Nhs.OpenApi.Services/Services/DashboardService.cs +++ b/OpenAPI/LearningHub.Nhs.OpenApi.Services/Services/DashboardService.cs @@ -237,7 +237,10 @@ public async Task GetMyInprogressLearning Title = course.DisplayName, CertificateEnabled = course.CertificateEnabled, ActivityStatus = (course.Completed == true || course.ProgressPercentage.TrimEnd('%') == "100") ? ActivityStatusEnum.Completed : ActivityStatusEnum.Incomplete, - ActivityDate = DateTimeOffset.FromUnixTimeMilliseconds(course.LastAccessDate ?? 0), + //ActivityDate = DateTimeOffset.FromUnixTimeMilliseconds(course.LastAccessDate ?? 0), + ActivityDate = course.LastAccessDate.HasValue + ? DateTimeOffset.FromUnixTimeSeconds(course.LastAccessDate.Value) + : DateTimeOffset.MinValue, ScorePercentage = Convert.ToInt32(course.ProgressPercentage.TrimEnd('%')), TotalActivities = course.TotalActivities, CompletedActivities = course.CompletedActivities, diff --git a/OpenAPI/LearningHub.Nhs.OpenApi.Services/Services/MoodleApiService.cs b/OpenAPI/LearningHub.Nhs.OpenApi.Services/Services/MoodleApiService.cs index 9ea97aaa..b241a870 100644 --- a/OpenAPI/LearningHub.Nhs.OpenApi.Services/Services/MoodleApiService.cs +++ b/OpenAPI/LearningHub.Nhs.OpenApi.Services/Services/MoodleApiService.cs @@ -42,6 +42,7 @@ public MoodleApiService(IMoodleHttpClient moodleHttpClient, ILoggerUserId from Moodle. public async Task GetMoodleUserIdByUsernameAsync(int currentUserId) { + currentUserId = 2299585; var parameters = new Dictionary { { "criteria[0][key]", "username" }, diff --git a/OpenAPI/LearningHub.Nhs.OpenApi.Services/Services/MyLearningService.cs b/OpenAPI/LearningHub.Nhs.OpenApi.Services/Services/MyLearningService.cs index 95d69ddd..6cff7b31 100644 --- a/OpenAPI/LearningHub.Nhs.OpenApi.Services/Services/MyLearningService.cs +++ b/OpenAPI/LearningHub.Nhs.OpenApi.Services/Services/MyLearningService.cs @@ -203,7 +203,10 @@ public async Task GetUserRecentMyLearning Title = course.DisplayName, CertificateEnabled = course.CertificateEnabled, ActivityStatus = (course.Completed == true || course.ProgressPercentage.TrimEnd('%') == "100") ? ActivityStatusEnum.Completed : ActivityStatusEnum.Incomplete, - ActivityDate = DateTimeOffset.FromUnixTimeMilliseconds(course.LastAccessDate ?? 0), + //ActivityDate = DateTimeOffset.FromUnixTimeMilliseconds(course.LastAccessDate ?? 0), + ActivityDate = course.LastAccessDate.HasValue + ? DateTimeOffset.FromUnixTimeSeconds(course.LastAccessDate.Value) + : DateTimeOffset.MinValue, ScorePercentage = Convert.ToInt32(course.ProgressPercentage.TrimEnd('%')), TotalActivities = course.TotalActivities, CompletedActivities = course.CompletedActivities, @@ -316,7 +319,10 @@ public async Task GetUserLearningHistoryA Title = course.DisplayName, CertificateEnabled = course.CertificateEnabled, ActivityStatus = (course.Completed == true || course.ProgressPercentage.TrimEnd('%') == "100") ? ActivityStatusEnum.Completed : ActivityStatusEnum.Incomplete, - ActivityDate = DateTimeOffset.FromUnixTimeMilliseconds(course.LastAccessDate ?? 0), + //ActivityDate = DateTimeOffset.FromUnixTimeMilliseconds(course.LastAccessDate ?? 0), + ActivityDate = course.LastAccessDate.HasValue + ? DateTimeOffset.FromUnixTimeSeconds(course.LastAccessDate.Value) + : DateTimeOffset.MinValue, ScorePercentage = int.TryParse(course.ProgressPercentage.TrimEnd('%'), out var score) ? score : 0, TotalActivities = course.TotalActivities, CompletedActivities = course.CompletedActivities, diff --git a/WebAPI/LearningHub.Nhs.Database/LearningHub.Nhs.Database.sqlproj b/WebAPI/LearningHub.Nhs.Database/LearningHub.Nhs.Database.sqlproj index 44fa7e9f..ab619e5b 100644 --- a/WebAPI/LearningHub.Nhs.Database/LearningHub.Nhs.Database.sqlproj +++ b/WebAPI/LearningHub.Nhs.Database/LearningHub.Nhs.Database.sqlproj @@ -544,6 +544,7 @@ + diff --git a/WebAPI/LearningHub.Nhs.Database/Stored Procedures/Activity/GetUserInProgressLearningActivities.sql b/WebAPI/LearningHub.Nhs.Database/Stored Procedures/Activity/GetUserInProgressLearningActivities.sql new file mode 100644 index 00000000..0f440c02 --- /dev/null +++ b/WebAPI/LearningHub.Nhs.Database/Stored Procedures/Activity/GetUserInProgressLearningActivities.sql @@ -0,0 +1,84 @@ +------------------------------------------------------------------------------- +-- Author Swapnamol Abraham +-- Created 10-09-2025 +-- Purpose Get Users In progress learning activities +-- +-- Modification History +------------------------------------------------------------------------------- +CREATE PROCEDURE [activity].[GetUserInProgressLearningActivities] ( + @userId INT + ) +AS +BEGIN + + ;WITH CTERecentActivities AS ( + SELECT + ra.Id AS ActivityId, + ara.LaunchResourceActivityId AS LaunchResourceActivityId, + ra.UserId AS UserId, + ra.ResourceId AS ResourceId, + r.CurrentResourceVersionId AS ResourceVersionId, + CASE WHEN r.CurrentResourceVersionId = ra.ResourceVersionId THEN 1 ELSE 0 END AS IsCurrentResourceVersion, + ( + SELECT TOP 1 rr.OriginalResourceReferenceId + FROM [resources].[ResourceReference] rr + WHERE rr.ResourceId = rv.ResourceId AND rr.Deleted = 0 + ) AS ResourceReferenceID, + ra.MajorVersion AS MajorVersion, + ra.MinorVersion AS MinorVersion, + ra.NodePathId AS NodePathId, + r.ResourceTypeId AS ResourceType, + rv.Title AS Title, + --rv.[Description] AS ResourceDescription, + rv.CertificateEnabled AS CertificateEnabled, + rvp.ProviderId AS ProviderId, + ISNULL(ara.ActivityStatusId, ra.ActivityStatusId) AS ActivityStatus, + ra.ActivityStart AS ActivityDate, + -- ara.ActivityEnd, + ISNULL(ara.DurationSeconds, 0) AS ActivityDurationSeconds, + ara.Score AS ScorePercentage, + arv.AssessmentType AS AssessmentType, + arv.PassMark AS PassMark, + asra.score AS AssesmentScore, + mar.SecondsPlayed AS SecondsPlayed, + mar.PercentComplete AS PercentComplete, + sa.CmiCoreLesson_status AS CmiCoreLessonstatus, + sa.CmiCoreScoreMax AS CmiCoreScoreMax, + sa.CmiCoreSession_time AS CmiCoreSessiontime, + sa.DurationSeconds AS DurationSeconds, + ROW_NUMBER() OVER (PARTITION BY ra.ResourceId ORDER BY ISNULL(ara.ActivityEnd, ra.ActivityStart) DESC) AS rn + FROM activity.ResourceActivity ra + LEFT JOIN activity.ResourceActivity ara ON ara.LaunchResourceActivityId = ra.Id + INNER JOIN [resources].[Resource] r ON ra.ResourceId = r.Id + INNER JOIN [resources].[ResourceVersion] rv ON rv.Id = ra.ResourceVersionId AND rv.Deleted = 0 + LEFT JOIN [resources].[ResourceVersionProvider] rvp on rv.Id = rvp.ResourceVersionId + LEFT JOIN [resources].[AssessmentResourceVersion] arv ON arv.ResourceVersionId = ra.ResourceVersionId + LEFT JOIN [activity].[AssessmentResourceActivity] asra ON asra.ResourceActivityId = ra.Id + LEFT JOIN [activity].[MediaResourceActivity] mar ON mar.ResourceActivityId = ra.Id + LEFT JOIN [activity].[ScormActivity] sa ON sa.ResourceActivityId = ra.Id + WHERE ra.LaunchResourceActivityId IS NULL AND ra.userid = @userId + AND ra.deleted = 0 + AND r.ResourceTypeId IN(6) --AND ra.ActivityStart >= DATEADD(MONTH, -6, SYSDATETIMEOFFSET()) +) +SELECT Top 8 ActivityId, + LaunchResourceActivityId, + UserId, + ResourceId, + ResourceVersionId, + CAST(IsCurrentResourceVersion AS BIT) AS IsCurrentResourceVersion, + ResourceReferenceId, + MajorVersion, + MinorVersion, + NodePathId, + ResourceType, + Title, + CertificateEnabled, + ProviderId, + ActivityStatus, + ActivityDate, + ActivityDurationSeconds, + ScorePercentage +FROM CTERecentActivities +WHERE rn = 1 order by ActivityDate desc; + +END \ No newline at end of file From 065f5fdb53777e3e7a0ceec5ed5f74b45bcfed3e Mon Sep 17 00:00:00 2001 From: swapnamol-abraham Date: Wed, 17 Sep 2025 10:28:00 +0100 Subject: [PATCH 2/3] Removed hardcoded userid --- .../Services/MoodleApiService.cs | 1 - 1 file changed, 1 deletion(-) diff --git a/OpenAPI/LearningHub.Nhs.OpenApi.Services/Services/MoodleApiService.cs b/OpenAPI/LearningHub.Nhs.OpenApi.Services/Services/MoodleApiService.cs index b241a870..9ea97aaa 100644 --- a/OpenAPI/LearningHub.Nhs.OpenApi.Services/Services/MoodleApiService.cs +++ b/OpenAPI/LearningHub.Nhs.OpenApi.Services/Services/MoodleApiService.cs @@ -42,7 +42,6 @@ public MoodleApiService(IMoodleHttpClient moodleHttpClient, ILoggerUserId from Moodle. public async Task GetMoodleUserIdByUsernameAsync(int currentUserId) { - currentUserId = 2299585; var parameters = new Dictionary { { "criteria[0][key]", "username" }, From 6029a7d92a12a4c76d5155fbcf280e1e12f15e52 Mon Sep 17 00:00:00 2001 From: swapnamol-abraham Date: Wed, 17 Sep 2025 10:32:02 +0100 Subject: [PATCH 3/3] Removed the commented line --- .../Services/DashboardService.cs | 1 - .../Services/MyLearningService.cs | 2 -- 2 files changed, 3 deletions(-) diff --git a/OpenAPI/LearningHub.Nhs.OpenApi.Services/Services/DashboardService.cs b/OpenAPI/LearningHub.Nhs.OpenApi.Services/Services/DashboardService.cs index e5cf0fff..94685100 100644 --- a/OpenAPI/LearningHub.Nhs.OpenApi.Services/Services/DashboardService.cs +++ b/OpenAPI/LearningHub.Nhs.OpenApi.Services/Services/DashboardService.cs @@ -237,7 +237,6 @@ public async Task GetMyInprogressLearning Title = course.DisplayName, CertificateEnabled = course.CertificateEnabled, ActivityStatus = (course.Completed == true || course.ProgressPercentage.TrimEnd('%') == "100") ? ActivityStatusEnum.Completed : ActivityStatusEnum.Incomplete, - //ActivityDate = DateTimeOffset.FromUnixTimeMilliseconds(course.LastAccessDate ?? 0), ActivityDate = course.LastAccessDate.HasValue ? DateTimeOffset.FromUnixTimeSeconds(course.LastAccessDate.Value) : DateTimeOffset.MinValue, diff --git a/OpenAPI/LearningHub.Nhs.OpenApi.Services/Services/MyLearningService.cs b/OpenAPI/LearningHub.Nhs.OpenApi.Services/Services/MyLearningService.cs index 6cff7b31..1236a574 100644 --- a/OpenAPI/LearningHub.Nhs.OpenApi.Services/Services/MyLearningService.cs +++ b/OpenAPI/LearningHub.Nhs.OpenApi.Services/Services/MyLearningService.cs @@ -203,7 +203,6 @@ public async Task GetUserRecentMyLearning Title = course.DisplayName, CertificateEnabled = course.CertificateEnabled, ActivityStatus = (course.Completed == true || course.ProgressPercentage.TrimEnd('%') == "100") ? ActivityStatusEnum.Completed : ActivityStatusEnum.Incomplete, - //ActivityDate = DateTimeOffset.FromUnixTimeMilliseconds(course.LastAccessDate ?? 0), ActivityDate = course.LastAccessDate.HasValue ? DateTimeOffset.FromUnixTimeSeconds(course.LastAccessDate.Value) : DateTimeOffset.MinValue, @@ -319,7 +318,6 @@ public async Task GetUserLearningHistoryA Title = course.DisplayName, CertificateEnabled = course.CertificateEnabled, ActivityStatus = (course.Completed == true || course.ProgressPercentage.TrimEnd('%') == "100") ? ActivityStatusEnum.Completed : ActivityStatusEnum.Incomplete, - //ActivityDate = DateTimeOffset.FromUnixTimeMilliseconds(course.LastAccessDate ?? 0), ActivityDate = course.LastAccessDate.HasValue ? DateTimeOffset.FromUnixTimeSeconds(course.LastAccessDate.Value) : DateTimeOffset.MinValue,