网站首页 网站源码
using Dpz.Core.Public.ViewModel.Request;
using Dpz.Core.Public.ViewModel.Response;
namespace Dpz.Core.Service.RepositoryServiceImpl;
public class UserHistoryService(IRepository<UserHistory> repository) : IUserHistoryService
{
public async Task<IPagedList<UserHistoryResponse>> GetPagedListAsync(UserHistoryRequest request)
{
var filterEmpty = Builders<UserHistory>.Filter.Empty;
var filters = new List<FilterDefinition<UserHistory>>();
if (!string.IsNullOrEmpty(request.Account))
{
var accountFilter = Builders<UserHistory>.Filter.Regex(
x => x.Account,
new BsonRegularExpression(request.Account, "i")
);
filters.Add(accountFilter);
}
if (request.ChangeTimeStart.HasValue)
{
var startFilter = Builders<UserHistory>.Filter.Gte(
x => x.ChangeTime,
request.ChangeTimeStart.Value
);
filters.Add(startFilter);
}
if (request.ChangeTimeEnd.HasValue)
{
var endFilter = Builders<UserHistory>.Filter.Lte(
x => x.ChangeTime,
request.ChangeTimeEnd.Value
);
filters.Add(endFilter);
}
if (!string.IsNullOrEmpty(request.ChangeProperty))
{
var propertyFilter = Builders<UserHistory>.Filter.Eq(
x => x.Changes.Any(y => y.Field == request.ChangeProperty),
true
);
filters.Add(propertyFilter);
}
var filterResult =
filters.Count > 0 ? Builders<UserHistory>.Filter.And(filters) : filterEmpty;
return await repository
.SearchFor(filterResult)
.SortByDescending(x => x.Id)
.ToPagedListAsync<UserHistory, UserHistoryResponse>(
request.PageIndex,
request.PageSize
);
}
public async Task<List<string>> GetChangedPropertiesAsync()
{
return await repository
.MongodbQueryable.SelectMany(x => x.Changes)
.GroupBy(x => x.Field)
.Select(x => x.Key)
.ToListAsync();
}
}
上述代码定义了一个名为 UserHistoryService
的类,它实现了 IUserHistoryService
接口,主要用于处理与用户历史记录相关的服务。该类使用了一个名为 IRepository<UserHistory>
的通用仓储接口来与数据存储进行交互。以下是代码的主要功能和结构的详细解释:
public UserHistoryService(IRepository<UserHistory> repository) : IUserHistoryService
IRepository<UserHistory>
类型的参数 repository
,用于与 UserHistory
数据模型进行交互。public async Task<IPagedList<UserHistoryResponse>> GetPagedListAsync(UserHistoryRequest request)
UserHistoryRequest
类型的参数 request
,该参数包含了过滤条件(如账户、变更时间、变更属性等)。Changes
列表中是否存在该属性。And
过滤器,如果没有过滤条件,则使用一个空过滤器。repository
中查询数据,并按 Id
降序排序,最后将结果转换为 IPagedList<UserHistoryResponse>
类型的分页列表。public async Task<List<string>> GetChangedPropertiesAsync()
repository
中的 Changes
列表,使用 GroupBy
方法对变更字段进行分组,并返回唯一的字段名称列表。UserHistoryService
类提供了与用户历史记录相关的服务,包括获取分页的用户历史记录和获取所有变更属性的功能。