网站首页 网站源码
website
站点相关全部源代码,隐藏了一些关于服务器的信息
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();
    }
}
⚠⚠    以下内容为AI分析的结果,请根据实际情况进行判断。

上述代码定义了一个名为 UserHistoryService 的类,它实现了 IUserHistoryService 接口,主要用于处理与用户历史记录相关的服务。该类使用了一个名为 IRepository<UserHistory> 的通用仓储接口来与数据存储进行交互。以下是代码的主要功能和结构的详细解释:

1. 类的构造函数

public UserHistoryService(IRepository<UserHistory> repository) : IUserHistoryService
  • 该构造函数接受一个 IRepository<UserHistory> 类型的参数 repository,用于与 UserHistory 数据模型进行交互。

2. 获取分页列表的方法

public async Task<IPagedList<UserHistoryResponse>> GetPagedListAsync(UserHistoryRequest request)
  • 该方法用于根据请求参数获取用户历史记录的分页列表。
  • 它接受一个 UserHistoryRequest 类型的参数 request,该参数包含了过滤条件(如账户、变更时间、变更属性等)。

过滤条件的构建

  • 账户过滤:如果请求中包含账户信息,则使用正则表达式构建一个过滤条件。
  • 变更时间过滤:如果请求中包含开始时间和结束时间,则分别构建大于等于和小于等于的过滤条件。
  • 变更属性过滤:如果请求中包含变更属性,则构建一个过滤条件,检查 Changes 列表中是否存在该属性。

组合过滤条件

  • 所有的过滤条件被组合成一个 And 过滤器,如果没有过滤条件,则使用一个空过滤器。

数据查询

  • 使用组合后的过滤器从 repository 中查询数据,并按 Id 降序排序,最后将结果转换为 IPagedList<UserHistoryResponse> 类型的分页列表。

3. 获取变更属性的方法

public async Task<List<string>> GetChangedPropertiesAsync()
  • 该方法用于获取所有变更属性的列表。
  • 它通过查询 repository 中的 Changes 列表,使用 GroupBy 方法对变更字段进行分组,并返回唯一的字段名称列表。

总结

  • UserHistoryService 类提供了与用户历史记录相关的服务,包括获取分页的用户历史记录和获取所有变更属性的功能。
  • 该类通过构建动态的过滤条件来支持灵活的查询,并使用异步方法来提高性能和响应能力。
loading