This commit is contained in:
2025-04-30 09:51:36 +08:00
parent 561881c9aa
commit 09afa239a6
848 changed files with 385870 additions and 205 deletions

View File

@@ -0,0 +1,44 @@

namespace Yes.Blog.Endpoints.Admins.Users
{
public class CreateUserEndpoint : AdminEndpointScheme, IEndpoint
{
public void Map(IEndpointRouteBuilder app) => app.MapPost("/users", Handle).WithRequestValidation<Request>();
public record Request(
string Name,
string Email,
string NickName,
string Password
);
public class RequestValidator : AbstractValidator<Request>
{
public RequestValidator()
{
RuleFor(x => x.Name).NotEmpty().WithMessage("请输入用户名!");
RuleFor(x => x.Email).NotEmpty().WithMessage("请输入邮箱!");
RuleFor(x => x.NickName).NotEmpty().WithMessage("请输入昵称!");
RuleFor(x => x.Password).NotEmpty().WithMessage("请输入用户密码!");
}
}
private async Task<IResult> Handle([FromBody] Request request, IMediator mediator, IMapper mapper, CancellationToken cancellationToken)
{
var command = mapper.Map<CreateUserCommand>(request);
var response = await mediator.Send(command, cancellationToken);
return Result.Ok(response);
}
}
internal class CreateUserMappingProfile : IRegister
{
public void Register(TypeAdapterConfig config)
{
config.ForType<CreateUserEndpoint.Request, CreateUserCommand>();
}
}
}

View File

@@ -0,0 +1,20 @@
namespace Yes.Blog.Endpoints.Admins.Users
{
public class DeleteUserEndpoint : AdminEndpointScheme, IEndpoint
{
public void Map(IEndpointRouteBuilder app) => app.MapDelete("/users", Handle);
public record Request(int Id);
private async Task<IResult> Handle([AsParameters] Request request, IMediator mediator, IMapper mapper, CancellationToken cancellationToken)
{
var command = mapper.Map<DeleteUserCommand>(request);
var response = await mediator.Send(command, cancellationToken);
return Result.Ok(response);
}
}
}

View File

@@ -0,0 +1,21 @@

namespace Yes.Blog.Endpoints.Admins.Users
{
public class GetProfileEndpoint : AdminEndpointScheme, IEndpoint
{
public void Map(IEndpointRouteBuilder app) => app.MapGet("/users/profile", Handle);
public record Request();
private async Task<IResult> Handle([AsParameters] Request request, IMediator mediator, IMapper mapper, CancellationToken cancellationToken)
{
var query = new GetProfileQuery();
var response = await mediator.Send(query, cancellationToken);
return Result.Ok(response);
}
}
}

View File

@@ -0,0 +1,20 @@
namespace Yes.Blog.Endpoints.Admins.Users
{
public class GetUserEndpoint : AdminEndpointScheme, IEndpoint
{
public void Map(IEndpointRouteBuilder app) => app.MapGet("/users/{id}", Handle);
public record Request([FromRoute(Name = "id")] int Id);
private async Task<IResult> Handle([AsParameters] Request request, IMediator mediator, IMapper mapper, CancellationToken cancellationToken)
{
var query = new GetUserQuery(request.Id);
var response = await mediator.Send(query, cancellationToken);
return Result.Ok(response);
}
}
}

View File

@@ -0,0 +1,20 @@
namespace Yes.Blog.Endpoints.Admins.Users
{
public class GetUsersEndpoint : AdminEndpointScheme, IEndpoint
{
public void Map(IEndpointRouteBuilder app) => app.MapGet("/users", Handle);
public record Request();
private async Task<IResult> Handle([AsParameters] Request request, IMediator mediator, IMapper mapper, CancellationToken cancellationToken)
{
var query = new GetUsersQuery();
var response = await mediator.Send(query, cancellationToken);
return Result.Ok(response);
}
}
}

View File

