using FictionArchive.Service.Shared.Contracts.Events; using FictionArchive.Service.TranslationService.Contracts; using FictionArchive.Service.TranslationService.Models.Enums; using FictionArchive.Service.TranslationService.Services; using MassTransit; using Microsoft.Extensions.Logging; namespace FictionArchive.Service.TranslationService.Consumers; public class TranslationRequestCreatedConsumer : IConsumer { private readonly ILogger _logger; private readonly TranslationEngineService _translationEngineService; private readonly IPublishEndpoint _publishEndpoint; public TranslationRequestCreatedConsumer( ILogger logger, TranslationEngineService translationEngineService, IPublishEndpoint publishEndpoint) { _logger = logger; _translationEngineService = translationEngineService; _publishEndpoint = publishEndpoint; } public async Task Consume(ConsumeContext context) { var message = context.Message; _logger.LogInformation("Processing translation request {TranslationRequestId}", message.TranslationRequestId); var result = await _translationEngineService.Translate( message.From, message.To, message.Body, message.TranslationEngineKey); if (result.Status == TranslationRequestStatus.Success) { await _publishEndpoint.Publish( new TranslationRequestCompleted( TranslationRequestId: message.TranslationRequestId, TranslatedText: result.TranslatedText)); _logger.LogInformation("Translation completed for request {TranslationRequestId}", message.TranslationRequestId); } else { _logger.LogError("Translation failed for request {TranslationRequestId}", message.TranslationRequestId); throw new InvalidOperationException($"Translation failed for request {message.TranslationRequestId}"); } } }