From 011e9c0124ee362eb8a3f2cf6365ed3a446ab0e5 Mon Sep 17 00:00:00 2001 From: Sarathlal Sarangadharan Date: Wed, 17 Apr 2024 11:42:07 +0100 Subject: [PATCH] TD-4047: Duplicate records appearing in Mylearning page. Brought back removed code to fix the issue and implemented same logic in newly created stored procedures. --- .../Activity/GetUserLatestActivityCheck.sql | 26 ++++++++++++++++++- .../Activity/GetUserLearningActivities.sql | 25 +++++++++++++++++- .../GetUserLearningActivitiesCount.sql | 26 ++++++++++++++++++- .../Activity/ResourceActivityRepository.cs | 8 +++--- 4 files changed, 79 insertions(+), 6 deletions(-) diff --git a/WebAPI/LearningHub.Nhs.Database/Stored Procedures/Activity/GetUserLatestActivityCheck.sql b/WebAPI/LearningHub.Nhs.Database/Stored Procedures/Activity/GetUserLatestActivityCheck.sql index 235868d43..a5a351969 100644 --- a/WebAPI/LearningHub.Nhs.Database/Stored Procedures/Activity/GetUserLatestActivityCheck.sql +++ b/WebAPI/LearningHub.Nhs.Database/Stored Procedures/Activity/GetUserLatestActivityCheck.sql @@ -144,7 +144,31 @@ FROM ( WHERE ([ScormActivity].[Deleted] = 0 AND [ResourceActivity].[Id] = [ScormActivity].[ResourceActivityId]) ) IS NULL - ) + ) + AND + ( + ( + -- resource type is not video/audio and launch resource activity doesn't exists + [Res].[ResourceTypeId] NOT IN (7,2) AND NOT (EXISTS + ( + SELECT 1 FROM [activity].[ResourceActivity] AS [ResAct1] + WHERE [ResAct1].[Deleted] = 0 AND [ResourceActivity].[Id] = [ResAct1].[LaunchResourceActivityId] + )) + ) + OR + -- or launch resource activity completed + EXISTS + ( + SELECT 1 FROM [activity].[ResourceActivity] AS [ResAct2] + WHERE [ResAct2].[Deleted] = 0 AND [ResourceActivity].[Id] = [ResAct2].[LaunchResourceActivityId] AND [ResAct2].[ActivityStatusId] = 3 + ) + + ) + AND + ( + -- resource type is not assessment and activity status is launched + [Res].[ResourceTypeId] <> 11 OR [ResourceActivity].[ActivityStatusId] = 1 + ) ) AS [t2] LEFT JOIN [resources].[VideoResourceVersion] AS [VideoResourceVersion] ON [t2].[Id1] = [VideoResourceVersion].[ResourceVersionId] diff --git a/WebAPI/LearningHub.Nhs.Database/Stored Procedures/Activity/GetUserLearningActivities.sql b/WebAPI/LearningHub.Nhs.Database/Stored Procedures/Activity/GetUserLearningActivities.sql index 5eb46e6cb..def1b45e4 100644 --- a/WebAPI/LearningHub.Nhs.Database/Stored Procedures/Activity/GetUserLearningActivities.sql +++ b/WebAPI/LearningHub.Nhs.Database/Stored Procedures/Activity/GetUserLearningActivities.sql @@ -213,7 +213,30 @@ FROM ( ) IS NULL ) - + AND + ( + ( + -- resource type is not video/audio and launch resource activity doesn't exists + [Res].[ResourceTypeId] NOT IN (7,2) AND NOT (EXISTS + ( + SELECT 1 FROM [activity].[ResourceActivity] AS [ResAct1] + WHERE [ResAct1].[Deleted] = 0 AND [ResourceActivity].[Id] = [ResAct1].[LaunchResourceActivityId] + )) + ) + OR + -- or launch resource activity completed + EXISTS + ( + SELECT 1 FROM [activity].[ResourceActivity] AS [ResAct2] + WHERE [ResAct2].[Deleted] = 0 AND [ResourceActivity].[Id] = [ResAct2].[LaunchResourceActivityId] AND [ResAct2].[ActivityStatusId] = 3 + ) + + ) + AND + ( + -- resource type is not assessment and activity status is launched + [Res].[ResourceTypeId] <> 11 OR [ResourceActivity].[ActivityStatusId] = 1 + ) AND ( @filterActivityStatus = 0 diff --git a/WebAPI/LearningHub.Nhs.Database/Stored Procedures/Activity/GetUserLearningActivitiesCount.sql b/WebAPI/LearningHub.Nhs.Database/Stored Procedures/Activity/GetUserLearningActivitiesCount.sql index 329cbcfed..4bd7cf1d2 100644 --- a/WebAPI/LearningHub.Nhs.Database/Stored Procedures/Activity/GetUserLearningActivitiesCount.sql +++ b/WebAPI/LearningHub.Nhs.Database/Stored Procedures/Activity/GetUserLearningActivitiesCount.sql @@ -128,7 +128,31 @@ FROM ( WHERE ([ScormActivity].[Deleted] = 0 AND [ResourceActivity].[Id] = [ScormActivity].[ResourceActivityId]) ) IS NULL - ) + ) + AND + ( + ( + -- resource type is not video/audio and launch resource activity doesn't exists + [Res].[ResourceTypeId] NOT IN (7,2) AND NOT (EXISTS + ( + SELECT 1 FROM [activity].[ResourceActivity] AS [ResAct1] + WHERE [ResAct1].[Deleted] = 0 AND [ResourceActivity].[Id] = [ResAct1].[LaunchResourceActivityId] + )) + ) + OR + -- or launch resource activity completed + EXISTS + ( + SELECT 1 FROM [activity].[ResourceActivity] AS [ResAct2] + WHERE [ResAct2].[Deleted] = 0 AND [ResourceActivity].[Id] = [ResAct2].[LaunchResourceActivityId] AND [ResAct2].[ActivityStatusId] = 3 + ) + + ) + AND + ( + -- resource type is not assessment and activity status is launched + [Res].[ResourceTypeId] <> 11 OR [ResourceActivity].[ActivityStatusId] = 1 + ) AND ( @filterActivityStatus = 0 diff --git a/WebAPI/LearningHub.Nhs.Repository/Activity/ResourceActivityRepository.cs b/WebAPI/LearningHub.Nhs.Repository/Activity/ResourceActivityRepository.cs index 9b70c942b..1c3a96adb 100644 --- a/WebAPI/LearningHub.Nhs.Repository/Activity/ResourceActivityRepository.cs +++ b/WebAPI/LearningHub.Nhs.Repository/Activity/ResourceActivityRepository.cs @@ -96,6 +96,7 @@ public IQueryable GetByUserId(int userId) // // For assessment activities, only include the original activities that were created when starting the assessment. The created end record is only for consistency. // It's easier to get the real assessment resource activity from the original resource activity, so only fetch that one. + // TD-4047: As part of this defect bringing back the removed code which then used for the new stored procedure created as part of performance improvement. return this.DbContext.ResourceActivity .Include(r => r.Resource) .ThenInclude(r => r.ResourceReference) @@ -111,9 +112,10 @@ public IQueryable GetByUserId(int userId) .Include(r => r.NodePath) .AsNoTracking() .Where(r => - r.UserId == userId && r.ScormActivity.First().CmiCoreLessonStatus != (int)ActivityStatusEnum.Completed && - ((!r.InverseLaunchResourceActivity.Any()) || - r.InverseLaunchResourceActivity.Any())) + r.UserId == userId && r.ScormActivity.First().CmiCoreLessonStatus != (int)ActivityStatusEnum.Completed && + ((r.Resource.ResourceTypeEnum != ResourceTypeEnum.Video && r.Resource.ResourceTypeEnum != ResourceTypeEnum.Audio && !r.InverseLaunchResourceActivity.Any()) || + r.InverseLaunchResourceActivity.Any(y => y.ActivityStatusId == (int)ActivityStatusEnum.Completed)) && + (r.Resource.ResourceTypeEnum != ResourceTypeEnum.Assessment || r.ActivityStatusId == (int)ActivityStatusEnum.Launched)) .OrderByDescending(r => r.ActivityStart); }