This commit is contained in:
2026-07-18 23:29:57 +02:00
parent 4fed9bd059
commit 2dc544b2c0
109 changed files with 5134 additions and 2163 deletions
@@ -42,8 +42,6 @@ namespace Musify.Application.PlayLists
}
UploadIntent? pictureIntent = null;
string originalPictureName;
if (request.PictureIntentId.HasValue)
{
var validation = await uploadIntentValidator.ValidateAndLoadAsync(
@@ -53,11 +51,6 @@ namespace Musify.Application.PlayLists
return validation.Errors;
pictureIntent = validation.Value;
originalPictureName = pictureIntent.ObjectName;
}
else
{
originalPictureName = playListConfiguration.Routes.PresetOriginalPicture;
}
var playList = new PlayList
@@ -66,20 +59,15 @@ namespace Musify.Application.PlayLists
Name = request.Name,
NormalizedName = request.Name.Trim().ToUpperInvariant(),
Description = request.Description,
Pictures = new PlayListPictures
{
OriginalName = originalPictureName,
SmallName = playListConfiguration.Routes.PresetSmallPicture,
MediumName = playListConfiguration.Routes.PresetMediumPicture,
LargeName = playListConfiguration.Routes.PresetLargePicture
}
Pictures = pictureIntent == null ? null
: new PlayListPictures { OriginalName = pictureIntent.ObjectName }
};
await database.PlayLists.AddAsync(playList, cancellationToken);
if (pictureIntent is not null)
if (pictureIntent != null)
{
var finalPictureKey = playListConfiguration.Routes.BuildOriginalPicturePath(request.UserId, originalPictureName);
var finalPictureKey = playListConfiguration.Routes.BuildOriginalPicturePath(request.UserId, pictureIntent.ObjectName);
var publishResult = await PublishCreatePlayListEventAsync(
playList.Id, pictureIntent, finalPictureKey, cancellationToken);
if (publishResult.IsError)
@@ -20,23 +20,23 @@ namespace Musify.Application.PlayLists
{
public async ValueTask<ErrorOr<PlayListCoverLocation>> Handle(GetPlayListCoverQuery request, CancellationToken cancellationToken)
{
var playList = await database.PlayLists.AsNoTracking()
var pictures = await database.PlayLists.AsNoTracking()
.Where(p => p.Id == request.PlayListId)
.Select(p => new { p.Pictures.SmallName, p.Pictures.MediumName, p.Pictures.LargeName })
.Select(p => p.Pictures)
.SingleOrDefaultAsync(cancellationToken);
if (playList == null)
if (pictures is null)
return Error.NotFound();
var routes = playListConfiguration.Routes;
var (name, key, presetName) = request.Size.ToLowerInvariant() switch
var (name, key) = request.Size.ToLowerInvariant() switch
{
"small" => (playList.SmallName, BuildKey(routes.BuildSmallPicturePath, playList.SmallName), routes.PresetSmallPicture),
"large" => (playList.LargeName, BuildKey(routes.BuildLargePicturePath, playList.LargeName), routes.PresetLargePicture),
_ => (playList.MediumName, BuildKey(routes.BuildMediumPicturePath, playList.MediumName), routes.PresetMediumPicture)
"small" => (pictures.SmallName, BuildKey(routes.BuildSmallPicturePath, pictures.SmallName)),
"large" => (pictures.LargeName, BuildKey(routes.BuildLargePicturePath, pictures.LargeName)),
_ => (pictures.MediumName, BuildKey(routes.BuildMediumPicturePath, pictures.MediumName))
};
if (string.IsNullOrEmpty(name) || string.IsNullOrEmpty(key) || name == presetName)
if (string.IsNullOrEmpty(name) || string.IsNullOrEmpty(key))
return Error.NotFound();
var contentType = MimeUtility.GetMimeMapping(name);
@@ -4,6 +4,7 @@ using Microsoft.EntityFrameworkCore;
using Musify.Application.Contracts;
using Musify.Application.Shared;
using Musify.Application.Tracks.Responses;
using Musify.Domain.Entities;
using X.PagedList;
using X.PagedList.EF;
@@ -28,9 +29,9 @@ namespace Musify.Application.PlayLists
var tracksQuery = database.PlayListHasTracks
.AsNoTracking()
.Include(plt => plt.Track)
.ThenInclude(track => track.TrackArtists)
.Include(plt => ((ExternalTrack)plt.Track).TrackArtists)
.ThenInclude(trackArtist => trackArtist.Artist)
.Include(plt => ((LocalTrack)plt.Track).Owner)
.Where(plt => plt.PlayListId == request.PlayListId);
var totalCount = await tracksQuery.CountAsync(cancellationToken);
@@ -5,10 +5,10 @@ namespace Musify.Application.PlayLists.Responses
public record PlayListApplicationResponse(
Guid Id,
string Name,
string Description,
string SmallImageKeyName,
string MediumImageKeyName,
string LargeImageKeyName,
string? Description,
string? SmallImageKeyName,
string? MediumImageKeyName,
string? LargeImageKeyName,
DateTime CreatedAt,
DateTime UpdatedAt)
{
@@ -18,9 +18,9 @@ namespace Musify.Application.PlayLists.Responses
playList.Id,
playList.Name,
playList.Description,
playList.Pictures.SmallName,
playList.Pictures.MediumName,
playList.Pictures.LargeName,
playList.Pictures?.SmallName,
playList.Pictures?.MediumName,
playList.Pictures?.LargeName,
playList.CreatedAt,
playList.UpdatedAt);
}
@@ -8,6 +8,7 @@ using Musify.Application.Events;
using Musify.Application.PlayLists.Responses;
using Musify.Application.Services;
using Musify.Domain.Entities;
using Musify.Domain.ValueObjects;
using Musify.Application.Contracts;
namespace Musify.Application.PlayLists
@@ -68,7 +69,7 @@ namespace Musify.Application.PlayLists
return validation.Errors;
pictureIntent = validation.Value;
playListEntity.Pictures.OriginalName = pictureIntent.ObjectName;
playListEntity.Pictures = new PlayListPictures { OriginalName = pictureIntent.ObjectName };
finalPictureKey = playListConfiguration.Routes.BuildOriginalPicturePath(request.UserId, pictureIntent.ObjectName);
}