Updated scanner logic, and added initial scanner tests.

This commit is contained in:
2025-09-14 21:12:00 -04:00
parent 39274165cb
commit 646cf41476
16 changed files with 412 additions and 192 deletions

View File

@@ -1,26 +1,53 @@
using JSMR.Application.Scanning.Ports;
using JSMR.Application.Common.Caching;
using JSMR.Application.Integrations.DLSite.Models;
using JSMR.Application.Integrations.Ports;
using JSMR.Application.Scanning.Contracts;
using JSMR.Application.Scanning.Ports;
using Microsoft.Extensions.DependencyInjection;
namespace JSMR.Application.Scanning;
public sealed class ScanVoiceWorksHandler(IVoiceWorksScanner scanner)
public sealed class ScanVoiceWorksHandler(IServiceProvider serviceProvider, IDLSiteClient dlsiteClient, ISpamCircleCache spamCircleCache)
{
//public async Task<ScanVoiceWorksResponse> HandleAsync(ScanVoiceWorksRequest request, CancellationToken cancellationToken)
//{
// var works = await scanner.ScanPageAsync(request, cancellationToken);
public async Task<ScanVoiceWorksResponse> HandleAsync(ScanVoiceWorksRequest request, CancellationToken cancellationToken)
{
IVoiceWorksScanner? scanner = serviceProvider.GetKeyedService<IVoiceWorksScanner>(request.Locale);
// if (works.Count == 0)
// return new ScanVoiceWorksResponse();
if (scanner is null)
return new();
// var ingests = works.Select(VoiceWorkIngest.From).ToList();
// var upsert = await _writer.UpsertAsync(ingests, ct);
VoiceWorkScanOptions options = new(
PageNumber: request.PageNumber,
PageSize: request.PageSize,
ExcludedMakerIds: await spamCircleCache.GetAsync(cancellationToken),
ExcludePartiallyAIGeneratedWorks: true,
ExcludeAIGeneratedWorks: true
);
// // only update search text for affected rows
// await _search.UpdateAsync(upsert.AffectedVoiceWorkIds, ct);
IReadOnlyList<DLSiteWork> works = await scanner.ScanPageAsync(options, cancellationToken);
// return new ScanVoiceWorksResponse
// {
// Inserted = upsert.Inserted,
// Updated = upsert.Updated
// };
//}
if (works.Count == 0)
return new();
string[] productIds = [.. works.Where(x => !string.IsNullOrWhiteSpace(x.ProductId)).Select(x => x.ProductId!)];
VoiceWorkDetailCollection voiceWorkDetails = await dlsiteClient.GetVoiceWorkDetailsAsync(productIds, cancellationToken);
// TODO
/*
var ingests = works.Select(VoiceWorkIngest.From).ToList();
var upsert = await _writer.UpsertAsync(ingests, ct);
// only update search text for affected rows
await _search.UpdateAsync(upsert.AffectedVoiceWorkIds, ct);
return new ScanVoiceWorksResponse
{
Inserted = upsert.Inserted,
Updated = upsert.Updated
};
*/
return new();
}
}