[FA-misc] Mass transit overhaul, needs testing and review
This commit is contained in:
@@ -0,0 +1,53 @@
|
||||
using FictionArchive.Common.Enums;
|
||||
using FictionArchive.Service.Shared.MassTransit.Contracts.Events;
|
||||
using MassTransit;
|
||||
|
||||
namespace FictionArchive.Service.NovelService.Services.Consumers;
|
||||
|
||||
public class FileUploadCompletedEventConsumer : IConsumer<FileUploadCompletedEvent>
|
||||
{
|
||||
private readonly ILogger<FileUploadCompletedEventConsumer> _logger;
|
||||
private readonly NovelServiceDbContext _dbContext;
|
||||
private readonly NovelUpdateService _novelUpdateService;
|
||||
|
||||
public FileUploadCompletedEventConsumer(
|
||||
ILogger<FileUploadCompletedEventConsumer> logger,
|
||||
NovelServiceDbContext dbContext,
|
||||
NovelUpdateService novelUpdateService)
|
||||
{
|
||||
_logger = logger;
|
||||
_dbContext = dbContext;
|
||||
_novelUpdateService = novelUpdateService;
|
||||
}
|
||||
|
||||
public async Task Consume(ConsumeContext<FileUploadCompletedEvent> context)
|
||||
{
|
||||
var @event = context.Message;
|
||||
|
||||
var image = await _dbContext.Images.FindAsync(@event.RequestId);
|
||||
if (image == null)
|
||||
{
|
||||
// Not a request we care about.
|
||||
_logger.LogDebug(
|
||||
"FileUploadCompletedEvent received for unknown image: {RequestId}",
|
||||
@event.RequestId);
|
||||
return;
|
||||
}
|
||||
|
||||
if (@event.Status == RequestStatus.Failed)
|
||||
{
|
||||
_logger.LogError(
|
||||
"Image upload failed for image with id {ImageId}: {ErrorMessage}",
|
||||
image.Id, @event.ErrorMessage);
|
||||
return;
|
||||
}
|
||||
|
||||
if (@event.Status == RequestStatus.Success)
|
||||
{
|
||||
_logger.LogInformation(
|
||||
"Image upload succeeded for image with id {ImageId}",
|
||||
image.Id);
|
||||
await _novelUpdateService.UpdateImage(image.Id, @event.FileAccessUrl!);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,26 @@
|
||||
using FictionArchive.Service.Shared.MassTransit.Contracts.Commands;
|
||||
using MassTransit;
|
||||
|
||||
namespace FictionArchive.Service.NovelService.Services.Consumers;
|
||||
|
||||
public class ImportNovelCommandConsumer : IConsumer<ImportNovelCommand>
|
||||
{
|
||||
private readonly ILogger<ImportNovelCommandConsumer> _logger;
|
||||
private readonly NovelUpdateService _novelUpdateService;
|
||||
|
||||
public ImportNovelCommandConsumer(
|
||||
ILogger<ImportNovelCommandConsumer> logger,
|
||||
NovelUpdateService novelUpdateService)
|
||||
{
|
||||
_logger = logger;
|
||||
_novelUpdateService = novelUpdateService;
|
||||
}
|
||||
|
||||
public async Task Consume(ConsumeContext<ImportNovelCommand> context)
|
||||
{
|
||||
var command = context.Message;
|
||||
_logger.LogInformation("Processing ImportNovelCommand for URL: {NovelUrl}", command.NovelUrl);
|
||||
|
||||
await _novelUpdateService.ImportNovel(command.NovelUrl);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,28 @@
|
||||
using FictionArchive.Service.Shared.MassTransit.Contracts.Commands;
|
||||
using MassTransit;
|
||||
|
||||
namespace FictionArchive.Service.NovelService.Services.Consumers;
|
||||
|
||||
public class PullChapterContentCommandConsumer : IConsumer<PullChapterContentCommand>
|
||||
{
|
||||
private readonly ILogger<PullChapterContentCommandConsumer> _logger;
|
||||
private readonly NovelUpdateService _novelUpdateService;
|
||||
|
||||
public PullChapterContentCommandConsumer(
|
||||
ILogger<PullChapterContentCommandConsumer> logger,
|
||||
NovelUpdateService novelUpdateService)
|
||||
{
|
||||
_logger = logger;
|
||||
_novelUpdateService = novelUpdateService;
|
||||
}
|
||||
|
||||
public async Task Consume(ConsumeContext<PullChapterContentCommand> context)
|
||||
{
|
||||
var command = context.Message;
|
||||
_logger.LogInformation(
|
||||
"Processing PullChapterContentCommand for Novel: {NovelId}, Volume: {VolumeId}, Chapter: {ChapterOrder}",
|
||||
command.NovelId, command.VolumeId, command.ChapterOrder);
|
||||
|
||||
await _novelUpdateService.PullChapterContents(command.NovelId, command.VolumeId, command.ChapterOrder);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,52 @@
|
||||
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<TranslationCompletedEvent>
|
||||
{
|
||||
private readonly ILogger<TranslationCompletedEventConsumer> _logger;
|
||||
private readonly NovelServiceDbContext _dbContext;
|
||||
|
||||
public TranslationCompletedEventConsumer(
|
||||
ILogger<TranslationCompletedEventConsumer> logger,
|
||||
NovelServiceDbContext dbContext)
|
||||
{
|
||||
_logger = logger;
|
||||
_dbContext = dbContext;
|
||||
}
|
||||
|
||||
public async Task Consume(ConsumeContext<TranslationCompletedEvent> 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);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user