diff --git a/Directory.Packages.props b/Directory.Packages.props index b08adf805..d763730cd 100644 --- a/Directory.Packages.props +++ b/Directory.Packages.props @@ -26,6 +26,7 @@ + diff --git a/src/api/Elastic.Documentation.Api.Core/Elastic.Documentation.Api.Core.csproj b/src/api/Elastic.Documentation.Api.Core/Elastic.Documentation.Api.Core.csproj index a4ad652a2..e9392cb10 100644 --- a/src/api/Elastic.Documentation.Api.Core/Elastic.Documentation.Api.Core.csproj +++ b/src/api/Elastic.Documentation.Api.Core/Elastic.Documentation.Api.Core.csproj @@ -10,6 +10,7 @@ + diff --git a/src/api/Elastic.Documentation.Api.Core/Search/SearchUsecase.cs b/src/api/Elastic.Documentation.Api.Core/Search/SearchUsecase.cs index 2c81517f6..49b23cb9f 100644 --- a/src/api/Elastic.Documentation.Api.Core/Search/SearchUsecase.cs +++ b/src/api/Elastic.Documentation.Api.Core/Search/SearchUsecase.cs @@ -2,17 +2,14 @@ // Elasticsearch B.V licenses this file to you under the Apache 2.0 License. // See the LICENSE file in the project root for more information +using Microsoft.Extensions.Logging; + namespace Elastic.Documentation.Api.Core.Search; -public class SearchUsecase(ISearchGateway searchGateway) +public partial class SearchUsecase(ISearchGateway searchGateway, ILogger logger) { public async Task Search(SearchRequest request, Cancel ctx = default) { - - // var validationResult = validator.Validate(request); - // if (!validationResult.IsValid) - // throw new ArgumentException(validationResult.Message); - var (totalHits, results) = await searchGateway.SearchAsync( request.Query, request.PageNumber, @@ -20,15 +17,29 @@ public async Task Search(SearchRequest request, Cancel ctx = def ctx ); - - return new SearchResponse + var response = new SearchResponse { Results = results, TotalResults = totalHits, PageNumber = request.PageNumber, PageSize = request.PageSize, }; + + LogSearchResults( + logger, + response.PageSize, + response.PageNumber, + request.Query, + new SearchResultsLogProperties(results.Select(i => i.Url).ToArray()) + ); + + return response; } + + [LoggerMessage(Level = LogLevel.Information, Message = "Search completed with {PageSize} (page {PageNumber}) results for query '{SearchQuery}'")] + private static partial void LogSearchResults(ILogger logger, int pageSize, int pageNumber, string searchQuery, [LogProperties] SearchResultsLogProperties result); + + private sealed record SearchResultsLogProperties(string[] Urls); } public record SearchRequest