Add track status filter and counts, album track ids and bulk track deletion

GET /tracks/users/{userId} accepts repeated status values and returns the
albums each track belongs to. GET /tracks/users/{userId}/status-counts,
GET /albums/{id}/tracks/ids and DELETE /tracks with a list of track ids
are new.
This commit is contained in:
2026-09-25 01:14:59 +02:00
parent 9928840577
commit d839a72700
18 changed files with 773 additions and 8 deletions
@@ -57,6 +57,15 @@ namespace Musify.Api.Endpoints
.Produces<PaginatedResponse<TrackApplicationResponse>>()
.Produces(StatusCodes.Status404NotFound);
group.MapGet("/{id:guid}/tracks/ids", GetAlbumTrackIds)
.WithName("GetAlbumTrackIds")
.WithSummary("Get the ids of every track in one of your albums, ordered by track number")
.RequireAuthorization()
.Produces<AlbumTrackIdsResponse>()
.Produces(StatusCodes.Status401Unauthorized)
.Produces(StatusCodes.Status403Forbidden)
.Produces(StatusCodes.Status404NotFound);
group.MapGet("/{id:guid}/cover", GetAlbumCover)
.WithName("GetAlbumCover")
.WithSummary("Get an album cover image")
@@ -195,6 +204,16 @@ namespace Musify.Api.Endpoints
return result.ToHttpResult();
}
private static async Task<IResult> GetAlbumTrackIds(
IMediator mediator,
CurrentUser currentUser,
Guid id,
CancellationToken cancellationToken)
{
var result = await mediator.Send(new GetAlbumTrackIdsQuery(currentUser.RequiredId, id), cancellationToken);
return result.ToHttpResult();
}
private static Task<IResult> GetAlbumCover(
IMediator mediator,
IStorageService storageService,