From b781374691a9d2ffbc5b6ca2f48fd4c3b887fb55 Mon Sep 17 00:00:00 2001 From: XShine555 Date: Fri, 20 Mar 2026 20:33:56 +0100 Subject: [PATCH] Last consumer --- .../DeletePlayListCommandHandler.cs | 81 ++++++++----------- .../Messaging/Consumers/RemoveFileConsumer.cs | 30 +++++++ .../MassTransitDependencyInjection.cs | 6 ++ 3 files changed, 68 insertions(+), 49 deletions(-) create mode 100644 Infrastructure/Messaging/Consumers/RemoveFileConsumer.cs diff --git a/Application/PlayLists/Commands/DeletePlayList/DeletePlayListCommandHandler.cs b/Application/PlayLists/Commands/DeletePlayList/DeletePlayListCommandHandler.cs index cb15121..1148783 100644 --- a/Application/PlayLists/Commands/DeletePlayList/DeletePlayListCommandHandler.cs +++ b/Application/PlayLists/Commands/DeletePlayList/DeletePlayListCommandHandler.cs @@ -1,11 +1,9 @@ using Ardalis.Result; using DispatchR.Abstractions.Send; -using MassTransit; using Microsoft.Extensions.Logging; using Musify.Application.Configuration; using Musify.Application.Contracts.Infrastructure; using Musify.Application.Events; -using Musify.Application.PlayLists; namespace Musify.Application.PlayLists.Commands.DeletePlayList { @@ -31,66 +29,33 @@ namespace Musify.Application.PlayLists.Commands.DeletePlayList if (!string.IsNullOrWhiteSpace(playList.OriginalPictureKeyName)) { - var originalImageStorageKey = Path.Join(playListConfiguration.Routes.OriginalPictures, playList.OriginalPictureKeyName); - - try + var keysToRemove = new List { - await eventBus.PublishAsync(new RemoveFileEvent( - Guid.NewGuid(), - storageConfiguration.BucketName, - originalImageStorageKey), cancellationToken); - } - catch (Exception exception) - { - logger.LogError(exception, "Failed to publish remove file event for original picture of PlayList id={PlayListId}.", playList.Id); - return Result.Error($"Failed to publish remove file event for PlayList with id {playList.Id}."); - } + Path.Join(playListConfiguration.Routes.OriginalPictures, playList.OriginalPictureKeyName) + }; if (playList.SmallPictureKeyName != playListConfiguration.Routes.PresetSmallPicture) { - try - { - await eventBus.PublishAsync(new RemoveFileEvent( - Guid.NewGuid(), - storageConfiguration.BucketName, - playList.SmallPictureKeyName), cancellationToken); - } - catch (Exception exception) - { - logger.LogError(exception, "Failed to publish remove file event for small picture of PlayList id={PlayListId}.", playList.Id); - return Result.Error($"Failed to publish remove file event for PlayList with id {playList.Id}."); - } + keysToRemove.Add(playList.SmallPictureKeyName); } if (playList.MediumPictureKeyName != playListConfiguration.Routes.PresetMediumPicture) { - try - { - await eventBus.PublishAsync(new RemoveFileEvent( - Guid.NewGuid(), - storageConfiguration.BucketName, - playList.MediumPictureKeyName), cancellationToken); - } - catch (Exception exception) - { - logger.LogError(exception, "Failed to publish remove file event for medium picture of PlayList id={PlayListId}.", playList.Id); - return Result.Error($"Failed to publish remove file event for PlayList with id {playList.Id}."); - } + keysToRemove.Add(playList.MediumPictureKeyName); } if (playList.LargePictureKeyName != playListConfiguration.Routes.PresetLargePicture) { - try + keysToRemove.Add(playList.LargePictureKeyName); + } + + foreach (var key in keysToRemove) + { + var publishResult = await TryPublishRemoveFileEventAsync(playList.Id, key, cancellationToken); + + if (!publishResult.IsSuccess) { - await eventBus.PublishAsync(new RemoveFileEvent( - Guid.NewGuid(), - storageConfiguration.BucketName, - playList.LargePictureKeyName), cancellationToken); - } - catch (Exception exception) - { - logger.LogError(exception, "Failed to publish remove file event for large picture of PlayList id={PlayListId}.", playList.Id); - return Result.Error($"Failed to publish remove file event for PlayList with id {playList.Id}."); + return publishResult; } } } @@ -99,5 +64,23 @@ namespace Musify.Application.PlayLists.Commands.DeletePlayList await database.SaveChangesAsync(cancellationToken); return Result.NoContent(); } + + async Task TryPublishRemoveFileEventAsync(Guid playListId, string keyName, CancellationToken cancellationToken) + { + try + { + await eventBus.PublishAsync(new RemoveFileEvent( + Guid.NewGuid(), + storageConfiguration.BucketName, + keyName), cancellationToken); + + return Result.Success(); + } + catch (Exception exception) + { + logger.LogError(exception, "Failed to publish remove file event for PlayList id={PlayListId} and key={KeyName}.", playListId, keyName); + return Result.Error($"Failed to publish remove file event for PlayList with id {playListId}."); + } + } } } \ No newline at end of file diff --git a/Infrastructure/Messaging/Consumers/RemoveFileConsumer.cs b/Infrastructure/Messaging/Consumers/RemoveFileConsumer.cs new file mode 100644 index 0000000..a057f45 --- /dev/null +++ b/Infrastructure/Messaging/Consumers/RemoveFileConsumer.cs @@ -0,0 +1,30 @@ +using MassTransit; +using Musify.Application.Events; +using Musify.Infrastructure.Messaging.Activities; +using Musify.Infrastructure.Messaging.Activities.Arguments; + +namespace Musify.Infrastructure.Messaging.Consumers +{ + public class RemoveFileConsumer(IBus bus) + : IConsumer + { + public const string QueueName = "Remove-File"; + + public async Task Consume(ConsumeContext consumeContext) + { + var routingSlipBuilder = new RoutingSlipBuilder(NewId.NextGuid()); + + routingSlipBuilder.AddActivity( + "RemoveFile", + BuildExecuteUri(RemoveFilesActivity.ExecuteEndpointName), + new RemoveFileArguments( + consumeContext.Message.BucketName, + consumeContext.Message.KeyName)); + + var routingSlip = routingSlipBuilder.Build(); + await bus.Execute(routingSlip); + } + + static Uri BuildExecuteUri(string endpointName) => new($"queue:{endpointName}_execute"); + } +} diff --git a/Infrastructure/Messaging/MassTransitDependencyInjection.cs b/Infrastructure/Messaging/MassTransitDependencyInjection.cs index d2e843e..55b85b1 100644 --- a/Infrastructure/Messaging/MassTransitDependencyInjection.cs +++ b/Infrastructure/Messaging/MassTransitDependencyInjection.cs @@ -25,6 +25,7 @@ namespace Musify.Infrastructure.Messaging serviceDescriptors.AddMassTransit(options => { options.AddConsumer(); + options.AddConsumer(); options.AddExecuteActivity(); options.AddExecuteActivity(); options.AddExecuteActivity(); @@ -38,6 +39,11 @@ namespace Musify.Infrastructure.Messaging endpointConfigurator.ConfigureConsumer(busRegistrationContext); } ); + busFactoryConfigurator.ReceiveEndpoint(RemoveFileConsumer.QueueName, endpointConfigurator => + { + endpointConfigurator.ConfigureConsumer(busRegistrationContext); + } ); + ConfigureExecuteActivityEndpoint( busFactoryConfigurator, busRegistrationContext,