using JSMR.Application.Common.Search; using JSMR.Application.Logging; using Microsoft.Extensions.Logging; using System.Diagnostics; namespace JSMR.Application.VoiceWorks.Queries.Search; // TODO: Caching? public sealed class SearchVoiceWorksHandler(IVoiceWorkSearchProvider provider, ILogger logger) { public async Task HandleAsync(SearchVoiceWorksRequest request, CancellationToken cancellationToken) { var searchOptions = request.Options; Stopwatch stopWatch = Stopwatch.StartNew(); SearchResult results = await provider.SearchAsync(searchOptions, cancellationToken); long elapsedMilliseconds = stopWatch.ElapsedMilliseconds; LogEvents.SearchCompleted( logger, Elapsed: elapsedMilliseconds, Items: results.Items.Length, Total: results.TotalItems, Page: searchOptions.PageNumber, Size: searchOptions.PageSize, Sort: searchOptions.SortOptions.ToLogObject(), Criteria: searchOptions.Criteria.ToLogObject() ); return new SearchVoiceWorksResponse(results); } }