39 lines
1.6 KiB
C#
39 lines
1.6 KiB
C#
using FictionArchive.Service.NovelService.Models.IntegrationEvents;
|
|
using FictionArchive.Service.NovelService.Models.Localization;
|
|
using FictionArchive.Service.Shared.Services.EventBus;
|
|
using Microsoft.EntityFrameworkCore;
|
|
|
|
namespace FictionArchive.Service.NovelService.Services.EventHandlers;
|
|
|
|
public class TranslationRequestCompletedEventHandler : IIntegrationEventHandler<TranslationRequestCompletedEvent>
|
|
{
|
|
private readonly ILogger<TranslationRequestCompletedEventHandler> _logger;
|
|
private readonly NovelServiceDbContext _dbContext;
|
|
|
|
public TranslationRequestCompletedEventHandler(ILogger<TranslationRequestCompletedEventHandler> logger, NovelServiceDbContext dbContext)
|
|
{
|
|
_logger = logger;
|
|
_dbContext = dbContext;
|
|
}
|
|
|
|
public async Task Handle(TranslationRequestCompletedEvent @event)
|
|
{
|
|
var localizationRequest = await _dbContext.LocalizationRequests.Include(r => r.KeyRequestedForTranslation)
|
|
.ThenInclude(lk => lk.Texts)
|
|
.FirstOrDefaultAsync(lk => lk.Id == @event.TranslationRequestId);
|
|
if (localizationRequest == null)
|
|
{
|
|
// Not one of our requests, discard it
|
|
return;
|
|
}
|
|
|
|
localizationRequest.KeyRequestedForTranslation.Texts.Add(new LocalizationText()
|
|
{
|
|
Language = localizationRequest.TranslateTo,
|
|
Text = @event.TranslatedText,
|
|
TranslationEngine = localizationRequest.Engine
|
|
});
|
|
_dbContext.LocalizationRequests.Remove(localizationRequest);
|
|
await _dbContext.SaveChangesAsync();
|
|
}
|
|
} |