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 { private readonly ILogger _logger; private readonly NovelServiceDbContext _dbContext; public TranslationRequestCompletedEventHandler(ILogger 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(); } }