using Mediator; using Musify.Application.Users; using Musify.Api.DataTransferObjects.Users; using Musify.Api.Extensions; using Musify.Api.Filters; namespace Musify.Api.Endpoints; public static class UserEndpoints { public static IEndpointRouteBuilder MapUserEndpoints(this IEndpointRouteBuilder app) { var group = app.MapGroup("/users") .WithTags("Users"); group.MapGet("/", GetUsers) .WithName("GetUsers") .WithSummary("Get Paginated Users."); group.MapGet("/{id}", GetUserById) .WithName("GetUserById") .WithSummary("Get A User By Id."); group.MapPost("/", CreateUser) .WithName("CreateUser") .WithSummary("Create A New User.") .AddEndpointFilter>(); return app; } private static async Task GetUsers( IMediator mediator, CancellationToken cancellationToken, string? usernameSearch, int pageNumber = 1, int pageSize = 10) { var result = await mediator.Send(new GetUsersQuery(pageNumber, pageSize, usernameSearch), cancellationToken); return result.ToHttpResult(); } private static async Task GetUserById( IMediator mediator, long id, CancellationToken cancellationToken) { var result = await mediator.Send(new GetUserByIdQuery(id), cancellationToken); return result.ToHttpResult(); } private static async Task CreateUser( IMediator mediator, CreateUserRequest request, CancellationToken cancellationToken) { var result = await mediator.Send( new CreateUserCommand(request.Id, request.Name, request.FirstName, request.SecondName), cancellationToken); if (result.IsError) return result.ToHttpResult(); return Results.Created($"/users/{result.Value.Id}", result.Value); } }