Added inital job entity and services. Added released works API integration.
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
using JSMR.Application.Integrations.Chobit.Models;
|
||||
|
||||
namespace JSMR.Application.Integrations.Ports;
|
||||
namespace JSMR.Application.Integrations.Chobit.Ports;
|
||||
|
||||
public interface IChobitClient
|
||||
{
|
||||
@@ -1,6 +1,6 @@
|
||||
using JSMR.Application.Integrations.Cien.Models;
|
||||
|
||||
namespace JSMR.Application.Integrations.Ports;
|
||||
namespace JSMR.Application.Integrations.Cien.Ports;
|
||||
|
||||
public interface ICienClient
|
||||
{
|
||||
@@ -0,0 +1,10 @@
|
||||
namespace JSMR.Application.Integrations.DLSite.Models.ReleasedWorks;
|
||||
|
||||
public record ReleasedWork
|
||||
{
|
||||
public required string ProductId { get; init; }
|
||||
public required string Title { get; init; }
|
||||
public required string MaskedTitle { get; init; }
|
||||
public required string Description { get; init; }
|
||||
public required string MaskedDescription { get; init; }
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
using JSMR.Application.Enums;
|
||||
|
||||
namespace JSMR.Application.Integrations.DLSite.Models.ReleasedWorks;
|
||||
|
||||
public record ReleasedWorksRequest(
|
||||
Locale Locale,
|
||||
DateOnly Date,
|
||||
int Period
|
||||
);
|
||||
@@ -0,0 +1,6 @@
|
||||
namespace JSMR.Application.Integrations.DLSite.Models.ReleasedWorks;
|
||||
|
||||
public class ReleasedWorksCollection : Dictionary<string, ReleasedWork>
|
||||
{
|
||||
|
||||
}
|
||||
10
JSMR.Application/Integrations/DLSite/Ports/IDLSiteClient.cs
Normal file
10
JSMR.Application/Integrations/DLSite/Ports/IDLSiteClient.cs
Normal file
@@ -0,0 +1,10 @@
|
||||
using JSMR.Application.Integrations.DLSite.Models;
|
||||
using JSMR.Application.Integrations.DLSite.Models.ReleasedWorks;
|
||||
|
||||
namespace JSMR.Application.Integrations.DLSite.Ports;
|
||||
|
||||
public interface IDLSiteClient
|
||||
{
|
||||
Task<VoiceWorkDetailCollection> GetVoiceWorkDetailsAsync(string[] productIds, CancellationToken cancellationToken = default);
|
||||
Task<ReleasedWorksCollection> GetReleasedWorksAsync(ReleasedWorksRequest request, CancellationToken cancellationToken);
|
||||
}
|
||||
@@ -1,8 +0,0 @@
|
||||
using JSMR.Application.Integrations.DLSite.Models;
|
||||
|
||||
namespace JSMR.Application.Integrations.Ports;
|
||||
|
||||
public interface IDLSiteClient
|
||||
{
|
||||
Task<VoiceWorkDetailCollection> GetVoiceWorkDetailsAsync(string[] productIds, CancellationToken cancellationToken = default);
|
||||
}
|
||||
10
JSMR.Application/Jobs/IJobProgressWriter.cs
Normal file
10
JSMR.Application/Jobs/IJobProgressWriter.cs
Normal file
@@ -0,0 +1,10 @@
|
||||
namespace JSMR.Application.Jobs;
|
||||
|
||||
public interface IJobProgressWriter
|
||||
{
|
||||
Task SetStepAsync(int jobId, string step, CancellationToken cancellationToken);
|
||||
Task SetProgressAsync(int jobId, int? current, int? total, CancellationToken cancellationToken);
|
||||
Task SetHeartbeatAsync(int jobId, CancellationToken cancellationToken);
|
||||
Task CompleteAsync(int jobId, string? summary, CancellationToken cancellationToken);
|
||||
Task FailAsync(int jobId, string error, CancellationToken cancellationTokenct);
|
||||
}
|
||||
15
JSMR.Application/Jobs/IJobRepository.cs
Normal file
15
JSMR.Application/Jobs/IJobRepository.cs
Normal file
@@ -0,0 +1,15 @@
|
||||
using JSMR.Domain.Entities;
|
||||
|
||||
namespace JSMR.Application.Jobs;
|
||||
|
||||
public interface IJobRepository
|
||||
{
|
||||
Task<Job> AddAsync(Job job, CancellationToken cancellationToken);
|
||||
Task<Job?> GetByIdAsync(int id, CancellationToken cancellationToken);
|
||||
Task<IReadOnlyList<Job>> GetRecentAsync(int take, CancellationToken cancellationToken);
|
||||
|
||||
Task<bool> AnyRunningAsync(CancellationToken cancellationToken);
|
||||
Task<Job?> TryClaimNextQueuedAsync(string workerName, CancellationToken cancellationToken);
|
||||
|
||||
Task SaveChangesAsync(CancellationToken cancellationToken);
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
using JSMR.Application.Integrations.DLSite.Models.ReleasedWorks;
|
||||
using JSMR.Application.Scanning.Contracts;
|
||||
|
||||
namespace JSMR.Application.Scanning.Ports;
|
||||
|
||||
public interface IReleasedWorksProvider
|
||||
{
|
||||
Task<ReleasedWorksCollection> GetReleasedWorksAsync(VoiceWorkScanResult scanResult, CancellationToken cancellationToken);
|
||||
}
|
||||
@@ -1,7 +1,9 @@
|
||||
using JSMR.Application.Common.Caching;
|
||||
using JSMR.Application.Integrations.Chobit.Models;
|
||||
using JSMR.Application.Integrations.Chobit.Ports;
|
||||
using JSMR.Application.Integrations.DLSite.Models;
|
||||
using JSMR.Application.Integrations.Ports;
|
||||
using JSMR.Application.Integrations.DLSite.Models.ReleasedWorks;
|
||||
using JSMR.Application.Integrations.DLSite.Ports;
|
||||
using JSMR.Application.Scanning.Contracts;
|
||||
using JSMR.Application.Scanning.Ports;
|
||||
|
||||
@@ -13,6 +15,7 @@ public sealed class ScanVoiceWorksHandler(
|
||||
IDLSiteClient dlsiteClient,
|
||||
IChobitClient chobitClient,
|
||||
ISpamCircleCache spamCircleCache,
|
||||
IReleasedWorksProvider releasedWorksProvider,
|
||||
IVoiceWorkSearchUpdater searchUpdater)
|
||||
{
|
||||
public async Task<ScanVoiceWorksResponse> HandleAsync(ScanVoiceWorksRequest request, CancellationToken cancellationToken)
|
||||
@@ -47,11 +50,14 @@ public sealed class ScanVoiceWorksHandler(
|
||||
string[] productIds = [.. scanResult.Works.Where(x => !string.IsNullOrWhiteSpace(x.ProductId)).Select(x => x.ProductId!)];
|
||||
VoiceWorkDetailCollection voiceWorkDetails = await dlsiteClient.GetVoiceWorkDetailsAsync(productIds, cancellationToken);
|
||||
ChobitResultCollection chobitResults = await chobitClient.GetSampleInfoAsync(productIds, cancellationToken);
|
||||
ReleasedWorksCollection releasedWorkCollection = await releasedWorksProvider.GetReleasedWorksAsync(scanResult, cancellationToken);
|
||||
|
||||
VoiceWorkIngest[] ingests = [.. scanResult.Works.Select(work =>
|
||||
{
|
||||
voiceWorkDetails.TryGetValue(work.ProductId!, out VoiceWorkDetails? value);
|
||||
chobitResults.TryGetValue(work.ProductId, out ChobitResult? chobit);
|
||||
releasedWorkCollection.TryGetValue(work.ProductId, out ReleasedWork? releasedWork);
|
||||
|
||||
return VoiceWorkIngest.From(work, value, chobit);
|
||||
})];
|
||||
|
||||
|
||||
Reference in New Issue
Block a user