Moved relevant application layer enums and value objects to the domain layer.

This commit is contained in:
2025-11-01 01:19:34 -04:00
parent 4121bd94d9
commit 14129a8bba
48 changed files with 255 additions and 162 deletions

View File

@@ -1,7 +1,8 @@
using JSMR.Application.Common;
using JSMR.Application.Scanning.Contracts;
using JSMR.Application.Scanning.Contracts;
using JSMR.Application.Scanning.Ports;
using JSMR.Domain.Entities;
using JSMR.Domain.Enums;
using JSMR.Domain.ValueObjects;
using JSMR.Infrastructure.Common.Time;
using JSMR.Infrastructure.Data;
using Microsoft.EntityFrameworkCore;
@@ -40,6 +41,7 @@ public class VoiceWorkUpdater(AppDbContext dbContext, ITimeProvider timeProvider
string[] productIds = [.. ingests.Select(i => i.ProductId).Distinct()];
string[] tagNames = [.. ingests.SelectMany(i => i.Tags).Distinct()];
string[] creatorNames = [.. ingests.SelectMany(i => i.Creators).Distinct()];
string[] seriesIdentifiers = [.. ingests.Where(i => i.Series is not null).Select(i => i.Series!.Identifier).Distinct()];
DateTimeOffset currentScanAnchor = GetCurrentScanAnchor();
DateTimeOffset previousScanAnchor = PreviousScanAnchor(currentScanAnchor);
@@ -63,6 +65,9 @@ public class VoiceWorkUpdater(AppDbContext dbContext, ITimeProvider timeProvider
Creators: await dbContext.Creators
.Where(cr => creatorNames.Contains(cr.Name))
.ToDictionaryAsync(cr => cr.Name, cancellationToken),
Series: await dbContext.Series
.Where(s => seriesIdentifiers.Contains(s.Identifier))
.ToDictionaryAsync(s => s.Identifier, cancellationToken),
Results: productIds.ToDictionary(
productId => productId,
productId => new VoiceWorkUpsertResult()
@@ -135,6 +140,7 @@ public class VoiceWorkUpdater(AppDbContext dbContext, ITimeProvider timeProvider
UpsertCreators(ingest, upsertContext);
UpsertVoiceWorkCreators(ingest, upsertContext);
UpsertVoiceWorkSupportedLanguages(ingest, upsertContext);
UpsertSeries(ingest, upsertContext);
return dbContext.Entry(voiceWork).State switch
{
@@ -183,6 +189,8 @@ public class VoiceWorkUpdater(AppDbContext dbContext, ITimeProvider timeProvider
voiceWork.HasChobit = ingest.HasDLPlay;
voiceWork.StarRating = ingest.StarRating;
voiceWork.Votes = ingest.Votes;
voiceWork.OriginalProductId = ingest.Translation?.OriginalProductId;
voiceWork.AIGeneration = (byte)ingest.AI;
voiceWork.IsValid = true;
voiceWork.LastScannedDate = ComputeLastScannedDate(voiceWork.LastScannedDate, state, upsertContext);
@@ -365,7 +373,7 @@ public class VoiceWorkUpdater(AppDbContext dbContext, ITimeProvider timeProvider
VoiceWork voiceWork = upsertContext.VoiceWorks[ingest.ProductId];
Dictionary<string, VoiceWorkSupportedLanguage> existingLanguageLinks = voiceWork.SupportedLanguages.ToDictionary(x => x.Language);
foreach (ISupportedLanguage supportedLanguage in ingest.SupportedLanguages)
foreach (SupportedLanguage supportedLanguage in ingest.SupportedLanguages)
{
if (!existingLanguageLinks.TryGetValue(supportedLanguage.Code, out VoiceWorkSupportedLanguage? voiceWorkSupportedLanguage))
{
@@ -379,4 +387,39 @@ public class VoiceWorkUpdater(AppDbContext dbContext, ITimeProvider timeProvider
}
}
}
private void UpsertSeries(VoiceWorkIngest ingest, VoiceWorkUpsertContext upsertContext)
{
Series? series = TryGetOrAddSeries(ingest, upsertContext);
VoiceWork voiceWork = upsertContext.VoiceWorks[ingest.ProductId];
voiceWork.Series = series;
}
private Series? TryGetOrAddSeries(VoiceWorkIngest ingest, VoiceWorkUpsertContext upsertContext)
{
if (ingest.Series is null)
return null;
Circle circle = upsertContext.Circles[ingest.MakerId];
if (!upsertContext.Series.TryGetValue(ingest.Series.Identifier, out Series? series))
{
series = new Series
{
Name = ingest.Series.Name,
Identifier = ingest.Series.Identifier,
Circle = circle
};
dbContext.Series.Add(series);
upsertContext.Series[ingest.Series.Identifier] = series;
}
else
{
series.Identifier = ingest.Series.Identifier;
}
return series;
}
}