@@ -0,0 +1,43 @@
namespace Yes.Blog.Endpoints.Admins.Users
{
public class UpdatePasswordEndpoint : AdminEndpointScheme, IEndpoint
{
public void Map(IEndpointRouteBuilder app) => app.MapPut("/users/Password", Handle).WithRequestValidation<Request>();
public record Request(
string OriginalPassword,
string NewPassword,
string ConfirmPassword
);
public class RequestValidator : AbstractValidator<Request>
{
public RequestValidator()
{
RuleFor(x => x.OriginalPassword).NotEmpty().WithMessage("请输入原密码!");
RuleFor(x => x.NewPassword).NotEmpty().WithMessage("请输入新密码!");
RuleFor(x => x.ConfirmPassword).NotEmpty().WithMessage("请重复输入新密码!");
RuleFor(x => x.NewPassword).Must((x, y) => x.ConfirmPassword == y).WithMessage("重复密码必须跟新密码一样");
}
}
private async Task<IResult> Handle([FromBody] Request request, IMediator mediator, IMapper mapper, CancellationToken cancellationToken)
{
var command = mapper.Map<UpdatePasswordCommand>(request);
var response = await mediator.Send(command, cancellationToken);
return Result.Ok(response);
}
}
internal class UpdatePasswordMappingPassword : IRegister
{
public void Register(TypeAdapterConfig config)
{
config.ForType<UpdatePasswordEndpoint.Request, UpdatePasswordCommand>();
}
}
}

View File

@@ -0,0 +1,41 @@
namespace Yes.Blog.Endpoints.Admins.Users
{
public class UpdateProfileEndpoint : AdminEndpointScheme, IEndpoint
{
public void Map(IEndpointRouteBuilder app) => app.MapPut("/users/profile", Handle).WithRequestValidation<Request>();
public record Request(
string Email,
string NickName,
string Url
);
public class RequestValidator : AbstractValidator<Request>
{
public RequestValidator()
{
RuleFor(x => x.Email).NotEmpty().WithMessage("请输入邮箱!");
RuleFor(x => x.NickName).NotEmpty().WithMessage("请输入昵称!");
}
}
private async Task<IResult> Handle([FromBody] Request request, IMediator mediator, IMapper mapper, CancellationToken cancellationToken)
{
var command = mapper.Map<UpdateProfileCommand>(request);
var response = await mediator.Send(command, cancellationToken);
return Result.Ok(response);
}
}
internal class UpdateProfileMappingProfile : IRegister
{
public void Register(TypeAdapterConfig config)
{
config.ForType<UpdateProfileEndpoint.Request, UpdateProfileCommand>();
}
}
}

View File

@@ -0,0 +1,42 @@
namespace Yes.Blog.Endpoints.Admins.Users
{
public class UpdateUserEndpoint : AdminEndpointScheme, IEndpoint
{
public void Map(IEndpointRouteBuilder app) => app.MapPut("/users", Handle).WithRequestValidation<Request>();
public record Request(
int Id,
string Name,
string Email,
string NickName,
string Password
);
public class RequestValidator : AbstractValidator<Request>
{
public RequestValidator()
{
RuleFor(x => x.Name).NotEmpty().WithMessage("请输入用户名!");
RuleFor(x => x.Email).NotEmpty().WithMessage("请输入邮箱!");
RuleFor(x => x.NickName).NotEmpty().WithMessage("请输入昵称!");
}
}
private async Task<IResult> Handle([FromBody] Request request, IMediator mediator, IMapper mapper, CancellationToken cancellationToken)
{
var command = mapper.Map<UpdateUserCommand>(request);
var response = await mediator.Send(command, cancellationToken);
return Result.Ok(response);
}
}
internal class UpdateUserMappingProfile : IRegister
{
public void Register(TypeAdapterConfig config)
{
config.ForType<UpdateUserEndpoint.Request, UpdateUserCommand>();
}
}
}