This commit is contained in:
2026-03-25 02:13:47 +01:00
parent 255eb35fd0
commit cf5286a319
23 changed files with 260 additions and 79 deletions
@@ -19,16 +19,16 @@ namespace Musify.Application.Configuration
public string ParentFolder { get; set; } = "Tracks";
[Required]
public string OriginalPictures { get; set; } = "OriginalTracks";
public string OriginalPictures { get; set; } = "OriginalPictures";
[Required]
public string SmallPictures { get; set; } = "SmallTracks";
public string SmallPictures { get; set; } = "SmallPictures";
[Required]
public string MediumPictures { get; set; } = "MediumTracks";
public string MediumPictures { get; set; } = "MediumPictures";
[Required]
public string LargePictures { get; set; } = "LargeTracks";
public string LargePictures { get; set; } = "LargePictures";
[Required]
public string PresetOriginalPicture { get; set; } = "PresetOriginalPicture.webp";
@@ -43,7 +43,10 @@ namespace Musify.Application.Configuration
public string PresetLargePicture { get; set; } = "PresetLargePicture.webp";
[Required]
public string Audios { get; set; } = "Audios";
public string OriginalAudios { get; set; } = "OriginalAudios";
[Required]
public string ProcessedAudio { get; set; } = "ProcessedAudios";
}
public class TrackPicturesSizes
@@ -1,8 +1,9 @@
namespace Musify.Application.Events
{
public record TranscodeAudioFromTrackEvent(
public record UpdateTrackAudioEvent(
Guid TrackId,
string SourceBucketName,
string SourceKeyName,
string DestinationBucketName,
string DestinationKeyName);
string DestinationFolderKeyName);
}
@@ -56,7 +56,10 @@ namespace Musify.Application.PlayLists.Handlers
{
var imageId = Guid.NewGuid();
var pictureName = imageId + picture.FileType;
var pictureStorageKey = Path.Join(playListConfiguration.Routes.OriginalPictures, pictureName);
var pictureStorageKey = Path.Join(
playListConfiguration.Routes.ParentFolders,
playListConfiguration.Routes.OriginalPictures,
pictureName);
var uploadResult = await UploadFile(picture, pictureStorageKey, cancellationToken);
@@ -97,12 +100,15 @@ namespace Musify.Application.PlayLists.Handlers
async Task PublishUpdateEvent(string originalPictureKeyName, PlayList playList, CancellationToken cancellationToken)
{
var smallPictureKeyName = Path.Combine(
playListConfiguration.Routes.ParentFolders,
playListConfiguration.Routes.SmallPictures,
$"{playList.Id}.{pictureHandler.FileExtension}");
var mediumPictureKeyName = Path.Combine(
playListConfiguration.Routes.ParentFolders,
playListConfiguration.Routes.MediumPictures,
$"{playList.Id}.{pictureHandler.FileExtension}");
var largePictureKeyName = Path.Combine(
playListConfiguration.Routes.ParentFolders,
playListConfiguration.Routes.LargePictures,
$"{playList.Id}.{pictureHandler.FileExtension}");
@@ -31,24 +31,35 @@ namespace Musify.Application.PlayLists.Handlers
var keysToRemove = new List<string>();
if (playList.SmallPictureKeyName != playListConfiguration.Routes.PresetSmallPicture)
{
keysToRemove.Add(playList.SmallPictureKeyName);
}
keysToRemove.Add(Path.Combine(
playListConfiguration.Routes.ParentFolders,
playListConfiguration.Routes.SmallPictures,
playList.SmallPictureKeyName));
if (playList.MediumPictureKeyName != playListConfiguration.Routes.PresetMediumPicture)
{
keysToRemove.Add(playList.MediumPictureKeyName);
}
keysToRemove.Add(Path.Combine(
playListConfiguration.Routes.ParentFolders,
playListConfiguration.Routes.MediumPictures,
playList.MediumPictureKeyName));
if (playList.LargePictureKeyName != playListConfiguration.Routes.PresetLargePicture)
{
keysToRemove.Add(playList.LargePictureKeyName);
}
keysToRemove.Add(Path.Combine(
playListConfiguration.Routes.ParentFolders,
playListConfiguration.Routes.LargePictures,
playList.LargePictureKeyName));
foreach (var key in keysToRemove)
{
var publishResult = await TryPublishRemoveFileEventAsync(playList.Id, key, cancellationToken);
if (!publishResult.IsSuccess && !publishResult.IsNotFound())
if (!publishResult.IsSuccess)
{
if (publishResult.IsNotFound())
{
logger.LogWarning("File with key={KeyName} not found in storage while trying to publish remove file event for PlayList with id={PlayListId}.", key, playList.Id);
continue;
}
return publishResult;
}
}
database.PlayLists.Remove(playList);
@@ -52,17 +52,17 @@ namespace Musify.Application.PlayLists.Handlers
}
if (playList.SmallPictureKeyName != playListConfiguration.Routes.PresetSmallPicture)
{
await PublishRemoveFileEvent(playList.SmallPictureKeyName, cancellationToken);
}
await PublishRemoveFileEvent(Path.Combine(
playListConfiguration.Routes.SmallPictures,
playList.SmallPictureKeyName), cancellationToken);
if (playList.MediumPictureKeyName != playListConfiguration.Routes.PresetMediumPicture)
{
await PublishRemoveFileEvent(playList.MediumPictureKeyName, cancellationToken);
}
await PublishRemoveFileEvent(Path.Combine(
playListConfiguration.Routes.MediumPictures,
playList.MediumPictureKeyName), cancellationToken);
if (playList.LargePictureKeyName != playListConfiguration.Routes.PresetLargePicture)
{
await PublishRemoveFileEvent(playList.LargePictureKeyName, cancellationToken);
}
await PublishRemoveFileEvent(Path.Combine(
playListConfiguration.Routes.LargePictures,
playList.LargePictureKeyName), cancellationToken);
var newImageId = Guid.NewGuid();
var pictureName = newImageId + request.NewPicture.FileType;
@@ -99,7 +99,9 @@ namespace Musify.Application.PlayLists.Handlers
{
await eventBus.PublishAsync(new RemoveFileEvent(
storageConfiguration.BucketName,
keyName), cancellationToken);
Path.Combine(
playListConfiguration.Routes.ParentFolders,
keyName)), cancellationToken);
return Result.NoContent();
}
@@ -25,17 +25,23 @@ namespace Musify.Application.Tracks.Handler
return Result.NotFound($"User with id {request.UserId} not found");
}
var originalPictureKeyName = Path.Combine(trackConfiguration.Routes.OriginalPictures, Guid.NewGuid() + request.Picture.FileType);
var originalPictureFileName = Guid.NewGuid() + request.Picture.FileType;
var originalAudioFileName = Guid.NewGuid() + request.Audio.FileType;
var track = new Track
{
Title = request.Title,
NormalizedTitle = request.Title.Trim().ToUpperInvariant(),
OriginalPictureKeyName = originalPictureKeyName,
OriginalPictureKeyName = originalPictureFileName,
OriginalAudioKeyName = originalAudioFileName,
SmallPictureKeyName = trackConfiguration.Routes.PresetSmallPicture,
MediumPictureKeyName = trackConfiguration.Routes.PresetMediumPicture,
LargePictureKeyName = trackConfiguration.Routes.PresetLargePicture,
};
var originalPictureKeyName = Path.Combine(
trackConfiguration.Routes.ParentFolder,
trackConfiguration.Routes.OriginalPictures,
originalPictureFileName);
var pictureUploadResult = await UploadFile(request.Picture, originalPictureKeyName, cancellationToken);
if (!pictureUploadResult.IsSuccess)
{
@@ -44,7 +50,10 @@ namespace Musify.Application.Tracks.Handler
}
var audioKeyName = Path.Combine(trackConfiguration.Routes.Audios, Guid.NewGuid() + request.Audio.FileType);
var audioKeyName = Path.Combine(
trackConfiguration.Routes.ParentFolder,
trackConfiguration.Routes.OriginalAudios,
Guid.NewGuid() + request.Audio.FileType);
var audioUploadResult = await UploadFile(request.Audio, audioKeyName, cancellationToken);
if (!audioUploadResult.IsSuccess)
{
@@ -93,12 +102,15 @@ namespace Musify.Application.Tracks.Handler
async Task PublishUpdateEvent(string originalPictureKeyName, Track track, CancellationToken cancellationToken)
{
var smallPictureKeyName = Path.Combine(
trackConfiguration.Routes.ParentFolder,
trackConfiguration.Routes.SmallPictures,
$"{track.Id}.{pictureHandler.FileExtension}");
var mediumPictureKeyName = Path.Combine(
trackConfiguration.Routes.ParentFolder,
trackConfiguration.Routes.MediumPictures,
$"{track.Id}.{pictureHandler.FileExtension}");
var largePictureKeyName = Path.Combine(
trackConfiguration.Routes.ParentFolder,
trackConfiguration.Routes.LargePictures,
$"{track.Id}.{pictureHandler.FileExtension}");
@@ -119,15 +131,17 @@ namespace Musify.Application.Tracks.Handler
async Task PublishTranscodeEvent(Guid trackId, string audioKeyName, CancellationToken cancellationToken)
{
var destinationAudioKeyName = Path.Combine(
trackConfiguration.Routes.Audios,
trackId.ToString());
var destinationFolderAudio = Path.Combine(
trackConfiguration.Routes.ParentFolder,
trackConfiguration.Routes.ProcessedAudio,
Guid.NewGuid().ToString());
await eventBus.PublishAsync(new TranscodeAudioFromTrackEvent(
await eventBus.PublishAsync(new UpdateTrackAudioEvent(
trackId,
storageConfiguration.BucketName,
audioKeyName,
storageConfiguration.BucketName,
destinationAudioKeyName), cancellationToken);
destinationFolderAudio), cancellationToken);
}
}
}