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 8e561f5b2a
commit 712f130e1d
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);
}
}
}