Adds the PlayList picture-processing lifecycle saga (correlated by PlayListId)
mirroring the track one, and generalizes the failure plumbing:
- Rename the track fault translator to ProcessingSlipFaultConsumer and use a
generic Workflow.SubjectId variable + ProcessKind; it now emits typed
Track{Picture,Audio}/PlayListPicture ProcessingFailed events for all slips
- PlayListProcessingStateMachine (+ EF-persisted PlayListProcessingState,
migration): starts on CreatePlayListResourcesEvent, finalizes on
PlayListPictureProcessed, and on failure marks the playlist Failed and
removes the orphaned final picture (PlayListProcessingFailedConsumer +
MarkPlayListAsFailedActivity)
- UpdatePlayListPictureActivity publishes PlayListPictureProcessed on success
- Picture slip carries SubjectId + PlayListPicture kind + fault subscription
Verified end-to-end in Docker (RabbitMQ + migrated Postgres): both saga
endpoints, the fault translator and cleanup consumers configure, and an
addressing cross-check confirms all 21 activity execute queues the builders
address exist (caught + fixed a kebab mismatch on mark-play-list-as-failed).
Build: 0 warnings, 0 errors.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
54 lines
2.8 KiB
C#
54 lines
2.8 KiB
C#
namespace Musify.Infrastructure.MassTransit.RoutingSlip
|
|
{
|
|
internal static class ActivityNames
|
|
{
|
|
internal const string MarkTrackAsRemoving = "MarkTrackAsRemoving";
|
|
internal const string MarkTrackAsFailed = "MarkTrackAsFailed";
|
|
internal const string DeleteTrackFromDb = "DeleteTrackFromDb";
|
|
internal const string MarkPlayListAsRemoving = "MarkPlayListAsRemoving";
|
|
internal const string MarkPlayListAsFailed = "MarkPlayListAsFailed";
|
|
internal const string DeletePlayListFromDb = "DeletePlayListFromDb";
|
|
|
|
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 UploadSmall = "UploadSmall";
|
|
internal const string UploadMedium = "UploadMedium";
|
|
internal const string UploadLarge = "UploadLarge";
|
|
|
|
internal const string TransferFiles = "TransferFiles";
|
|
|
|
internal const string UpdateTrackPicture = "UpdateTrackPicture";
|
|
internal const string UpdatePlayListPicture = "UpdatePlayListPicture";
|
|
internal const string UpdateTrackAudio = "UpdateTrackAudio";
|
|
|
|
internal const string CopyPictureToFinal = "CopyPictureToFinal";
|
|
internal const string CopyAudioToFinal = "CopyAudioToFinal";
|
|
|
|
internal const string ConsumeUploadIntents = "ConsumeUploadIntents";
|
|
|
|
internal const string PublishTrackProcessingEvents = "PublishTrackProcessingEvents";
|
|
internal const string PublishPlayListPictureProcessingEvent = "PublishPlayListPictureProcessingEvent";
|
|
|
|
internal const string RemoveTrackOriginalPicture = "RemoveTrackOriginalPicture";
|
|
internal const string RemoveTrackSmallPicture = "RemoveTrackSmallPicture";
|
|
internal const string RemoveTrackMediumPicture = "RemoveTrackMediumPicture";
|
|
internal const string RemoveTrackLargePicture = "RemoveTrackLargePicture";
|
|
internal const string RemoveTrackOriginalAudio = "RemoveTrackOriginalAudio";
|
|
internal const string RemoveTrackProcessedAudio = "RemoveTrackProcessedAudio";
|
|
|
|
internal const string RemovePlayListOriginalPicture = "RemovePlayListOriginalPicture";
|
|
internal const string RemovePlayListSmallPicture = "RemovePlayListSmallPicture";
|
|
internal const string RemovePlayListMediumPicture = "RemovePlayListMediumPicture";
|
|
internal const string RemovePlayListLargePicture = "RemovePlayListLargePicture";
|
|
}
|
|
}
|