111 lines
3.5 KiB
C#
111 lines
3.5 KiB
C#
using LiteCqrs;
|
|
using TeleWave.Api.Common;
|
|
using TeleWave.Application.Admin.Users.BlockUser;
|
|
using TeleWave.Application.Admin.Users.CreateUser;
|
|
using TeleWave.Application.Admin.Users.DeleteUser;
|
|
using TeleWave.Application.Admin.Users.GetUser;
|
|
using TeleWave.Application.Admin.Users.ListUsers;
|
|
using TeleWave.Application.Admin.Users.UnblockUser;
|
|
using TeleWave.Application.Common.Interfaces;
|
|
using TeleWave.Application.Common.Models;
|
|
using TeleWave.Infrastructure.Identity;
|
|
|
|
namespace TeleWave.Api.Endpoints;
|
|
|
|
public static class AdminUserEndpoints
|
|
{
|
|
public static IEndpointRouteBuilder MapAdminUserEndpoints(this IEndpointRouteBuilder app)
|
|
{
|
|
var admin = app.MapGroup("/api/admin/users")
|
|
.WithTags("Admin.Users")
|
|
.RequireAuthorization(policy => policy.RequireRole(RoleNames.Admin));
|
|
|
|
admin.MapGet("", ListUsers).Produces<PagedList<UserSummaryDto>>();
|
|
admin.MapPost("", CreateUser).Produces<CreatedIdResponse>(StatusCodes.Status201Created);
|
|
admin.MapGet("/{id:guid}", GetUser).Produces<UserSummaryDto>();
|
|
admin
|
|
.MapPost("/{id:guid}/block", BlockUser)
|
|
.Produces(StatusCodes.Status204NoContent);
|
|
admin
|
|
.MapPost("/{id:guid}/unblock", UnblockUser)
|
|
.Produces(StatusCodes.Status204NoContent);
|
|
admin.MapDelete("/{id:guid}", DeleteUser).Produces(StatusCodes.Status204NoContent);
|
|
|
|
return app;
|
|
}
|
|
|
|
private static async Task<IResult> ListUsers(
|
|
int page,
|
|
int pageSize,
|
|
string? search,
|
|
Guid? roleId,
|
|
bool? isBlocked,
|
|
ISender sender,
|
|
CancellationToken cancellationToken
|
|
)
|
|
{
|
|
var result = await sender.Send(
|
|
new ListUsersQuery(page <= 0 ? 1 : page, pageSize <= 0 ? 20 : pageSize, search, roleId, isBlocked),
|
|
cancellationToken
|
|
);
|
|
return Results.Ok(result);
|
|
}
|
|
|
|
private static async Task<IResult> CreateUser(
|
|
CreateUserBody body,
|
|
ISender sender,
|
|
CancellationToken cancellationToken
|
|
)
|
|
{
|
|
var result = await sender.Send(
|
|
new CreateUserCommand(body.UserName, body.Password, body.RoleId),
|
|
cancellationToken
|
|
);
|
|
return result.IsSuccess
|
|
? Results.Created($"/api/admin/users/{result.Value}", new CreatedIdResponse(result.Value))
|
|
: result.ToHttpResult();
|
|
}
|
|
|
|
private static async Task<IResult> GetUser(
|
|
Guid id,
|
|
ISender sender,
|
|
CancellationToken cancellationToken
|
|
)
|
|
{
|
|
var result = await sender.Send(new GetUserQuery(id), cancellationToken);
|
|
return result.ToHttpResult();
|
|
}
|
|
|
|
private static async Task<IResult> BlockUser(
|
|
Guid id,
|
|
ISender sender,
|
|
CancellationToken cancellationToken
|
|
)
|
|
{
|
|
var result = await sender.Send(new BlockUserCommand(id), cancellationToken);
|
|
return result.ToHttpResult();
|
|
}
|
|
|
|
private static async Task<IResult> UnblockUser(
|
|
Guid id,
|
|
ISender sender,
|
|
CancellationToken cancellationToken
|
|
)
|
|
{
|
|
var result = await sender.Send(new UnblockUserCommand(id), cancellationToken);
|
|
return result.ToHttpResult();
|
|
}
|
|
|
|
private static async Task<IResult> DeleteUser(
|
|
Guid id,
|
|
ISender sender,
|
|
CancellationToken cancellationToken
|
|
)
|
|
{
|
|
var result = await sender.Send(new DeleteUserCommand(id), cancellationToken);
|
|
return result.ToHttpResult();
|
|
}
|
|
}
|
|
|
|
public sealed record CreateUserBody(string UserName, string Password, Guid RoleId);
|