This commit is contained in:
2026-03-24 14:45:20 +01:00
parent 4f5230ddf6
commit 22a65b7efa
66 changed files with 1830 additions and 922 deletions
@@ -0,0 +1,18 @@
namespace Musify.Infrastructure.Messaging.RoutingSlip
{
internal static class ActivityNames
{
internal const string GenerateAudioWorkflowPaths = "GenerateAudioWorkflowPaths";
internal const string GeneratePictureWorkflowPaths = "GeneratePictureWorkflowPaths";
internal const string DownloadFile = "DownloadFile";
internal const string TranscodeAudio = "TranscodeAudio";
internal const string ResizeSmall = "ResizeSmall";
internal const string ResizeMedium = "ResizeMedium";
internal const string ResizeLarge = "ResizeLarge";
internal const string UploadFiles = "UploadFiles";
internal const string RemoveFile = "RemoveFile";
internal const string DeleteOriginal = "DeleteOriginal";
internal const string UpdateTrackPicture = "UpdateTrackPicture";
internal const string UpdatePlayListPicture = "UpdatePlayListPicture";
}
}
@@ -0,0 +1,50 @@
using MassTransit;
using Musify.Application.Events;
using Musify.Infrastructure.Configuration;
using Musify.Infrastructure.Messaging.Activities;
using Musify.Infrastructure.Messaging.Activities.Arguments;
namespace Musify.Infrastructure.Messaging.RoutingSlip.Builders
{
public class AudioWorkflowRoutingSlipBuilder(WorkerConfiguration workerConfiguration)
{
public RoutingSlipBuilder Build(TranscodeAudioFromTrackEvent message, Guid? correlationId)
{
var routingSlipBuilder = new RoutingSlipBuilder(NewId.NextGuid());
routingSlipBuilder.AddVariable(RoutingSlipVariableNames.Workflow.CorrelationId, correlationId ?? Guid.Empty);
routingSlipBuilder.AddActivity(
ActivityNames.GenerateAudioWorkflowPaths,
Consumers.MessagingHelper.BuildExecuteActivityUri(GenerateAudioWorkflowPathsActivity.ExecuteEndpointName),
new GenerateAudioWorkflowPathsArguments(
workerConfiguration.Routes.TemporaryFilesDirectory,
message.SourceKeyName));
routingSlipBuilder.AddActivity(
ActivityNames.DownloadFile,
Consumers.MessagingHelper.BuildExecuteActivityUri(DownloadFileFromBucketActivity.ExecuteEndpointName),
new DownloadFileFromBucketArguments(
message.SourceBucketName,
message.SourceKeyName,
RoutingSlipVariableNames.Audio.SourceFilePath));
routingSlipBuilder.AddActivity(
ActivityNames.TranscodeAudio,
Consumers.MessagingHelper.BuildExecuteActivityUri(TranscodeDashAudioActivity.ExecuteEndpointName),
new TranscodeDashAudioArguments(
RoutingSlipVariableNames.Audio.SourceFilePath,
RoutingSlipVariableNames.Workflow.TempDirectory));
routingSlipBuilder.AddActivity(
ActivityNames.UploadFiles,
Consumers.MessagingHelper.BuildExecuteActivityUri(TransferFilesToBucket.ExecuteEndpointName),
new TransferFilesToBucketArguments(
message.DestinationBucketName,
RoutingSlipVariableNames.Audio.TranscodedDirectory,
message.DestinationKeyName));
return routingSlipBuilder;
}
}
}
@@ -0,0 +1,159 @@
using MassTransit;
using Musify.Application.Events;
using Musify.Infrastructure.Configuration;
using Musify.Infrastructure.Messaging.Activities;
using Musify.Infrastructure.Messaging.Activities.Arguments;
namespace Musify.Infrastructure.Messaging.RoutingSlip.Builders
{
public class PictureWorkflowRoutingSlipBuilder(WorkerConfiguration workerConfiguration)
{
public RoutingSlipBuilder Build(UpdateTrackPictureEvent message, Guid? correlationId)
{
var routingSlipBuilder = BuildPictureWorkflow(
message.SourceBucketName,
message.SourceKeyName,
message.SmallPictureKeyName,
message.SmallPictureWidth,
message.SmallPictureHeight,
message.MediumPictureKeyName,
message.MediumPictureWidth,
message.MediumPictureHeight,
message.LargePictureKeyName,
message.LargePictureWidth,
message.LargePictureHeight,
correlationId);
routingSlipBuilder.AddActivity(
ActivityNames.UpdateTrackPicture,
Consumers.MessagingHelper.BuildExecuteActivityUri(UpdateTrackPictureActivity.ExecuteEndpointName),
new UpdateTrackPictureArguments(
message.TrackId,
message.SourceKeyName,
message.SmallPictureKeyName,
message.MediumPictureKeyName,
message.LargePictureKeyName));
return routingSlipBuilder;
}
public RoutingSlipBuilder Build(UpdatePlayListPictureEvent message, Guid? correlationId)
{
var routingSlipBuilder = BuildPictureWorkflow(
message.SourceBucketName,
message.SourceKeyName,
message.SmallPictureKeyName,
message.SmallPictureWidth,
message.SmallPictureHeight,
message.MediumPictureKeyName,
message.MediumPictureWidth,
message.MediumPictureHeight,
message.LargePictureKeyName,
message.LargePictureWidth,
message.LargePictureHeight,
correlationId);
routingSlipBuilder.AddActivity(
ActivityNames.UpdatePlayListPicture,
Consumers.MessagingHelper.BuildExecuteActivityUri(UpdatePlayListPictureActivity.ExecuteEndpointName),
new UpdatePlayListPictureArguments(
message.PlayListId,
message.SourceKeyName,
message.SmallPictureKeyName,
message.MediumPictureKeyName,
message.LargePictureKeyName));
return routingSlipBuilder;
}
RoutingSlipBuilder BuildPictureWorkflow(
string sourceBucketName,
string sourceKeyName,
string smallPictureKeyName,
int smallPictureWidth,
int smallPictureHeight,
string mediumPictureKeyName,
int mediumPictureWidth,
int mediumPictureHeight,
string largePictureKeyName,
int largePictureWidth,
int largePictureHeight,
Guid? correlationId)
{
var routingSlipBuilder = new RoutingSlipBuilder(NewId.NextGuid());
routingSlipBuilder.AddVariable(RoutingSlipVariableNames.Workflow.CorrelationId, correlationId ?? Guid.Empty);
routingSlipBuilder.AddActivity(
ActivityNames.GeneratePictureWorkflowPaths,
Consumers.MessagingHelper.BuildExecuteActivityUri(GeneratePictureWorkflowPathsActivity.ExecuteEndpointName),
new GeneratePictureWorkflowPathsArguments(
workerConfiguration.Routes.TemporaryFilesDirectory,
sourceKeyName,
smallPictureKeyName,
mediumPictureKeyName,
largePictureKeyName));
routingSlipBuilder.AddActivity(
ActivityNames.DownloadFile,
Consumers.MessagingHelper.BuildExecuteActivityUri(DownloadFileFromBucketActivity.ExecuteEndpointName),
new DownloadFileFromBucketArguments(
sourceBucketName,
sourceKeyName,
RoutingSlipVariableNames.Picture.OriginalFilePath));
AddResizeActivity(
routingSlipBuilder,
ActivityNames.ResizeSmall,
RoutingSlipVariableNames.Picture.SmallResizedFilePath,
smallPictureWidth,
smallPictureHeight);
AddResizeActivity(
routingSlipBuilder,
ActivityNames.ResizeMedium,
RoutingSlipVariableNames.Picture.MediumResizedFilePath,
mediumPictureWidth,
mediumPictureHeight);
AddResizeActivity(
routingSlipBuilder,
ActivityNames.ResizeLarge,
RoutingSlipVariableNames.Picture.LargeResizedFilePath,
largePictureWidth,
largePictureHeight);
routingSlipBuilder.AddActivity(
ActivityNames.DeleteOriginal,
Consumers.MessagingHelper.BuildExecuteActivityUri(RemoveFileFromBucketActivity.ExecuteEndpointName),
new RemoveFileFromBucketArguments(sourceBucketName, sourceKeyName));
routingSlipBuilder.AddActivity(
ActivityNames.UploadFiles,
Consumers.MessagingHelper.BuildExecuteActivityUri(TransferFilesToBucket.ExecuteEndpointName),
new TransferFilesToBucketArguments(
sourceBucketName,
RoutingSlipVariableNames.Workflow.TempDirectory,
DestinationKeyNameVariableName: RoutingSlipVariableNames.Picture.DestinationFolderName));
return routingSlipBuilder;
}
static void AddResizeActivity(
RoutingSlipBuilder routingSlipBuilder,
string activityName,
string destinationFilePathVariableName,
int width,
int height)
{
routingSlipBuilder.AddActivity(
activityName,
Consumers.MessagingHelper.BuildExecuteActivityUri(ResizePictureActivity.ExecuteEndpointName),
new ResizePictureLocalArguments(
RoutingSlipVariableNames.Picture.OriginalFilePath,
destinationFilePathVariableName,
width,
height));
}
}
}
@@ -0,0 +1,25 @@
using MassTransit;
using Musify.Application.Events;
using Musify.Infrastructure.Messaging.Activities;
namespace Musify.Infrastructure.Messaging.RoutingSlip.Builders
{
public class RemoveFileRoutingSlipBuilder
{
public RoutingSlipBuilder Build(RemoveFileEvent message, Guid? correlationId)
{
var routingSlipBuilder = new RoutingSlipBuilder(NewId.NextGuid());
routingSlipBuilder.AddVariable(RoutingSlipVariableNames.Workflow.CorrelationId, correlationId ?? Guid.Empty);
routingSlipBuilder.AddActivity(
ActivityNames.RemoveFile,
Consumers.MessagingHelper.BuildExecuteActivityUri(RemoveFileFromBucketActivity.ExecuteEndpointName),
new Activities.Arguments.RemoveFileFromBucketArguments(
message.BucketName,
message.KeyName));
return routingSlipBuilder;
}
}
}
@@ -0,0 +1,27 @@
namespace Musify.Infrastructure.Messaging
{
internal static class RoutingSlipVariableNames
{
internal static class Workflow
{
internal const string TempDirectory = "Workflow.TempDirectory";
internal const string CorrelationId = "Workflow.CorrelationId";
}
internal static class Audio
{
internal const string SourceFilePath = "Audio.SourceFilePath";
internal const string WorkingDirectory = "Audio.WorkingDirectory";
internal const string TranscodedDirectory = "Audio.TranscodedDirectory";
}
internal static class Picture
{
internal const string OriginalFilePath = "Picture.OriginalFilePath";
internal const string SmallResizedFilePath = "Picture.SmallResizedFilePath";
internal const string MediumResizedFilePath = "Picture.MediumResizedFilePath";
internal const string LargeResizedFilePath = "Picture.LargeResizedFilePath";
internal const string DestinationFolderName = "Picture.DestinationFolderName";
}
}
}