33 lines
1.1 KiB
C#
33 lines
1.1 KiB
C#
using BuildFlow.Platform.Application.Users.DTOs;
|
|
using BuildFlow.Platform.Application.Users.Queries;
|
|
using MediatR;
|
|
|
|
namespace BuildFlow.IM.Integration.Tests;
|
|
|
|
/// <summary>
|
|
/// 进程内用户摘要查询处理器。测试前可预置用户展示名和头像,由 MediatR 按用户 ID 批量返回。
|
|
/// </summary>
|
|
public sealed class InMemoryUserSummaryQueryHandler
|
|
: IRequestHandler<GetUserSummariesQuery, IReadOnlyDictionary<Guid, UserSummaryDto>>
|
|
{
|
|
private readonly Dictionary<Guid, UserSummaryDto> _users = new();
|
|
|
|
/// <summary>
|
|
/// 预置一个用户摘要。
|
|
/// </summary>
|
|
public void SetUser(Guid userId, string username, string? avatar = null) =>
|
|
_users[userId] = new UserSummaryDto(userId, username, avatar);
|
|
|
|
public Task<IReadOnlyDictionary<Guid, UserSummaryDto>> Handle(
|
|
GetUserSummariesQuery request,
|
|
CancellationToken ct)
|
|
{
|
|
IReadOnlyDictionary<Guid, UserSummaryDto> result = request.UserIds
|
|
.Distinct()
|
|
.Where(_users.ContainsKey)
|
|
.ToDictionary(userId => userId, userId => _users[userId]);
|
|
|
|
return Task.FromResult(result);
|
|
}
|
|
}
|