feat(backend): add the album use cases

Create, update, delete and list albums, plus adding and removing their tracks,
mirroring the playlist handlers. Only tracks the user uploaded can go into an
album, and removing one renumbers the rest so the tracklist stays 1..n.
This commit is contained in:
2026-07-20 20:10:45 +02:00
parent 67805062ca
commit 69468c9dbd
10 changed files with 518 additions and 0 deletions
@@ -0,0 +1,29 @@
using ErrorOr;
using Mediator;
using Microsoft.EntityFrameworkCore;
using Musify.Application.Albums.Responses;
using Musify.Application.Contracts;
namespace Musify.Application.Albums
{
public record GetAlbumByIdQuery(Guid Id)
: IQuery<ErrorOr<AlbumApplicationResponse>>;
public class GetAlbumByIdQueryHandler(IDatabase database)
: IQueryHandler<GetAlbumByIdQuery, ErrorOr<AlbumApplicationResponse>>
{
public async ValueTask<ErrorOr<AlbumApplicationResponse>> Handle(GetAlbumByIdQuery request, CancellationToken cancellationToken)
{
var album = await database.UserAlbums
.AsNoTracking()
.Where(a => a.Id == request.Id)
.Select(a => new { Album = a, TrackCount = a.AlbumTracks.Count })
.SingleOrDefaultAsync(cancellationToken);
if (album is null)
return Error.NotFound();
return AlbumApplicationResponse.FromEntity(album.Album, album.TrackCount);
}
}
}