Files
jsmr/JSMR.Application/Scanning/ScanVoiceWorksHandler.cs
Brian Bicknell 0dd11e6351
All checks were successful
ci / build-test (push) Successful in 2m17s
ci / publish-image (push) Successful in 1m41s
Added English localization logic during the regular scan process.
2026-03-29 21:24:04 -04:00

55 lines
2.1 KiB
C#

using JSMR.Application.Common.Caching;
using JSMR.Application.Scanning.Contracts;
using JSMR.Application.Scanning.Ports;
namespace JSMR.Application.Scanning;
public sealed class ScanVoiceWorksHandler(
IVoiceWorkScannerRepository scannerRepository,
IVoiceWorkUpdaterRepository updaterRepository,
ISpamCircleCache spamCircleCache,
IVoiceWorkIngestBuilder ingestBuilder,
IVoiceWorkSearchUpdater searchUpdater)
{
public async Task<ScanVoiceWorksResponse> HandleAsync(ScanVoiceWorksRequest request, CancellationToken cancellationToken)
{
IVoiceWorksScanner? scanner = scannerRepository.GetScanner(request.Locale);
IVoiceWorkUpdater? updater = updaterRepository.GetUpdater(request.Locale);
if (scanner is null)
throw new InvalidOperationException($"No scanner registered for locale {request.Locale}.");
if (updater is null)
throw new InvalidOperationException($"No updater registered for locale {request.Locale}.");
VoiceWorkScanOptions options = new(
PageNumber: request.PageNumber,
PageSize: request.PageSize,
ExcludedMakerIds: await spamCircleCache.GetAsync(cancellationToken),
ExcludePartiallyAIGeneratedWorks: true,
ExcludeAIGeneratedWorks: true
);
VoiceWorkScanResult scanResult = await scanner.ScanPageAsync(options, cancellationToken);
if (scanResult.EndOfResults)
{
return new ScanVoiceWorksResponse(
Results: [],
EndOfResults: true
);
}
VoiceWorkIngest[] ingests = await ingestBuilder.BuildAsync(scanResult, cancellationToken);
VoiceWorkUpsertResult[] upsertResults = await updater.UpsertAsync(ingests, cancellationToken);
int[] voiceWorkIds = [.. upsertResults.Where(x => x.VoiceWorkId.HasValue).Select(x => x.VoiceWorkId!.Value)];
await searchUpdater.UpdateAsync(voiceWorkIds, cancellationToken);
return new ScanVoiceWorksResponse(
Results: upsertResults,
EndOfResults: false
);
}
}