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 { private readonly ILogger _logger; private readonly NovelServiceDbContext _dbContext; public TranslationRequestCompletedConsumer( ILogger logger, NovelServiceDbContext dbContext) { _logger = logger; _dbContext = dbContext; } public async Task Consume(ConsumeContext 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(); } }