@@ -8,6 +8,7 @@ namespace LearningHub.Nhs.WebUI.Controllers
88 using LearningHub . Nhs . Models . Search ;
99 using LearningHub . Nhs . Models . Search . SearchClick ;
1010 using LearningHub . Nhs . WebUI . Filters ;
11+ using LearningHub . Nhs . WebUI . Helpers ;
1112 using LearningHub . Nhs . WebUI . Interfaces ;
1213 using LearningHub . Nhs . WebUI . Models . Search ;
1314 using Microsoft . AspNetCore . Authorization ;
@@ -16,6 +17,7 @@ namespace LearningHub.Nhs.WebUI.Controllers
1617 using Microsoft . AspNetCore . Routing ;
1718 using Microsoft . Extensions . Logging ;
1819 using Microsoft . Extensions . Options ;
20+ using Microsoft . FeatureManagement ;
1921 using Settings = LearningHub . Nhs . WebUI . Configuration . Settings ;
2022
2123 /// <summary>
@@ -28,6 +30,7 @@ public class SearchController : BaseController
2830 {
2931 private readonly ISearchService searchService ;
3032 private readonly IFileService fileService ;
33+ private readonly IFeatureManager featureManager ;
3134
3235 /// <summary>
3336 /// Initializes a new instance of the <see cref="SearchController"/> class.
@@ -38,17 +41,20 @@ public class SearchController : BaseController
3841 /// <param name="searchService">The searchService.</param>
3942 /// <param name="logger">The logger.</param>
4043 /// <param name="fileService">The fileService.</param>
44+ /// <param name="featureManager"> The Feature flag manager.</param>
4145 public SearchController (
4246 IHttpClientFactory httpClientFactory ,
4347 IWebHostEnvironment hostingEnvironment ,
4448 IOptions < Settings > settings ,
4549 ISearchService searchService ,
4650 ILogger < SearchController > logger ,
47- IFileService fileService )
51+ IFileService fileService ,
52+ IFeatureManager featureManager )
4853 : base ( hostingEnvironment , httpClientFactory , logger , settings . Value )
4954 {
5055 this . searchService = searchService ;
5156 this . fileService = fileService ;
57+ this . featureManager = featureManager ;
5258 }
5359
5460 /// <summary>
@@ -65,18 +71,32 @@ public async Task<IActionResult> Index(SearchRequestViewModel search, bool noSor
6571 search . SearchId ??= 0 ;
6672 search . GroupId = ! string . IsNullOrWhiteSpace ( search . GroupId ) && Guid . TryParse ( search . GroupId , out Guid groupId ) ? groupId . ToString ( ) : Guid . NewGuid ( ) . ToString ( ) ;
6773
68- var searchResult = await this . searchService . PerformSearch ( this . User , search ) ;
74+ // Fix: Ensure an instance of IFeatureManager is injected and used
75+ var azureSearchEnabled = Task . Run ( ( ) => this . featureManager . IsEnabledAsync ( FeatureFlags . AzureSearch ) ) . Result ;
76+ SearchResultViewModel searchResult = new SearchResultViewModel ( ) ;
77+
78+ if ( azureSearchEnabled )
79+ {
80+ searchResult = await this . searchService . PerformSearch ( this . User , search ) ;
81+ }
82+ else
83+ {
84+ searchResult = await this . searchService . PerformSearchInFindwise ( this . User , search ) ;
85+ }
6986
7087 if ( search . SearchId == 0 && searchResult . ResourceSearchResult != null )
7188 {
7289 var searchId = await this . searchService . RegisterSearchEventsAsync (
7390 search ,
7491 SearchFormActionTypeEnum . BasicSearch ,
7592 searchResult . ResourceSearchResult . TotalHits ,
76- searchResult . CatalogueSearchResult . TotalHits ) ;
93+ searchResult . CatalogueSearchResult != null ? searchResult . CatalogueSearchResult . TotalHits : 0 ) ;
7794
7895 searchResult . ResourceSearchResult . SearchId = searchId ;
79- searchResult . CatalogueSearchResult . SearchId = searchId ;
96+ if ( searchResult . CatalogueSearchResult != null )
97+ {
98+ searchResult . CatalogueSearchResult . SearchId = searchId ;
99+ }
80100 }
81101
82102 if ( filterApplied )
@@ -109,10 +129,11 @@ public async Task<IActionResult> Index(SearchRequestViewModel search, bool noSor
109129 /// <param name="groupId">The search group id.</param>
110130 /// <param name="searchId">The search id.</param>
111131 /// <param name="actionType">The action type.</param>
132+ /// <param name="resourceCollectionFilter">The show filter.</param>
112133 /// <param name="feedback">The feedback.</param>
113134 /// <returns>The actionResult.</returns>
114135 [ HttpPost ( "results" ) ]
115- public async Task < IActionResult > IndexPost ( [ FromQuery ] SearchRequestViewModel search , int resourceCount , [ FromForm ] IEnumerable < string > filters , [ FromForm ] int ? resourceAccessLevelId , [ FromForm ] IEnumerable < string > providerfilters , [ FromForm ] int ? sortby , [ FromForm ] string groupId , [ FromForm ] int searchId , [ FromQuery ] string actionType , string feedback )
136+ public async Task < IActionResult > IndexPost ( [ FromQuery ] SearchRequestViewModel search , int resourceCount , [ FromForm ] IEnumerable < string > filters , [ FromForm ] int ? resourceAccessLevelId , [ FromForm ] IEnumerable < string > providerfilters , [ FromForm ] int ? sortby , [ FromForm ] string groupId , [ FromForm ] int searchId , [ FromQuery ] string actionType , [ FromForm ] IEnumerable < string > resourceCollectionFilter , string feedback )
116137 {
117138 if ( actionType == "feedback" )
118139 {
@@ -144,14 +165,17 @@ public async Task<IActionResult> IndexPost([FromQuery] SearchRequestViewModel se
144165 var existingProviderFilters = ( search . ProviderFilters ?? new List < string > ( ) ) . OrderBy ( t => t ) ;
145166 var newProviderFilters = providerfilters . OrderBy ( t => t ) ;
146167 var filterProviderUpdated = ! newProviderFilters . SequenceEqual ( existingProviderFilters ) ;
168+ var existingResourceCollectionFilter = ( search . ResourceCollectionFilter ?? new List < string > ( ) ) . OrderBy ( t => t ) ;
169+ var newResourceCollectionFilter = resourceCollectionFilter . OrderBy ( t => t ) ;
170+ var filterResourceCollectionUpdated = ! newResourceCollectionFilter . SequenceEqual ( existingResourceCollectionFilter ) ;
147171
148- // No sort or resource type filter updated or resource access level filter updated or provider filter applied
149- if ( ( search . Sortby ?? 0 ) == sortby && ! filterUpdated && ! resourceAccessLevelFilterUpdated && ! filterProviderUpdated )
172+ // No sort or resource type filter updated or resource access level filter updated or provider filter applied or resource collection filter applied
173+ if ( ( search . Sortby ?? 0 ) == sortby && ! filterUpdated && ! resourceAccessLevelFilterUpdated && ! filterProviderUpdated && ! filterResourceCollectionUpdated )
150174 {
151175 return await this . Index ( search , noSortFilterError : true ) ;
152176 }
153177
154- if ( search . ResourcePageIndex > 0 && ( filterUpdated || resourceAccessLevelFilterUpdated || filterProviderUpdated ) )
178+ if ( search . ResourcePageIndex > 0 && ( filterUpdated || resourceAccessLevelFilterUpdated || filterProviderUpdated || filterResourceCollectionUpdated ) )
155179 {
156180 search . ResourcePageIndex = null ;
157181 }
@@ -163,6 +187,7 @@ public async Task<IActionResult> IndexPost([FromQuery] SearchRequestViewModel se
163187 search . GroupId = groupId ;
164188 search . SearchId = searchId ;
165189 search . ResourceAccessLevelId = resourceAccessLevelId ;
190+ search . ResourceCollectionFilter = resourceCollectionFilter ;
166191
167192 var routeValues = new RouteValueDictionary ( search )
168193 {
0 commit comments