Files
FictionArchive/FictionArchive.Service.NovelService/Consumers/TranslationRequestCompletedConsumer.cs

49 lines
1.6 KiB
C#

using FictionArchive.Service.NovelService.Models.Localization;
using FictionArchive.Service.NovelService.Services;
using FictionArchive.Service.Shared.Contracts.Events;
using MassTransit;
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Logging;
namespace FictionArchive.Service.NovelService.Consumers;
public class TranslationRequestCompletedConsumer : IConsumer<ITranslationRequestCompleted>
{
private readonly ILogger<TranslationRequestCompletedConsumer> _logger;
private readonly NovelServiceDbContext _dbContext;
public TranslationRequestCompletedConsumer(
ILogger<TranslationRequestCompletedConsumer> logger,
NovelServiceDbContext dbContext)
{
_logger = logger;
_dbContext = dbContext;
}
public async Task Consume(ConsumeContext<ITranslationRequestCompleted> context)
{
var message = context.Message;
var localizationRequest = await _dbContext.LocalizationRequests
.Include(r => r.KeyRequestedForTranslation)
.ThenInclude(lk => lk.Texts)
.FirstOrDefaultAsync(lk => lk.Id == message.TranslationRequestId);
if (localizationRequest == null)
{
// Not one of our requests, discard it
return;
}
localizationRequest.KeyRequestedForTranslation.Texts.Add(new LocalizationText
{
Language = localizationRequest.TranslateTo,
Text = message.TranslatedText,
TranslationEngine = localizationRequest.Engine
});
_dbContext.LocalizationRequests.Remove(localizationRequest);
await _dbContext.SaveChangesAsync();
}
}