MyBookmark/Modules.User.Application/Queries/User/GetUserListQuery.cs

40 lines
1.4 KiB
C#

using MediatR;
using Modules.User.Application.Models;
using Modules.User.Application.Repositories;
namespace Modules.User.Application.Queries;
public class GetUserListQuery : IRequest<PagedData<UserInfoShort>>
{
public bool? HasAvatar { get; init; }
public string? NickName { get; init; }
public DateTimeOffset? LastOnlineFrom { get; init; }
public DateTimeOffset? LastOnlineTo { get; init; }
public bool? IsBanned { get; init; }
public int Page { get; init; }
public int ItemsOnPage { get; init; }
}
public class GetUserListQueryHandler(IUserQueries userQueries) : IRequestHandler<GetUserListQuery, PagedData<UserInfoShort>>
{
public async Task<PagedData<UserInfoShort>> Handle(GetUserListQuery request, CancellationToken cancellationToken)
{
var now = DateTimeOffset.UtcNow;
var users = await userQueries.GetUsersAsync(new UserListFilter
{
HasAvatar = request.HasAvatar,
NickName = request.NickName,
LastOnlineFrom = request.LastOnlineFrom,
LastOnlineTo = request.LastOnlineTo,
IsBanned = request.IsBanned,
ItemsOnPage = request.ItemsOnPage,
Page = request.Page,
}, cancellationToken);
foreach (var user in users.Items)
{
user.OnlineStatus = UserOnlineStatusDeterminant.GetOnlineStatus(user.LastOnline, now);
}
return users;
}
}