diff --git a/AdminUI/LearningHub.Nhs.AdminUI/LearningHub.Nhs.AdminUI.csproj b/AdminUI/LearningHub.Nhs.AdminUI/LearningHub.Nhs.AdminUI.csproj
index a0de54f8f..a60321fe6 100644
--- a/AdminUI/LearningHub.Nhs.AdminUI/LearningHub.Nhs.AdminUI.csproj
+++ b/AdminUI/LearningHub.Nhs.AdminUI/LearningHub.Nhs.AdminUI.csproj
@@ -89,7 +89,7 @@
-
+
diff --git a/LearningHub.Nhs.WebUI.AutomatedUiTests/LearningHub.Nhs.WebUI.AutomatedUiTests.csproj b/LearningHub.Nhs.WebUI.AutomatedUiTests/LearningHub.Nhs.WebUI.AutomatedUiTests.csproj
index 1569f9734..9e5550cdb 100644
--- a/LearningHub.Nhs.WebUI.AutomatedUiTests/LearningHub.Nhs.WebUI.AutomatedUiTests.csproj
+++ b/LearningHub.Nhs.WebUI.AutomatedUiTests/LearningHub.Nhs.WebUI.AutomatedUiTests.csproj
@@ -12,6 +12,7 @@
+
diff --git a/LearningHub.Nhs.WebUI/LearningHub.Nhs.WebUI.csproj b/LearningHub.Nhs.WebUI/LearningHub.Nhs.WebUI.csproj
index dc2cf661d..3f62a30de 100644
--- a/LearningHub.Nhs.WebUI/LearningHub.Nhs.WebUI.csproj
+++ b/LearningHub.Nhs.WebUI/LearningHub.Nhs.WebUI.csproj
@@ -113,7 +113,7 @@
-
+
diff --git a/OpenAPI/LearningHub.Nhs.OpenApi.Models/LearningHub.Nhs.OpenApi.Models.csproj b/OpenAPI/LearningHub.Nhs.OpenApi.Models/LearningHub.Nhs.OpenApi.Models.csproj
index 727560e3f..a6783cf90 100644
--- a/OpenAPI/LearningHub.Nhs.OpenApi.Models/LearningHub.Nhs.OpenApi.Models.csproj
+++ b/OpenAPI/LearningHub.Nhs.OpenApi.Models/LearningHub.Nhs.OpenApi.Models.csproj
@@ -16,7 +16,7 @@
-
+
diff --git a/OpenAPI/LearningHub.Nhs.OpenApi.Repositories.Interface/LearningHub.Nhs.OpenApi.Repositories.Interface.csproj b/OpenAPI/LearningHub.Nhs.OpenApi.Repositories.Interface/LearningHub.Nhs.OpenApi.Repositories.Interface.csproj
index cbab74f45..85e7dbccd 100644
--- a/OpenAPI/LearningHub.Nhs.OpenApi.Repositories.Interface/LearningHub.Nhs.OpenApi.Repositories.Interface.csproj
+++ b/OpenAPI/LearningHub.Nhs.OpenApi.Repositories.Interface/LearningHub.Nhs.OpenApi.Repositories.Interface.csproj
@@ -17,6 +17,7 @@
+
diff --git a/OpenAPI/LearningHub.Nhs.OpenApi.Repositories/EntityFramework/LearningHubDbContext.cs b/OpenAPI/LearningHub.Nhs.OpenApi.Repositories/EntityFramework/LearningHubDbContext.cs
index d055990ce..7680c822e 100644
--- a/OpenAPI/LearningHub.Nhs.OpenApi.Repositories/EntityFramework/LearningHubDbContext.cs
+++ b/OpenAPI/LearningHub.Nhs.OpenApi.Repositories/EntityFramework/LearningHubDbContext.cs
@@ -15,6 +15,7 @@ namespace LearningHub.Nhs.OpenApi.Repositories.EntityFramework
using LearningHub.Nhs.Models.Hierarchy;
using LearningHub.Nhs.Models.Messaging;
using LearningHub.Nhs.Models.MyLearning;
+ using LearningHub.Nhs.Models.Notification;
using LearningHub.Nhs.Models.Resource;
using LearningHub.Nhs.Models.Resource.ResourceDisplay;
using LearningHub.Nhs.Models.User;
@@ -124,6 +125,11 @@ public LearningHubDbContextOptions Options
///
public virtual DbSet Notification { get; set; }
+ ///
+ /// Gets or sets the Notification Count.
+ ///
+ public virtual DbSet NotificationCount { get; set; }
+
///
/// Gets or sets the user notification..
///
diff --git a/OpenAPI/LearningHub.Nhs.OpenApi.Repositories/LearningHub.Nhs.OpenApi.Repositories.csproj b/OpenAPI/LearningHub.Nhs.OpenApi.Repositories/LearningHub.Nhs.OpenApi.Repositories.csproj
index 009e83ef8..83b7551bc 100644
--- a/OpenAPI/LearningHub.Nhs.OpenApi.Repositories/LearningHub.Nhs.OpenApi.Repositories.csproj
+++ b/OpenAPI/LearningHub.Nhs.OpenApi.Repositories/LearningHub.Nhs.OpenApi.Repositories.csproj
@@ -24,6 +24,7 @@
+
diff --git a/OpenAPI/LearningHub.Nhs.OpenApi.Repositories/Repositories/UserNotificationRepository.cs b/OpenAPI/LearningHub.Nhs.OpenApi.Repositories/Repositories/UserNotificationRepository.cs
index 02e67126a..09076e800 100644
--- a/OpenAPI/LearningHub.Nhs.OpenApi.Repositories/Repositories/UserNotificationRepository.cs
+++ b/OpenAPI/LearningHub.Nhs.OpenApi.Repositories/Repositories/UserNotificationRepository.cs
@@ -1,12 +1,14 @@
namespace LearningHub.Nhs.OpenApi.Repositories.Repositories
{
using System;
+ using System.Data;
using System.Linq;
using System.Threading.Tasks;
using LearningHub.Nhs.Models.Entities;
using LearningHub.Nhs.Models.Enums;
using LearningHub.Nhs.OpenApi.Repositories.EntityFramework;
using LearningHub.Nhs.OpenApi.Repositories.Interface.Repositories;
+ using Microsoft.Data.SqlClient;
using Microsoft.EntityFrameworkCore;
///
@@ -42,9 +44,23 @@ public async Task GetByIdAsync(int id)
/// The .
public async Task GetUserUnreadNotificationCountAsync(int userId)
{
- return await GetActiveNotifications(userId, DateTimeOffset.Now)
- .Where(n => !n.UserNotification.ReadOnDate.HasValue)
- .CountAsync();
+ try
+ {
+ var param0 = new SqlParameter("@p0", SqlDbType.Int) { Value = userId };
+ var param1 = new SqlParameter("@p1", SqlDbType.Int) { Value = this.TimezoneOffsetManager.UserTimezoneOffset ?? (object)DBNull.Value };
+
+ var result = await this.DbContext
+ .NotificationCount
+ .FromSqlRaw("EXEC hub.GetActiveNotificationCount @p0, @p1", param0, param1)
+ .ToListAsync();
+
+ return result.FirstOrDefault()?.UserNotificationCount ?? 0;
+ }
+ catch (Exception ex)
+ {
+ // Optional: log ex
+ throw new Exception("Failed to get unread notification count: " + ex.Message);
+ }
}
///
diff --git a/OpenAPI/LearningHub.Nhs.OpenApi.Services.Interface/LearningHub.Nhs.OpenApi.Services.Interface.csproj b/OpenAPI/LearningHub.Nhs.OpenApi.Services.Interface/LearningHub.Nhs.OpenApi.Services.Interface.csproj
index aa019e18c..4492e002c 100644
--- a/OpenAPI/LearningHub.Nhs.OpenApi.Services.Interface/LearningHub.Nhs.OpenApi.Services.Interface.csproj
+++ b/OpenAPI/LearningHub.Nhs.OpenApi.Services.Interface/LearningHub.Nhs.OpenApi.Services.Interface.csproj
@@ -17,7 +17,7 @@
-
+
diff --git a/OpenAPI/LearningHub.Nhs.OpenApi.Services.Interface/Services/IResourceService.cs b/OpenAPI/LearningHub.Nhs.OpenApi.Services.Interface/Services/IResourceService.cs
index e8427c4a6..dae96a14b 100644
--- a/OpenAPI/LearningHub.Nhs.OpenApi.Services.Interface/Services/IResourceService.cs
+++ b/OpenAPI/LearningHub.Nhs.OpenApi.Services.Interface/Services/IResourceService.cs
@@ -415,6 +415,13 @@ Task GetAssessmentProgress(
/// The .
Task CreateResourceVersionValidationResultAsync(ResourceVersionValidationResultViewModel validationResultViewModel);
+ ///
+ /// The get resource header view model async.
+ ///
+ /// The resourceReferenceId.
+ /// The .
+ Task GetResourceHeaderViewModelAsync(int resourceReferenceId);
+
///
/// The set resource type.
///
diff --git a/OpenAPI/LearningHub.Nhs.OpenApi.Services/LearningHub.Nhs.OpenApi.Services.csproj b/OpenAPI/LearningHub.Nhs.OpenApi.Services/LearningHub.Nhs.OpenApi.Services.csproj
index 9002a0237..2b379315b 100644
--- a/OpenAPI/LearningHub.Nhs.OpenApi.Services/LearningHub.Nhs.OpenApi.Services.csproj
+++ b/OpenAPI/LearningHub.Nhs.OpenApi.Services/LearningHub.Nhs.OpenApi.Services.csproj
@@ -30,7 +30,7 @@
-
+
diff --git a/OpenAPI/LearningHub.Nhs.OpenApi.Services/Services/DashboardService.cs b/OpenAPI/LearningHub.Nhs.OpenApi.Services/Services/DashboardService.cs
index dfc2bfde2..05cda2b76 100644
--- a/OpenAPI/LearningHub.Nhs.OpenApi.Services/Services/DashboardService.cs
+++ b/OpenAPI/LearningHub.Nhs.OpenApi.Services/Services/DashboardService.cs
@@ -3,9 +3,11 @@
using System;
using System.Collections.Generic;
using System.Linq;
+ using System.Text.Json;
using System.Threading.Tasks;
using AutoMapper;
using LearningHub.Nhs.Models.Dashboard;
+ using LearningHub.Nhs.Models.Provider;
using LearningHub.Nhs.OpenApi.Repositories.Interface.Repositories.Hierarchy;
using LearningHub.Nhs.OpenApi.Repositories.Interface.Repositories.Resources;
using LearningHub.Nhs.OpenApi.Services.Interface.Services;
@@ -56,7 +58,10 @@ public async Task GetMyAccessLearnings(str
{
foreach (var catalogue in catalogueList)
{
- catalogue.Providers = await providerService.GetByCatalogueVersionIdAsync(catalogue.NodeVersionId);
+ if (!string.IsNullOrEmpty(catalogue.ProvidersJson))
+ {
+ catalogue.Providers = JsonSerializer.Deserialize>(catalogue.ProvidersJson);
+ }
}
}
@@ -65,7 +70,10 @@ public async Task GetMyAccessLearnings(str
{
foreach (var resource in resourceList)
{
- resource.Providers = await providerService.GetByResourceVersionIdAsync(resource.ResourceVersionId);
+ if (!string.IsNullOrEmpty(resource.ProvidersJson))
+ {
+ resource.Providers = JsonSerializer.Deserialize>(resource.ProvidersJson);
+ }
}
}
@@ -95,7 +103,10 @@ public async Task GetCatalogues(string dash
var catalogueList = catalogues.Any() ? mapper.Map>(catalogues) : new List();
foreach (var catalogue in catalogueList)
{
- catalogue.Providers = await providerService.GetByCatalogueVersionIdAsync(catalogue.NodeVersionId);
+ if (!string.IsNullOrEmpty(catalogue.ProvidersJson))
+ {
+ catalogue.Providers = JsonSerializer.Deserialize>(catalogue.ProvidersJson);
+ }
}
var response = new DashboardCatalogueResponseViewModel
@@ -123,7 +134,10 @@ public async Task GetResources(string dashbo
foreach (var resource in resourceList)
{
- resource.Providers = await providerService.GetByResourceVersionIdAsync(resource.ResourceVersionId);
+ if (!string.IsNullOrEmpty(resource.ProvidersJson))
+ {
+ resource.Providers = JsonSerializer.Deserialize>(resource.ProvidersJson);
+ }
}
var response = new DashboardResourceResponseViewModel
diff --git a/OpenAPI/LearningHub.Nhs.OpenApi.Services/Services/ResourceService.cs b/OpenAPI/LearningHub.Nhs.OpenApi.Services/Services/ResourceService.cs
index c14d04edc..4534e4756 100644
--- a/OpenAPI/LearningHub.Nhs.OpenApi.Services/Services/ResourceService.cs
+++ b/OpenAPI/LearningHub.Nhs.OpenApi.Services/Services/ResourceService.cs
@@ -3587,6 +3587,23 @@ private LearningHubValidationResult ValidateRequestWithSourceResource(ResourceVe
return result;
}
+ ///
+ /// The get resource header view model async.
+ ///
+ /// The resourceReferenceId.
+ /// The .
+ public async Task GetResourceHeaderViewModelAsync(int resourceReferenceId)
+ {
+ var retVal = new ResourceHeaderViewModel();
+
+ var rv = await this.resourceVersionRepository.GetCurrentForResourceReferenceIdAsync(resourceReferenceId);
+
+ retVal.Id = resourceReferenceId;
+ retVal.Title = rv.Title;
+
+ return retVal;
+ }
+
private LearningHubValidationResult ValidateRequestWithSourceBlockCollection(BlockCollection sourceBlockCollection, DuplicateBlocksRequestModel requestModel)
{
var result = new LearningHubValidationResult(false, "Duplicate Blocks async: ");
diff --git a/OpenAPI/LearningHub.Nhs.OpenApi.Tests/LearningHub.Nhs.OpenApi.Tests.csproj b/OpenAPI/LearningHub.Nhs.OpenApi.Tests/LearningHub.Nhs.OpenApi.Tests.csproj
index c16540ee6..1a280bb2f 100644
--- a/OpenAPI/LearningHub.Nhs.OpenApi.Tests/LearningHub.Nhs.OpenApi.Tests.csproj
+++ b/OpenAPI/LearningHub.Nhs.OpenApi.Tests/LearningHub.Nhs.OpenApi.Tests.csproj
@@ -10,6 +10,7 @@
+
diff --git a/OpenAPI/LearningHub.Nhs.OpenApi/Controllers/ResourceController.cs b/OpenAPI/LearningHub.Nhs.OpenApi/Controllers/ResourceController.cs
index b3a685de3..f14e9c3c1 100644
--- a/OpenAPI/LearningHub.Nhs.OpenApi/Controllers/ResourceController.cs
+++ b/OpenAPI/LearningHub.Nhs.OpenApi/Controllers/ResourceController.cs
@@ -330,6 +330,18 @@ public async Task GetFileTypes()
return this.Ok(await this.fileTypeService.GetAllAsync());
}
+ ///
+ /// The get resource header view model async.
+ ///
+ /// The resourceReferenceId.
+ /// The .
+ [HttpGet]
+ [Route("GetResourceHeaderViewModelAsync/{resourceReferenceId}")]
+ public async Task GetResourceHeaderViewModelAsync(int resourceReferenceId)
+ {
+ return this.Ok(await this.resourceService.GetResourceHeaderViewModelAsync(resourceReferenceId));
+ }
+
///
/// The get file async.
///
diff --git a/OpenAPI/LearningHub.Nhs.OpenApi/LearningHub.NHS.OpenAPI.csproj b/OpenAPI/LearningHub.Nhs.OpenApi/LearningHub.NHS.OpenAPI.csproj
index e8ddf4415..aba7a167a 100644
--- a/OpenAPI/LearningHub.Nhs.OpenApi/LearningHub.NHS.OpenAPI.csproj
+++ b/OpenAPI/LearningHub.Nhs.OpenApi/LearningHub.NHS.OpenAPI.csproj
@@ -18,6 +18,7 @@
+
diff --git a/ReportAPI/LearningHub.Nhs.ReportApi.Services.Interface/LearningHub.Nhs.ReportApi.Services.Interface.csproj b/ReportAPI/LearningHub.Nhs.ReportApi.Services.Interface/LearningHub.Nhs.ReportApi.Services.Interface.csproj
index 227e30bf8..5d2fd2dda 100644
--- a/ReportAPI/LearningHub.Nhs.ReportApi.Services.Interface/LearningHub.Nhs.ReportApi.Services.Interface.csproj
+++ b/ReportAPI/LearningHub.Nhs.ReportApi.Services.Interface/LearningHub.Nhs.ReportApi.Services.Interface.csproj
@@ -16,7 +16,7 @@
-
+
diff --git a/ReportAPI/LearningHub.Nhs.ReportApi.Services.UnitTests/LearningHub.Nhs.ReportApi.Services.UnitTests.csproj b/ReportAPI/LearningHub.Nhs.ReportApi.Services.UnitTests/LearningHub.Nhs.ReportApi.Services.UnitTests.csproj
index 3af90e39a..9dbe65eb4 100644
--- a/ReportAPI/LearningHub.Nhs.ReportApi.Services.UnitTests/LearningHub.Nhs.ReportApi.Services.UnitTests.csproj
+++ b/ReportAPI/LearningHub.Nhs.ReportApi.Services.UnitTests/LearningHub.Nhs.ReportApi.Services.UnitTests.csproj
@@ -18,7 +18,7 @@
-
+
diff --git a/ReportAPI/LearningHub.Nhs.ReportApi.Services/LearningHub.Nhs.ReportApi.Services.csproj b/ReportAPI/LearningHub.Nhs.ReportApi.Services/LearningHub.Nhs.ReportApi.Services.csproj
index c6d03d856..61499e837 100644
--- a/ReportAPI/LearningHub.Nhs.ReportApi.Services/LearningHub.Nhs.ReportApi.Services.csproj
+++ b/ReportAPI/LearningHub.Nhs.ReportApi.Services/LearningHub.Nhs.ReportApi.Services.csproj
@@ -19,7 +19,7 @@
-
+
diff --git a/ReportAPI/LearningHub.Nhs.ReportApi.Shared/LearningHub.Nhs.ReportApi.Shared.csproj b/ReportAPI/LearningHub.Nhs.ReportApi.Shared/LearningHub.Nhs.ReportApi.Shared.csproj
index 78f41769e..c2fd5f750 100644
--- a/ReportAPI/LearningHub.Nhs.ReportApi.Shared/LearningHub.Nhs.ReportApi.Shared.csproj
+++ b/ReportAPI/LearningHub.Nhs.ReportApi.Shared/LearningHub.Nhs.ReportApi.Shared.csproj
@@ -17,7 +17,7 @@
-
+
diff --git a/ReportAPI/LearningHub.Nhs.ReportApi/LearningHub.Nhs.ReportApi.csproj b/ReportAPI/LearningHub.Nhs.ReportApi/LearningHub.Nhs.ReportApi.csproj
index f87bb47d5..412aa5635 100644
--- a/ReportAPI/LearningHub.Nhs.ReportApi/LearningHub.Nhs.ReportApi.csproj
+++ b/ReportAPI/LearningHub.Nhs.ReportApi/LearningHub.Nhs.ReportApi.csproj
@@ -20,7 +20,7 @@
-
+
diff --git a/WebAPI/LearningHub.Nhs.API/LearningHub.Nhs.Api.csproj b/WebAPI/LearningHub.Nhs.API/LearningHub.Nhs.Api.csproj
index 3b09a079f..b9bf9a637 100644
--- a/WebAPI/LearningHub.Nhs.API/LearningHub.Nhs.Api.csproj
+++ b/WebAPI/LearningHub.Nhs.API/LearningHub.Nhs.Api.csproj
@@ -29,7 +29,7 @@
-
+
diff --git a/WebAPI/LearningHub.Nhs.Api.Shared/LearningHub.Nhs.Api.Shared.csproj b/WebAPI/LearningHub.Nhs.Api.Shared/LearningHub.Nhs.Api.Shared.csproj
index 1963fd724..2019c36fd 100644
--- a/WebAPI/LearningHub.Nhs.Api.Shared/LearningHub.Nhs.Api.Shared.csproj
+++ b/WebAPI/LearningHub.Nhs.Api.Shared/LearningHub.Nhs.Api.Shared.csproj
@@ -9,7 +9,7 @@
-
+
all
runtime; build; native; contentfiles; analyzers; buildtransitive
diff --git a/WebAPI/LearningHub.Nhs.Api.UnitTests/LearningHub.Nhs.Api.UnitTests.csproj b/WebAPI/LearningHub.Nhs.Api.UnitTests/LearningHub.Nhs.Api.UnitTests.csproj
index e7a054e23..cb598417e 100644
--- a/WebAPI/LearningHub.Nhs.Api.UnitTests/LearningHub.Nhs.Api.UnitTests.csproj
+++ b/WebAPI/LearningHub.Nhs.Api.UnitTests/LearningHub.Nhs.Api.UnitTests.csproj
@@ -11,7 +11,7 @@
-
+
diff --git a/WebAPI/LearningHub.Nhs.Database/LearningHub.Nhs.Database.sqlproj b/WebAPI/LearningHub.Nhs.Database/LearningHub.Nhs.Database.sqlproj
index 59f6120a2..ae03ab2ae 100644
--- a/WebAPI/LearningHub.Nhs.Database/LearningHub.Nhs.Database.sqlproj
+++ b/WebAPI/LearningHub.Nhs.Database/LearningHub.Nhs.Database.sqlproj
@@ -539,6 +539,7 @@
+
diff --git a/WebAPI/LearningHub.Nhs.Database/Stored Procedures/Hierarchy/GetDashboardCatalogues.sql b/WebAPI/LearningHub.Nhs.Database/Stored Procedures/Hierarchy/GetDashboardCatalogues.sql
index 6210d7846..5120cbf10 100644
--- a/WebAPI/LearningHub.Nhs.Database/Stored Procedures/Hierarchy/GetDashboardCatalogues.sql
+++ b/WebAPI/LearningHub.Nhs.Database/Stored Procedures/Hierarchy/GetDashboardCatalogues.sql
@@ -14,6 +14,7 @@
-- 11 Aug 2023 RS Added CardImageUrl column
-- 27 Sep 2023 HV Included Paging and user accessed catalogues
-- 13 Nov 2023 SA Included Node VersionId in also.
+-- 29 Sep 2025 SA Integrated the provider dertails
-------------------------------------------------------------------------------
CREATE PROCEDURE [hierarchy].[GetDashboardCatalogues]
@DashboardType nvarchar(30),
@@ -57,10 +58,25 @@ BEGIN
,CAST(CASE WHEN cnv.RestrictedAccess = 1 AND auth.CatalogueNodeId IS NULL THEN 0 ELSE 1 END AS bit) AS HasAccess
,ub.Id AS BookMarkId
,CAST(ISNULL(ub.[Deleted], 1) ^ 1 AS BIT) AS IsBookmarked
+ ,cpAgg.ProvidersJson
FROM @Catalogues tc
JOIN [hierarchy].[Node] n ON tc.NodeId = n.Id
JOIN [hierarchy].[NodeVersion] nv ON nv.NodeId = n.Id
JOIN [hierarchy].[CatalogueNodeVersion] cnv ON cnv.NodeVersionId = nv.Id
+ LEFT JOIN (
+ SELECT
+ cnp.CatalogueNodeVersionId,
+ JSON_QUERY('[' + STRING_AGG(
+ '{"Id":' + CAST(p.Id AS NVARCHAR) +
+ ',"Name":"' + p.Name + '"' +
+ ',"Description":"' + p.Description + '"' +
+ ',"Logo":"' + ISNULL(p.Logo, '') + '"}',
+ ',') + ']') AS ProvidersJson
+ FROM hierarchy.CatalogueNodeVersionProvider cnp
+ JOIN hub.Provider p ON p.Id = cnp.ProviderId
+ WHERE p.Deleted = 0 and cnp.Deleted = 0
+ GROUP BY cnp.CatalogueNodeVersionId
+ ) cpAgg ON cpAgg.CatalogueNodeVersionId = cnv.Id
JOIN hub.Scope s ON n.Id = s.CatalogueNodeId
LEFT JOIN hub.UserBookmark ub ON ub.UserId = @UserId AND ub.NodeId = nv.NodeId
LEFT JOIN ( SELECT DISTINCT CatalogueNodeId
@@ -88,10 +104,25 @@ BEGIN
,CAST(CASE WHEN cnv.RestrictedAccess = 1 AND auth.CatalogueNodeId IS NULL THEN 0 ELSE 1 END AS bit) AS HasAccess
,ub.Id AS BookMarkId
,CAST(ISNULL(ub.[Deleted], 1) ^ 1 AS BIT) AS IsBookmarked
+ ,cpAgg.ProvidersJson
INTO #recentcatalogues
FROM [hierarchy].[Node] n
JOIN [hierarchy].[NodeVersion] nv ON nv.NodeId = n.Id
JOIN [hierarchy].[CatalogueNodeVersion] cnv ON cnv.NodeVersionId = nv.Id
+ LEFT JOIN (
+ SELECT
+ cnp.CatalogueNodeVersionId,
+ JSON_QUERY('[' + STRING_AGG(
+ '{"Id":' + CAST(p.Id AS NVARCHAR) +
+ ',"Name":"' + p.Name + '"' +
+ ',"Description":"' + p.Description + '"' +
+ ',"Logo":"' + ISNULL(p.Logo, '') + '"}',
+ ',') + ']') AS ProvidersJson
+ FROM hierarchy.CatalogueNodeVersionProvider cnp
+ JOIN hub.Provider p ON p.Id = cnp.ProviderId
+ WHERE p.Deleted = 0 and cnp.Deleted = 0
+ GROUP BY cnp.CatalogueNodeVersionId
+ ) cpAgg ON cpAgg.CatalogueNodeVersionId = cnv.Id
LEFT JOIN hub.UserBookmark ub ON ub.UserId = @UserId AND ub.NodeId = nv.NodeId
LEFT JOIN ( SELECT DISTINCT CatalogueNodeId
FROM [hub].[RoleUserGroupView] rug JOIN hub.UserUserGroup uug ON rug.UserGroupId = uug.UserGroupId
@@ -141,10 +172,25 @@ BEGIN
) AS AverageRating
,ub.Id AS BookMarkId
,CAST(ISNULL(ub.[Deleted], 1) ^ 1 AS BIT) AS IsBookmarked
+ ,cpAgg.ProvidersJson
FROM @Catalogues tc
JOIN [hierarchy].[Node] n ON tc.NodeId = n.Id
JOIN [hierarchy].[NodeVersion] nv ON nv.NodeId = n.Id
JOIN [hierarchy].[CatalogueNodeVersion] cnv ON cnv.NodeVersionId = nv.Id
+ LEFT JOIN (
+ SELECT
+ cnp.CatalogueNodeVersionId,
+ JSON_QUERY('[' + STRING_AGG(
+ '{"Id":' + CAST(p.Id AS NVARCHAR) +
+ ',"Name":"' + p.Name + '"' +
+ ',"Description":"' + p.Description + '"' +
+ ',"Logo":"' + ISNULL(p.Logo, '') + '"}',
+ ',') + ']') AS ProvidersJson
+ FROM hierarchy.CatalogueNodeVersionProvider cnp
+ JOIN hub.Provider p ON p.Id = cnp.ProviderId
+ WHERE p.Deleted = 0 and cnp.Deleted = 0
+ GROUP BY cnp.CatalogueNodeVersionId
+ ) cpAgg ON cpAgg.CatalogueNodeVersionId = cnv.Id
LEFT JOIN hub.UserBookmark ub ON ub.UserId = @UserId AND ub.NodeId = nv.NodeId
LEFT JOIN ( SELECT DISTINCT CatalogueNodeId
FROM [hub].[RoleUserGroupView] rug JOIN hub.UserUserGroup uug ON rug.UserGroupId = uug.UserGroupId
@@ -178,9 +224,24 @@ BEGIN
,CAST(CASE WHEN cnv.RestrictedAccess = 1 AND auth.CatalogueNodeId IS NULL THEN 0 ELSE 1 END AS bit) AS HasAccess
,ub.Id AS BookMarkId
,CAST(ISNULL(ub.[Deleted], 1) ^ 1 AS BIT) AS IsBookmarked
+ ,cpAgg.ProvidersJson
FROM [hierarchy].[Node] n
JOIN [hierarchy].[NodeVersion] nv ON nv.NodeId = n.Id
JOIN [hierarchy].[CatalogueNodeVersion] cnv ON cnv.NodeVersionId = nv.Id
+ LEFT JOIN (
+ SELECT
+ cnp.CatalogueNodeVersionId,
+ JSON_QUERY('[' + STRING_AGG(
+ '{"Id":' + CAST(p.Id AS NVARCHAR) +
+ ',"Name":"' + p.Name + '"' +
+ ',"Description":"' + p.Description + '"' +
+ ',"Logo":"' + ISNULL(p.Logo, '') + '"}',
+ ',') + ']') AS ProvidersJson
+ FROM hierarchy.CatalogueNodeVersionProvider cnp
+ JOIN hub.Provider p ON p.Id = cnp.ProviderId
+ WHERE p.Deleted = 0 and cnp.Deleted = 0
+ GROUP BY cnp.CatalogueNodeVersionId
+ ) cpAgg ON cpAgg.CatalogueNodeVersionId = cnv.Id
LEFT JOIN hub.UserBookmark ub ON ub.UserId = @UserId AND ub.NodeId = nv.NodeId
LEFT JOIN ( SELECT DISTINCT CatalogueNodeId
FROM [hub].[RoleUserGroupView] rug JOIN hub.UserUserGroup uug ON rug.UserGroupId = uug.UserGroupId
@@ -222,10 +283,25 @@ BEGIN
,CAST(CASE WHEN cnv.RestrictedAccess = 1 AND auth.CatalogueNodeId IS NULL THEN 0 ELSE 1 END AS bit) AS HasAccess
,ub.Id AS BookMarkId
,CAST(ISNULL(ub.[Deleted], 1) ^ 1 AS BIT) AS IsBookmarked
+ ,cpAgg.ProvidersJson
FROM @MyActivity ma
JOIN [hierarchy].[Node] n ON ma.NodeId = n.Id
JOIN [hierarchy].[NodeVersion] nv ON nv.NodeId = ma.CatalogueNodeId
LEFT JOIN [hierarchy].[CatalogueNodeVersion] cnv ON cnv.NodeVersionId = nv.Id
+ LEFT JOIN (
+ SELECT
+ cnp.CatalogueNodeVersionId,
+ JSON_QUERY('[' + STRING_AGG(
+ '{"Id":' + CAST(p.Id AS NVARCHAR) +
+ ',"Name":"' + p.Name + '"' +
+ ',"Description":"' + p.Description + '"' +
+ ',"Logo":"' + ISNULL(p.Logo, '') + '"}',
+ ',') + ']') AS ProvidersJson
+ FROM hierarchy.CatalogueNodeVersionProvider cnp
+ JOIN hub.Provider p ON p.Id = cnp.ProviderId
+ WHERE p.Deleted = 0 and cnp.Deleted = 0
+ GROUP BY cnp.CatalogueNodeVersionId
+ ) cpAgg ON cpAgg.CatalogueNodeVersionId = cnv.Id
INNER JOIN hub.Scope s ON ma.CatalogueNodeId = s.CatalogueNodeId
LEFT JOIN hub.UserBookmark ub ON ub.UserId = @UserId AND ub.NodeId = nv.NodeId
LEFT JOIN ( SELECT DISTINCT CatalogueNodeId
diff --git a/WebAPI/LearningHub.Nhs.Database/Stored Procedures/Hub/GetActiveNotificationCount.sql b/WebAPI/LearningHub.Nhs.Database/Stored Procedures/Hub/GetActiveNotificationCount.sql
new file mode 100644
index 000000000..b3c5f1fc2
--- /dev/null
+++ b/WebAPI/LearningHub.Nhs.Database/Stored Procedures/Hub/GetActiveNotificationCount.sql
@@ -0,0 +1,30 @@
+-------------------------------------------------------------------------------
+-- Author Swapnamol ABraham
+-- Created 29 Sep 2025
+-- Purpose Move User notification EF call into the SP
+--
+-- Modification History
+--
+-- 29 Sep 2025 SA Initial Revision
+-------------------------------------------------------------------------------
+
+CREATE PROCEDURE [hub].[GetActiveNotificationCount]
+ @UserId INT,
+ @UserTimezoneOffset int = NULL
+AS
+BEGIN
+ SET NOCOUNT ON;
+ DECLARE @NOW datetimeoffset(7) = ISNULL(TODATETIMEOFFSET(DATEADD(mi, @UserTimezoneOffset, GETUTCDATE()), @UserTimezoneOffset), SYSDATETIMEOFFSET())
+
+ SELECT 1 as Id, COUNT(*) AS UserNotificationCount
+ FROM [hub].[Notification] AS n
+ LEFT JOIN [hub].[UserNotification] AS t
+ ON n.Id = t.NotificationId
+ AND t.UserId = @UserId
+ AND t.Deleted = 0
+ WHERE n.Deleted = 0
+ AND @Now BETWEEN n.StartDate AND n.EndDate
+ AND (n.IsUserSpecific = 0 OR t.UserId = @UserId)
+ AND (t.Id IS NULL OR t.Dismissed = 0)
+ AND t.ReadOnDate IS NULL;
+END
diff --git a/WebAPI/LearningHub.Nhs.Database/Stored Procedures/Resources/GetMyInProgressDashboardResources.sql b/WebAPI/LearningHub.Nhs.Database/Stored Procedures/Resources/GetMyInProgressDashboardResources.sql
index a56e37084..59ddb3bff 100644
--- a/WebAPI/LearningHub.Nhs.Database/Stored Procedures/Resources/GetMyInProgressDashboardResources.sql
+++ b/WebAPI/LearningHub.Nhs.Database/Stored Procedures/Resources/GetMyInProgressDashboardResources.sql
@@ -8,6 +8,7 @@
-- 24 Jun 2024 OA Initial Revision
-- 27 Jun 2024 SA My Learning Dashboard Tray showing Wrong Counts
-- 17 Jan 2025 TD-5255: SA The My learning page does show the activity but it's not showing up under accessed learning
+-- 29 Sep 2025 SA Integrated the provider dertails
-------------------------------------------------------------------------------
CREATE PROCEDURE [resources].[GetMyInProgressDashboardResources]
@@ -78,10 +79,25 @@ BEGIN
,CAST(ISNULL(ub.[Deleted], 1) ^ 1 AS BIT) AS IsBookmarked
,rvrs.AverageRating
,rvrs.RatingCount
+ ,rpAgg.ProvidersJson
FROM @MyActivity ma
JOIN activity.ResourceActivity ra ON ra.id = ma.ResourceActivityId
JOIN resources.resourceversion rv ON rv.id = ra.ResourceVersionId AND rv.Deleted = 0
JOIN Resources.Resource r ON r.Id = rv.ResourceId
+ LEFT JOIN (
+ SELECT
+ rp.ResourceVersionId,
+ JSON_QUERY('[' + STRING_AGG(
+ '{"Id":' + CAST(p.Id AS NVARCHAR) +
+ ',"Name":"' + p.Name + '"' +
+ ',"Description":"' + p.Description + '"' +
+ ',"Logo":"' + ISNULL(p.Logo, '') + '"}',
+ ',') + ']') AS ProvidersJson
+ FROM resources.ResourceVersionProvider rp
+ JOIN hub.Provider p ON p.Id = rp.ProviderId
+ WHERE p.Deleted = 0 and rp.Deleted = 0
+ GROUP BY rp.ResourceVersionId
+ ) rpAgg ON rpAgg.ResourceVersionId = r.CurrentResourceVersionId
JOIN hierarchy.Publication p ON rv.PublicationId = p.Id AND p.Deleted = 0
JOIN resources.ResourceVersionRatingSummary rvrs ON rv.Id = rvrs.ResourceVersionId AND rvrs.Deleted = 0
JOIN hierarchy.NodeResource nr ON r.Id = nr.ResourceId AND nr.Deleted = 0
@@ -120,4 +136,4 @@ BEGIN
FROM [hub].[RoleUserGroupView] rug JOIN hub.UserUserGroup uug ON rug.UserGroupId = uug.UserGroupId
WHERE rug.ScopeTypeId = 1 and rug.RoleId in (1,2,3) and uug.Deleted = 0 and uug.UserId = @userId) auth ON n.Id = auth.CatalogueNodeId
-END
\ No newline at end of file
+END
diff --git a/WebAPI/LearningHub.Nhs.Database/Stored Procedures/Resources/GetMyLearningCertificatesDashboardResources.sql b/WebAPI/LearningHub.Nhs.Database/Stored Procedures/Resources/GetMyLearningCertificatesDashboardResources.sql
index 986e25423..8b141b80f 100644
--- a/WebAPI/LearningHub.Nhs.Database/Stored Procedures/Resources/GetMyLearningCertificatesDashboardResources.sql
+++ b/WebAPI/LearningHub.Nhs.Database/Stored Procedures/Resources/GetMyLearningCertificatesDashboardResources.sql
@@ -6,6 +6,7 @@
-- Modification History
--
-- 24 Jun 2024 OA Initial Revision
+-- 29 Sep 2025 SA Integrated the provider dertails
-------------------------------------------------------------------------------
CREATE PROCEDURE [resources].[GetMyLearningCertificatesDashboardResources]
@@ -75,10 +76,25 @@ BEGIN
,CAST(ISNULL(ub.[Deleted], 1) ^ 1 AS BIT) AS IsBookmarked
,rvrs.AverageRating
,rvrs.RatingCount
+ ,rpAgg.ProvidersJson
FROM @MyActivity ma
JOIN activity.ResourceActivity ra ON ra.id = ma.ResourceActivityId
JOIN resources.resourceversion rv ON rv.id = ra.ResourceVersionId AND rv.Deleted = 0
JOIN Resources.Resource r ON r.Id = rv.ResourceId
+LEFT JOIN (
+ SELECT
+ rp.ResourceVersionId,
+ JSON_QUERY('[' + STRING_AGG(
+ '{"Id":' + CAST(p.Id AS NVARCHAR) +
+ ',"Name":"' + p.Name + '"' +
+ ',"Description":"' + p.Description + '"' +
+ ',"Logo":"' + ISNULL(p.Logo, '') + '"}',
+ ',') + ']') AS ProvidersJson
+ FROM resources.ResourceVersionProvider rp
+ JOIN hub.Provider p ON p.Id = rp.ProviderId
+ WHERE p.Deleted = 0 and rp.Deleted = 0
+ GROUP BY rp.ResourceVersionId
+ ) rpAgg ON rpAgg.ResourceVersionId = r.CurrentResourceVersionId
JOIN hierarchy.Publication p ON rv.PublicationId = p.Id AND p.Deleted = 0
JOIN resources.ResourceVersionRatingSummary rvrs ON rv.Id = rvrs.ResourceVersionId AND rvrs.Deleted = 0
JOIN hierarchy.NodeResource nr ON r.Id = nr.ResourceId AND nr.Deleted = 0
diff --git a/WebAPI/LearningHub.Nhs.Database/Stored Procedures/Resources/GetMyRecentCompletedDashboardResources.sql b/WebAPI/LearningHub.Nhs.Database/Stored Procedures/Resources/GetMyRecentCompletedDashboardResources.sql
index cb12b2a10..465cc84a3 100644
--- a/WebAPI/LearningHub.Nhs.Database/Stored Procedures/Resources/GetMyRecentCompletedDashboardResources.sql
+++ b/WebAPI/LearningHub.Nhs.Database/Stored Procedures/Resources/GetMyRecentCompletedDashboardResources.sql
@@ -7,6 +7,7 @@
--
-- 24 Jun 2024 OA Initial Revision
-- 27 Jun 2024 SA Removed unused temp tables
+-- 29 Sep 2025 SA Integrated the provider dertails
-------------------------------------------------------------------------------
CREATE PROCEDURE [resources].[GetMyRecentCompletedDashboardResources]
@@ -74,10 +75,25 @@ BEGIN
,CAST(ISNULL(ub.[Deleted], 1) ^ 1 AS BIT) AS IsBookmarked
,rvrs.AverageRating
,rvrs.RatingCount
+ ,rpAgg.ProvidersJson
FROM @MyActivity ma
JOIN activity.ResourceActivity ra ON ra.id = ma.ResourceActivityId
JOIN resources.resourceversion rv ON rv.id = ra.ResourceVersionId AND rv.Deleted = 0
JOIN Resources.Resource r ON r.Id = rv.ResourceId
+LEFT JOIN (
+ SELECT
+ rp.ResourceVersionId,
+ JSON_QUERY('[' + STRING_AGG(
+ '{"Id":' + CAST(p.Id AS NVARCHAR) +
+ ',"Name":"' + p.Name + '"' +
+ ',"Description":"' + p.Description + '"' +
+ ',"Logo":"' + ISNULL(p.Logo, '') + '"}',
+ ',') + ']') AS ProvidersJson
+ FROM resources.ResourceVersionProvider rp
+ JOIN hub.Provider p ON p.Id = rp.ProviderId
+ WHERE p.Deleted = 0 and rp.Deleted = 0
+ GROUP BY rp.ResourceVersionId
+ ) rpAgg ON rpAgg.ResourceVersionId = r.CurrentResourceVersionId
JOIN hierarchy.Publication p ON rv.PublicationId = p.Id AND p.Deleted = 0
JOIN resources.ResourceVersionRatingSummary rvrs ON rv.Id = rvrs.ResourceVersionId AND rvrs.Deleted = 0
JOIN hierarchy.NodeResource nr ON r.Id = nr.ResourceId AND nr.Deleted = 0
@@ -116,4 +132,4 @@ LEFT JOIN ( SELECT DISTINCT CatalogueNodeId
FROM [hub].[RoleUserGroupView] rug JOIN hub.UserUserGroup uug ON rug.UserGroupId = uug.UserGroupId
WHERE rug.ScopeTypeId = 1 and rug.RoleId in (1,2,3) and uug.Deleted = 0 and uug.UserId = @userId) auth ON n.Id = auth.CatalogueNodeId
-END
\ No newline at end of file
+END
diff --git a/WebAPI/LearningHub.Nhs.Database/Stored Procedures/Resources/GetPopularDashboardResources.sql b/WebAPI/LearningHub.Nhs.Database/Stored Procedures/Resources/GetPopularDashboardResources.sql
index c9904f0fc..3c0186a08 100644
--- a/WebAPI/LearningHub.Nhs.Database/Stored Procedures/Resources/GetPopularDashboardResources.sql
+++ b/WebAPI/LearningHub.Nhs.Database/Stored Procedures/Resources/GetPopularDashboardResources.sql
@@ -7,6 +7,7 @@
--
-- 24 Jun 2024 OA Initial Revision
-- 27 Jun 2024 SA Removed unused temp tables
+-- 29 Sep 2025 SA Integarted providerid details
-------------------------------------------------------------------------------
CREATE PROCEDURE [resources].[GetPopularDashboardResources]
@@ -70,9 +71,24 @@ BEGIN
,CAST(ISNULL(ub.[Deleted], 1) ^ 1 AS BIT) AS IsBookmarked
,rvrs.AverageRating
,rvrs.RatingCount
+ ,rpAgg.ProvidersJson
FROM @Resources tr
JOIN resources.Resource r ON r.id = tr.ResourceId
JOIN resources.resourceversion rv ON rv.ResourceId = r.Id AND rv.id = r.CurrentResourceVersionId AND rv.Deleted = 0
+ LEFT JOIN (
+ SELECT
+ rp.ResourceVersionId,
+ JSON_QUERY('[' + STRING_AGG(
+ '{"Id":' + CAST(p.Id AS NVARCHAR) +
+ ',"Name":"' + p.Name + '"' +
+ ',"Description":"' + p.Description + '"' +
+ ',"Logo":"' + ISNULL(p.Logo, '') + '"}',
+ ',') + ']') AS ProvidersJson
+ FROM resources.ResourceVersionProvider rp
+ JOIN hub.Provider p ON p.Id = rp.ProviderId
+ WHERE p.Deleted = 0 and rp.Deleted = 0
+ GROUP BY rp.ResourceVersionId
+ ) rpAgg ON rpAgg.ResourceVersionId = r.CurrentResourceVersionId
JOIN resources.ResourceVersionRatingSummary rvrs ON r.CurrentResourceVersionId = rvrs.ResourceVersionId AND rvrs.Deleted = 0
JOIN hierarchy.NodeResource nr ON r.Id = nr.ResourceId AND nr.Deleted = 0
JOIN hierarchy.Node n ON n.Id = nr.NodeId AND n.Hidden = 0 AND n.Deleted = 0
@@ -93,4 +109,4 @@ BEGIN
SELECT @TotalRecords = CASE WHEN COUNT(*) > 12 THEN @MaxRows ELSE COUNT(*) END FROM @Resources
-END
\ No newline at end of file
+END
diff --git a/WebAPI/LearningHub.Nhs.Database/Stored Procedures/Resources/GetRatedDashboardResources.sql b/WebAPI/LearningHub.Nhs.Database/Stored Procedures/Resources/GetRatedDashboardResources.sql
index 56b994092..b9c7969c6 100644
--- a/WebAPI/LearningHub.Nhs.Database/Stored Procedures/Resources/GetRatedDashboardResources.sql
+++ b/WebAPI/LearningHub.Nhs.Database/Stored Procedures/Resources/GetRatedDashboardResources.sql
@@ -7,6 +7,7 @@
--
-- 24 Jun 2024 OA Initial Revision
-- 27 Jun 2024 SA Removed unused temp tables
+-- 29 Sep 2025 SA Integrated the provider dertails
-------------------------------------------------------------------------------
CREATE PROCEDURE [resources].[GetRatedDashboardResources]
@@ -53,9 +54,24 @@ BEGIN
,CAST(ISNULL(ub.[Deleted], 1) ^ 1 AS BIT) AS IsBookmarked
,rvrs.AverageRating
,rvrs.RatingCount
+ ,rpAgg.ProvidersJson
INTO #ratedresources
FROM Resources.Resource r
JOIN resources.resourceversion rv ON rv.ResourceId = r.Id AND rv.id = r.CurrentResourceVersionId AND rv.Deleted = 0
+ LEFT JOIN (
+ SELECT
+ rp.ResourceVersionId,
+ JSON_QUERY('[' + STRING_AGG(
+ '{"Id":' + CAST(p.Id AS NVARCHAR) +
+ ',"Name":"' + p.Name + '"' +
+ ',"Description":"' + p.Description + '"' +
+ ',"Logo":"' + ISNULL(p.Logo, '') + '"}',
+ ',') + ']') AS ProvidersJson
+ FROM resources.ResourceVersionProvider rp
+ JOIN hub.Provider p ON p.Id = rp.ProviderId
+ WHERE p.Deleted = 0 and rp.Deleted = 0
+ GROUP BY rp.ResourceVersionId
+ ) rpAgg ON rpAgg.ResourceVersionId = r.CurrentResourceVersionId
JOIN resources.ResourceVersionRatingSummary rvrs ON r.CurrentResourceVersionId = rvrs.ResourceVersionId AND rvrs.RatingCount > 0
JOIN hierarchy.NodeResource nr ON r.Id = nr.ResourceId AND nr.Deleted = 0
JOIN hierarchy.Node n ON n.Id = nr.NodeId AND n.Hidden = 0 AND n.Deleted = 0
@@ -80,4 +96,4 @@ BEGIN
SELECT @TotalRecords = CASE WHEN COUNT(*) > 12 THEN @MaxRows ELSE COUNT(*) END FROM #ratedresources
-END
\ No newline at end of file
+END
diff --git a/WebAPI/LearningHub.Nhs.Database/Stored Procedures/Resources/GetRecentDashboardResources.sql b/WebAPI/LearningHub.Nhs.Database/Stored Procedures/Resources/GetRecentDashboardResources.sql
index 5ba8fdd4a..eedbe00e6 100644
--- a/WebAPI/LearningHub.Nhs.Database/Stored Procedures/Resources/GetRecentDashboardResources.sql
+++ b/WebAPI/LearningHub.Nhs.Database/Stored Procedures/Resources/GetRecentDashboardResources.sql
@@ -7,6 +7,7 @@
--
-- 24 Jun 2024 OA Initial Revision
-- 27 Jun 2024 SA Removed unused temp tables
+-- 29 Sep 2025 SA Integrated the provider dertails
-------------------------------------------------------------------------------
CREATE PROCEDURE [resources].[GetRecentDashboardResources]
@@ -53,9 +54,24 @@ BEGIN
,CAST(ISNULL(ub.[Deleted], 1) ^ 1 AS BIT) AS IsBookmarked
,rvrs.AverageRating
,rvrs.RatingCount
+ ,rpAgg.ProvidersJson
INTO #recentresources
FROM Resources.Resource r
JOIN resources.resourceversion rv ON rv.ResourceId = r.Id AND rv.id = r.CurrentResourceVersionId AND rv.Deleted = 0
+ LEFT JOIN (
+ SELECT
+ rp.ResourceVersionId,
+ JSON_QUERY('[' + STRING_AGG(
+ '{"Id":' + CAST(p.Id AS NVARCHAR) +
+ ',"Name":"' + p.Name + '"' +
+ ',"Description":"' + p.Description + '"' +
+ ',"Logo":"' + ISNULL(p.Logo, '') + '"}',
+ ',') + ']') AS ProvidersJson
+ FROM resources.ResourceVersionProvider rp
+ JOIN hub.Provider p ON p.Id = rp.ProviderId
+ WHERE p.Deleted = 0 and rp.Deleted = 0
+ GROUP BY rp.ResourceVersionId
+ ) rpAgg ON rpAgg.ResourceVersionId = r.CurrentResourceVersionId
JOIN hierarchy.Publication p ON rv.PublicationId = p.Id AND p.Deleted = 0
JOIN resources.ResourceVersionRatingSummary rvrs ON rv.Id = rvrs.ResourceVersionId AND rvrs.Deleted = 0
JOIN hierarchy.NodeResource nr ON r.Id = nr.ResourceId AND nr.Deleted = 0
@@ -79,4 +95,4 @@ BEGIN
FETCH NEXT @FetchRows ROWS ONLY
SELECT @TotalRecords = CASE WHEN COUNT(*) > 12 THEN @MaxRows ELSE COUNT(*) END FROM #recentresources
-END
\ No newline at end of file
+END
diff --git a/WebAPI/LearningHub.Nhs.Repository.Interface/LearningHub.Nhs.Repository.Interface.csproj b/WebAPI/LearningHub.Nhs.Repository.Interface/LearningHub.Nhs.Repository.Interface.csproj
index 7e09ec673..b5dd8c854 100644
--- a/WebAPI/LearningHub.Nhs.Repository.Interface/LearningHub.Nhs.Repository.Interface.csproj
+++ b/WebAPI/LearningHub.Nhs.Repository.Interface/LearningHub.Nhs.Repository.Interface.csproj
@@ -10,7 +10,7 @@
-
+
diff --git a/WebAPI/LearningHub.Nhs.Repository/LearningHub.Nhs.Repository.csproj b/WebAPI/LearningHub.Nhs.Repository/LearningHub.Nhs.Repository.csproj
index 6da0f9200..aba1f9934 100644
--- a/WebAPI/LearningHub.Nhs.Repository/LearningHub.Nhs.Repository.csproj
+++ b/WebAPI/LearningHub.Nhs.Repository/LearningHub.Nhs.Repository.csproj
@@ -9,7 +9,7 @@
-
+
diff --git a/WebAPI/LearningHub.Nhs.Services.Interface/LearningHub.Nhs.Services.Interface.csproj b/WebAPI/LearningHub.Nhs.Services.Interface/LearningHub.Nhs.Services.Interface.csproj
index 024756991..6bb4345f0 100644
--- a/WebAPI/LearningHub.Nhs.Services.Interface/LearningHub.Nhs.Services.Interface.csproj
+++ b/WebAPI/LearningHub.Nhs.Services.Interface/LearningHub.Nhs.Services.Interface.csproj
@@ -16,7 +16,7 @@
-
+
all
diff --git a/WebAPI/LearningHub.Nhs.Services.UnitTests/LearningHub.Nhs.Services.UnitTests.csproj b/WebAPI/LearningHub.Nhs.Services.UnitTests/LearningHub.Nhs.Services.UnitTests.csproj
index 6b6743743..c7d8259f3 100644
--- a/WebAPI/LearningHub.Nhs.Services.UnitTests/LearningHub.Nhs.Services.UnitTests.csproj
+++ b/WebAPI/LearningHub.Nhs.Services.UnitTests/LearningHub.Nhs.Services.UnitTests.csproj
@@ -13,7 +13,7 @@
-
+
diff --git a/WebAPI/LearningHub.Nhs.Services/LearningHub.Nhs.Services.csproj b/WebAPI/LearningHub.Nhs.Services/LearningHub.Nhs.Services.csproj
index 44f8119cb..6b3e9f422 100644
--- a/WebAPI/LearningHub.Nhs.Services/LearningHub.Nhs.Services.csproj
+++ b/WebAPI/LearningHub.Nhs.Services/LearningHub.Nhs.Services.csproj
@@ -13,7 +13,7 @@
-
+
diff --git a/WebAPI/MigrationTool/LearningHub.Nhs.Migration.ConsoleApp/LearningHub.Nhs.Migration.ConsoleApp.csproj b/WebAPI/MigrationTool/LearningHub.Nhs.Migration.ConsoleApp/LearningHub.Nhs.Migration.ConsoleApp.csproj
index 73e18184e..57a336264 100644
--- a/WebAPI/MigrationTool/LearningHub.Nhs.Migration.ConsoleApp/LearningHub.Nhs.Migration.ConsoleApp.csproj
+++ b/WebAPI/MigrationTool/LearningHub.Nhs.Migration.ConsoleApp/LearningHub.Nhs.Migration.ConsoleApp.csproj
@@ -25,7 +25,7 @@
-
+
all
diff --git a/WebAPI/MigrationTool/LearningHub.Nhs.Migration.Interface/LearningHub.Nhs.Migration.Interface.csproj b/WebAPI/MigrationTool/LearningHub.Nhs.Migration.Interface/LearningHub.Nhs.Migration.Interface.csproj
index 7b945c483..5be4b290b 100644
--- a/WebAPI/MigrationTool/LearningHub.Nhs.Migration.Interface/LearningHub.Nhs.Migration.Interface.csproj
+++ b/WebAPI/MigrationTool/LearningHub.Nhs.Migration.Interface/LearningHub.Nhs.Migration.Interface.csproj
@@ -9,7 +9,7 @@
-
+
all
runtime; build; native; contentfiles; analyzers; buildtransitive
diff --git a/WebAPI/MigrationTool/LearningHub.Nhs.Migration.Models/LearningHub.Nhs.Migration.Models.csproj b/WebAPI/MigrationTool/LearningHub.Nhs.Migration.Models/LearningHub.Nhs.Migration.Models.csproj
index 189b0348e..615fbadd4 100644
--- a/WebAPI/MigrationTool/LearningHub.Nhs.Migration.Models/LearningHub.Nhs.Migration.Models.csproj
+++ b/WebAPI/MigrationTool/LearningHub.Nhs.Migration.Models/LearningHub.Nhs.Migration.Models.csproj
@@ -10,7 +10,7 @@
-
+
all
diff --git a/WebAPI/MigrationTool/LearningHub.Nhs.Migration.Staging.Repository/LearningHub.Nhs.Migration.Staging.Repository.csproj b/WebAPI/MigrationTool/LearningHub.Nhs.Migration.Staging.Repository/LearningHub.Nhs.Migration.Staging.Repository.csproj
index 090dce6fc..6200fdc52 100644
--- a/WebAPI/MigrationTool/LearningHub.Nhs.Migration.Staging.Repository/LearningHub.Nhs.Migration.Staging.Repository.csproj
+++ b/WebAPI/MigrationTool/LearningHub.Nhs.Migration.Staging.Repository/LearningHub.Nhs.Migration.Staging.Repository.csproj
@@ -9,7 +9,7 @@
-
+
diff --git a/WebAPI/MigrationTool/LearningHub.Nhs.Migration.UnitTests/LearningHub.Nhs.Migration.UnitTests.csproj b/WebAPI/MigrationTool/LearningHub.Nhs.Migration.UnitTests/LearningHub.Nhs.Migration.UnitTests.csproj
index a9b7683f7..47b1976b3 100644
--- a/WebAPI/MigrationTool/LearningHub.Nhs.Migration.UnitTests/LearningHub.Nhs.Migration.UnitTests.csproj
+++ b/WebAPI/MigrationTool/LearningHub.Nhs.Migration.UnitTests/LearningHub.Nhs.Migration.UnitTests.csproj
@@ -10,7 +10,7 @@
-
+
diff --git a/WebAPI/MigrationTool/LearningHub.Nhs.Migration/LearningHub.Nhs.Migration.csproj b/WebAPI/MigrationTool/LearningHub.Nhs.Migration/LearningHub.Nhs.Migration.csproj
index 71195c130..c104631fa 100644
--- a/WebAPI/MigrationTool/LearningHub.Nhs.Migration/LearningHub.Nhs.Migration.csproj
+++ b/WebAPI/MigrationTool/LearningHub.Nhs.Migration/LearningHub.Nhs.Migration.csproj
@@ -12,7 +12,7 @@
-
+
all
runtime; build; native; contentfiles; analyzers; buildtransitive