namespace Dpz.Core.Service.Mediator.Features.Account.Internal;
internal static class AccountRepositoryHelper
{
internal static async Task<User?> GetUserAsync(
IRepository<User> repository,
string account,
CancellationToken cancellationToken
)
{
var filter = Builders<User>.Filter.Eq(x => x.Id, account);
return await repository.Collection.Find(filter).FirstOrDefaultAsync(cancellationToken);
}
internal static async Task SaveUserHistoryAsync(
IRepository<UserHistory> userHistoryRepository,
string account,
IReadOnlyCollection<ChangeDetail> changes,
CancellationToken cancellationToken
)
{
if (changes.Count == 0)
{
return;
}
var history = new UserHistory
{
Account = account,
ChangeTime = DateTime.Now,
Changes = changes.ToList(),
};
await userHistoryRepository.InsertAsync(history, cancellationToken);
}
internal static ChangeDetail Change(string field, object? oldValue, object? newValue)
{
return new ChangeDetail
{
Field = field,
OldValue = oldValue,
NewValue = newValue,
};
}
internal static bool IsSystemAccount(User user)
{
return user.Permissions.HasValue
&& (user.Permissions.Value & Permissions.System) == Permissions.System;
}
}
⚠⚠ 以下内容为AI分析的结果,请根据实际情况进行判断。
代码解释
这是一个名为 AccountRepositoryHelper 的内部静态辅助类,用于处理用户账户相关的数据库操作。以下是各个方法的详细说明:
类概述
- 命名空间:
Dpz.Core.Service.Mediator.Features.Account.Internal - 访问修饰符:
internal static- 仅在当前程序集内可访问的静态工具类
方法说明
1. GetUserAsync 方法
internal static async Task<User?> GetUserAsync(...)
功能: 根据账户ID异步查询用户信息
参数:
repository: User实体的仓储接口account: 用户账户IDcancellationToken: 取消令牌
实现细节:
- 使用MongoDB的
Builders<User>.Filter.Eq构建查询过滤器,按用户ID查询 - 返回匹配的第一个用户,如果不存在则返回
null
2. SaveUserHistoryAsync 方法
internal static async Task SaveUserHistoryAsync(...)
功能: 保存用户变更历史记录
参数:
userHistoryRepository: 用户历史记录的仓储接口account: 用户账户IDchanges: 变更详情的只读集合cancellationToken: 取消令牌
实现细节:
- 首先检查变更集合是否为空,如果为空则直接返回(性能优化)
- 创建
UserHistory对象,包含:- 账户ID
- 当前时间戳
- 变更详情列表
- 将历史记录插入数据库
3. Change 方法
internal static ChangeDetail Change(...)
功能: 创建变更详情对象的便捷方法
参数:
field: 变更的字段名oldValue: 旧值newValue: 新值
返回: 包含变更信息的 ChangeDetail 对象
4. IsSystemAccount 方法
internal static bool IsSystemAccount(User user)
功能: 判断用户是否为系统账户
实现逻辑:
- 检查用户的
Permissions属性是否有值 - 使用位运算
&检查权限标志中是否包含Permissions.System标志 - 只有同时满足两个条件才返回
true
设计特点
- 单一职责: 每个方法专注于特定的数据库操作
- 异步设计: 使用
async/await支持异步操作 - 取消支持: 所有异步方法都支持取消令牌
- 性能优化: 在保存历史前检查变更是否为空
- 位标志检查: 使用位运算高效判断权限
AI 正在分析代码…
评论加载中...