From 0fdc5f8c448db8f197a16713a9b670bf22d22223 Mon Sep 17 00:00:00 2001 From: bkapustik <82807109+bkapustik@users.noreply.github.com> Date: Wed, 6 Mar 2024 13:50:15 +0100 Subject: [PATCH 1/2] feat(AzureAISearch): application can be turned off by not including it in the program and does not crash if the nugget is referenced --- Directory.Build.props | 2 +- .../Admin/AzureSearchAdminModule.cs | 8 ++++++++ .../AzureSearchSearchModule.cs | 8 ++++++++ .../AzureSearchStartupExtensions.cs | 19 +++++++++++++++++-- .../Indexing/AzureSearchOptions.cs | 9 +++++++++ 5 files changed, 43 insertions(+), 3 deletions(-) diff --git a/Directory.Build.props b/Directory.Build.props index 6e71a2e..5a70fff 100644 --- a/Directory.Build.props +++ b/Directory.Build.props @@ -5,7 +5,7 @@ $(Company) Copyright © $(Company) $([System.DateTime]::Now.Year) $(Company)™ - 1.0.0 + 1.0.1 MIT diff --git a/src/Kentico.Xperience.AzureSearch/Admin/AzureSearchAdminModule.cs b/src/Kentico.Xperience.AzureSearch/Admin/AzureSearchAdminModule.cs index 6adfe65..225a9d5 100644 --- a/src/Kentico.Xperience.AzureSearch/Admin/AzureSearchAdminModule.cs +++ b/src/Kentico.Xperience.AzureSearch/Admin/AzureSearchAdminModule.cs @@ -6,6 +6,7 @@ using Kentico.Xperience.AzureSearch.Aliasing; using Kentico.Xperience.AzureSearch.Indexing; using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Options; [assembly: RegisterModule(typeof(AzureSearchAdminModule))] @@ -25,6 +26,13 @@ protected override void OnInit(ModuleInitParameters parameters) { base.OnInit(parameters); + var options = Service.Resolve>(); + + if (!options.Value.IsConfigured) + { + return; + } + RegisterClientModule("kentico", "xperience-integrations-azuresearch"); var services = parameters.Services; diff --git a/src/Kentico.Xperience.AzureSearch/AzureSearchSearchModule.cs b/src/Kentico.Xperience.AzureSearch/AzureSearchSearchModule.cs index 5cf6ff6..84e67c4 100644 --- a/src/Kentico.Xperience.AzureSearch/AzureSearchSearchModule.cs +++ b/src/Kentico.Xperience.AzureSearch/AzureSearchSearchModule.cs @@ -7,6 +7,7 @@ using Kentico.Xperience.AzureSearch; using Kentico.Xperience.AzureSearch.Indexing; using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Options; [assembly: RegisterModule(typeof(AzureSearchSearchModule))] @@ -47,6 +48,13 @@ protected override void OnInit(ModuleInitParameters parameters) base.OnInit(parameters); var services = parameters.Services; + var options = services.GetRequiredService>(); + + if (!options.Value.IsConfigured) + { + return; + } + azureSearchTaskLogger = services.GetRequiredService(); appSettingsService = services.GetRequiredService(); diff --git a/src/Kentico.Xperience.AzureSearch/AzureSearchStartupExtensions.cs b/src/Kentico.Xperience.AzureSearch/AzureSearchStartupExtensions.cs index cdfb0cb..2a95038 100644 --- a/src/Kentico.Xperience.AzureSearch/AzureSearchStartupExtensions.cs +++ b/src/Kentico.Xperience.AzureSearch/AzureSearchStartupExtensions.cs @@ -50,9 +50,23 @@ public static IServiceCollection AddKenticoAzureSearch(this IServiceCollection s return serviceCollection; } - private static IServiceCollection AddAzureSearchServicesInternal(this IServiceCollection services, IConfiguration configuration) => - services + private static IServiceCollection AddAzureSearchServicesInternal(this IServiceCollection services, IConfiguration configuration) + { + var azureSection = configuration.GetSection(AzureSearchOptions.CMS_AZURE_SEARCH_SECTION_NAME); + var azureOptions = azureSection.GetChildren(); + + bool isConfigured = false; + + if (azureOptions.Single(x => x.Key == nameof(AzureSearchOptions.SearchServiceEndPoint)).Value != "" + && azureOptions.Single(x => x.Key == nameof(AzureSearchOptions.SearchServiceQueryApiKey)).Value != "" + && azureOptions.Single(x => x.Key == nameof(AzureSearchOptions.SearchServiceAdminApiKey)).Value != "") + { + isConfigured = true; + } + + return services .Configure(configuration.GetSection(AzureSearchOptions.CMS_AZURE_SEARCH_SECTION_NAME)) + .PostConfigure(options => options.IsConfigured = isConfigured) .AddSingleton() .AddSingleton(x => { @@ -70,6 +84,7 @@ private static IServiceCollection AddAzureSearchServicesInternal(this IServiceCo .AddSingleton() .AddSingleton() .AddSingleton(); + } } public interface IAzureSearchBuilder diff --git a/src/Kentico.Xperience.AzureSearch/Indexing/AzureSearchOptions.cs b/src/Kentico.Xperience.AzureSearch/Indexing/AzureSearchOptions.cs index a87e54f..ae6e0ae 100644 --- a/src/Kentico.Xperience.AzureSearch/Indexing/AzureSearchOptions.cs +++ b/src/Kentico.Xperience.AzureSearch/Indexing/AzureSearchOptions.cs @@ -7,6 +7,15 @@ public sealed class AzureSearchOptions /// public const string CMS_AZURE_SEARCH_SECTION_NAME = "CMSAzureSearch"; + /// + /// /// Turn off functionality if application is not configured in the appsettings + /// + public bool IsConfigured + { + get; + set; + } = false; + /// /// Url of azure search provider see for more information. /// From 99a5e9796eff08640b141034855b85f95f3a6326 Mon Sep 17 00:00:00 2001 From: bkapustik <82807109+bkapustik@users.noreply.github.com> Date: Mon, 11 Mar 2024 10:50:22 +0100 Subject: [PATCH 2/2] docs(AzureSearch): update required version of .net to .net 8 --- README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 34cc540..a1c9242 100644 --- a/README.md +++ b/README.md @@ -16,7 +16,7 @@ This integration enables you to create [AzureSearch](https://azure.microsoft.com ### Dependencies -- [ASP.NET Core 6.0](https://dotnet.microsoft.com/en-us/download) +- [ASP.NET Core 8.0](https://dotnet.microsoft.com/en-us/download) - [Xperience by Kentico](https://docs.xperience.io/xp/changelog) - [Azure AI Search](https://github.com/Azure/azure-sdk-for-net/tree/Azure.Search.Documents_11.6.0-beta.2/sdk/search/Azure.Search.Documents) @@ -53,9 +53,9 @@ dotnet add package Kentico.Xperience.AzureSearch 4. Create an index in Xperience's Administration within the Search application added by this library. ![Administration search edit form](/images/xperience-administration-search-index-edit-form.jpg) -1. Rebuild the index in Xperience's Administration within the Search application added by this library. +5. Rebuild the index in Xperience's Administration within the Search application added by this library. ![Administration search edit form](/images/xperience-administration-search-index-list.jpg) -1. Display the results on your site with a Razor View 👍. +6. Display the results on your site with a Razor View 👍. ## Use DancingGoat sample