using FictionArchive.Service.NovelService.Models.Localization; using FictionArchive.Service.Shared.MassTransit.Contracts.Events; using MassTransit; using Microsoft.EntityFrameworkCore; namespace FictionArchive.Service.NovelService.Services.Consumers; public class TranslationCompletedEventConsumer : IConsumer { private readonly ILogger _logger; private readonly NovelServiceDbContext _dbContext; public TranslationCompletedEventConsumer( ILogger logger, NovelServiceDbContext dbContext) { _logger = logger; _dbContext = dbContext; } public async Task Consume(ConsumeContext context) { var @event = context.Message; 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 _logger.LogDebug( "TranslationCompletedEvent received for unknown request: {RequestId}", @event.TranslationRequestId); return; } localizationRequest.KeyRequestedForTranslation.Texts.Add(new LocalizationText() { Language = localizationRequest.TranslateTo, Text = @event.TranslatedText, TranslationEngine = localizationRequest.Engine }); _dbContext.LocalizationRequests.Remove(localizationRequest); await _dbContext.SaveChangesAsync(); _logger.LogInformation( "Completed translation for request: {RequestId}", @event.TranslationRequestId); } }