feat: 用户列表 API 支持搜索过滤
- GetUserListQuery 增加 Search 参数 - GET /users?search=xxx 按用户名或邮箱模糊搜索
This commit is contained in:
parent
88eccbc952
commit
ac61ace37f
@ -5,7 +5,12 @@ using RAG.Application.Users.Queries;
|
||||
|
||||
namespace RAG.Api.Endpoints.Users;
|
||||
|
||||
public class GetUserListEndpoint(IMediator mediator) : EndpointWithoutRequest<List<UserDto>>
|
||||
public record GetUserListRequest
|
||||
{
|
||||
public string? Search { get; init; }
|
||||
}
|
||||
|
||||
public class GetUserListEndpoint(IMediator mediator) : Endpoint<GetUserListRequest, List<UserDto>>
|
||||
{
|
||||
public override void Configure()
|
||||
{
|
||||
@ -13,9 +18,9 @@ public class GetUserListEndpoint(IMediator mediator) : EndpointWithoutRequest<Li
|
||||
Permissions("user:read");
|
||||
}
|
||||
|
||||
public override async Task HandleAsync(CancellationToken ct)
|
||||
public override async Task HandleAsync(GetUserListRequest req, CancellationToken ct)
|
||||
{
|
||||
var result = await mediator.Send(new GetUserListQuery(), ct);
|
||||
var result = await mediator.Send(new GetUserListQuery(req.Search), ct);
|
||||
await Send.OkAsync(result, ct);
|
||||
}
|
||||
}
|
||||
|
||||
@ -5,14 +5,24 @@ using RAG.Infrastructure.Persistence;
|
||||
|
||||
namespace RAG.Application.Users.Queries;
|
||||
|
||||
public record GetUserListQuery : IRequest<List<UserDto>>;
|
||||
public record GetUserListQuery(string? Search) : IRequest<List<UserDto>>;
|
||||
|
||||
public class GetUserListQueryHandler(RagDbContext db) : IRequestHandler<GetUserListQuery, List<UserDto>>
|
||||
{
|
||||
public async Task<List<UserDto>> Handle(GetUserListQuery request, CancellationToken ct)
|
||||
{
|
||||
return await db.Users
|
||||
var query = db.Users
|
||||
.Include(u => u.UserRoles).ThenInclude(ur => ur.Role)
|
||||
.AsQueryable();
|
||||
|
||||
if (!string.IsNullOrWhiteSpace(request.Search))
|
||||
{
|
||||
var search = request.Search.ToLower();
|
||||
query = query.Where(u => u.Username.ToLower().Contains(search)
|
||||
|| u.Email.ToLower().Contains(search));
|
||||
}
|
||||
|
||||
return await query
|
||||
.Select(u => new UserDto(
|
||||
u.Id, u.Username, u.Email, u.IsActive, u.CreatedAt,
|
||||
u.UserRoles.Select(ur => ur.Role.Name).ToList()))
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user