Files
jsmr/JSMR.Application/Creators/Queries/Search/SearchCreatorsHandler.cs
2025-08-26 09:20:13 -04:00

32 lines
1.2 KiB
C#

using JSMR.Application.Common.Caching;
using JSMR.Application.Common.Search;
using JSMR.Application.Creators.Queries.Search.Contracts;
using JSMR.Application.Creators.Queries.Search.Ports;
namespace JSMR.Application.Creators.Queries.Search;
public sealed class SearchCreatorsHandler(ICreatorSearchProvider searchProvider, ICache cache)
{
public async Task<SearchCreatorsResponse> HandleAsync(SearchCreatorsRequest request, CancellationToken cancellationToken)
{
SearchOptions<CreatorSearchCriteria, CreatorSortField> searchOptions = request.Options;
string cacheKey = $"creator:{searchOptions.GetHashCode()}";
CreatorSearchResults? cachedResults = await cache.GetAsync<CreatorSearchResults>(cacheKey, cancellationToken);
if (cachedResults != null)
return new SearchCreatorsResponse(cachedResults);
SearchResult<CreatorSearchItem> results = await searchProvider.SearchAsync(searchOptions, cancellationToken);
CacheEntryOptions cacheEntryOptions = new()
{
SlidingExpiration = TimeSpan.FromMinutes(10)
};
await cache.SetAsync(cacheKey, results, cacheEntryOptions, cancellationToken);
return new SearchCreatorsResponse(results);
}
}