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;
|
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()
|
public override void Configure()
|
||||||
{
|
{
|
||||||
@ -13,9 +18,9 @@ public class GetUserListEndpoint(IMediator mediator) : EndpointWithoutRequest<Li
|
|||||||
Permissions("user:read");
|
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);
|
await Send.OkAsync(result, ct);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -5,14 +5,24 @@ using RAG.Infrastructure.Persistence;
|
|||||||
|
|
||||||
namespace RAG.Application.Users.Queries;
|
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 class GetUserListQueryHandler(RagDbContext db) : IRequestHandler<GetUserListQuery, List<UserDto>>
|
||||||
{
|
{
|
||||||
public async Task<List<UserDto>> Handle(GetUserListQuery request, CancellationToken ct)
|
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)
|
.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(
|
.Select(u => new UserDto(
|
||||||
u.Id, u.Username, u.Email, u.IsActive, u.CreatedAt,
|
u.Id, u.Username, u.Email, u.IsActive, u.CreatedAt,
|
||||||
u.UserRoles.Select(ur => ur.Role.Name).ToList()))
|
u.UserRoles.Select(ur => ur.Role.Name).ToList()))
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user