Files
Musify/backend/Hosts/Musify.Api/Endpoints/GenreEndpoints.cs
T
Admin fcf3093ad8 Unify API route parameters, return IResult everywhere, merge picture upload DTOs and centralize validation limits
Guid and long route constraints, id/trackId parameter names, Update*Request without the New prefix,
sentence-case operation summaries, shared security scheme id and a single Limits class.
2026-09-24 12:36:48 +02:00

43 lines
1.4 KiB
C#

using Mediator;
using Musify.Application.Genres;
using Musify.Application.Genres.Responses;
namespace Musify.Api.Endpoints;
public static class GenreEndpoints
{
public static IEndpointRouteBuilder MapGenreEndpoints(this IEndpointRouteBuilder app)
{
var group = app.MapGroup("/genres")
.WithTags("Genres");
group.MapGet("/", GetGenres)
.WithName("GetGenres")
.WithSummary("Get the genres that have at least one track, most populated first. Works anonymously")
.Produces<IReadOnlyList<GenreResponse>>();
group.MapGet("/available", GetAvailableGenres)
.WithName("GetAvailableGenres")
.WithSummary("Get every genre a track can be tagged with, including the genres it cannot be combined with. Works anonymously")
.Produces<IReadOnlyList<AvailableGenreResponse>>();
return app;
}
private static async Task<IResult> GetAvailableGenres(
IMediator mediator,
CancellationToken cancellationToken)
{
var result = await mediator.Send(new GetAvailableGenresQuery(), cancellationToken);
return Results.Ok(result);
}
private static async Task<IResult> GetGenres(
IMediator mediator,
CancellationToken cancellationToken)
{
var result = await mediator.Send(new GetGenresQuery(), cancellationToken);
return Results.Ok(result);
}
}