public Task <CustomerGetPagedListResponse> GetPagedListAsync(
     CustomerGetPagedListRequest request,
     Dictionary <string, string> headers = default,
     CancellationToken ct = default)
 {
     return(_factory.PostAsync <CustomerGetPagedListResponse>(
                _host + "/Customers/v1/GetPagedList", null, request, headers, ct));
 }
        public async Task <ActionResult <CustomerGetPagedListResponse> > GetPagedList(
            CustomerGetPagedListRequest request,
            CancellationToken ct = default)
        {
            var response = await _customersService.GetPagedListAsync(_userContext.AccountId, request, ct);

            return(ReturnIfAllowed(
                       response,
                       Roles.Customers,
                       response.Customers.Select(x => x.AccountId)));
        }
 public static bool FilterByAdditional(this Customer customer, CustomerGetPagedListRequest request)
 {
     return((request.SourceIds == null || !request.SourceIds.Any() ||
             request.SourceIds.Any(x => SourceIdsPredicate(customer, x))) &&
            (request.CreateUserIds == null || !request.CreateUserIds.Any() ||
             request.CreateUserIds.Any(x => CreateUserIdsPredicate(customer, x))) &&
            (request.ResponsibleUserIds == null || !request.ResponsibleUserIds.Any() ||
             request.ResponsibleUserIds.Any(x => ResponsibleUserIdsPredicate(customer, x))) &&
            (request.Attributes == null || !request.Attributes.Any() ||
             (request.AllAttributes is false
                 ? request.Attributes.Any(x => AttributePredicate(customer, x))
                 : request.Attributes.All(x => AttributePredicate(customer, x)))));
 }
        public async Task WhenGetPagedList_ThenSuccess()
        {
            var headers = await _defaultRequestHeadersService.GetAsync();

            var attribute = await _create.CustomerAttribute.BuildAsync();

            var value  = "Test".WithGuid();
            var source = await _create.CustomerSource
                         .WithName(value)
                         .BuildAsync();

            await Task.WhenAll(
                _create.Customer
                .WithSourceId(source.Id)
                .WithAttributeLink(attribute.Id, value)
                .BuildAsync(),
                _create.Customer
                .WithSourceId(source.Id)
                .WithAttributeLink(attribute.Id, value)
                .BuildAsync());

            var filterAttributes = new Dictionary <Guid, string> {
                { attribute.Id, value }
            };
            var filterSourceIds = new List <Guid> {
                source.Id
            };

            var request = new CustomerGetPagedListRequest
            {
                Attributes = filterAttributes, SourceIds = filterSourceIds
            };

            var response = await _customersClient.GetPagedListAsync(request, headers);

            var results = response.Customers
                          .Skip(1)
                          .Zip(response.Customers, (previous, current) => current.CreateDateTime >= previous.CreateDateTime);

            Assert.NotEmpty(response.Customers);
            Assert.All(results, Assert.True);
        }
Exemple #5
0
        public async Task <CustomerGetPagedListResponse> GetPagedListAsync(
            Guid accountId,
            CustomerGetPagedListRequest request,
            CancellationToken ct)
        {
            var customers = await _storage.Customers
                            .AsNoTracking()
                            .Include(x => x.Source)
                            .Include(x => x.AttributeLinks)
                            .Where(x =>
                                   x.AccountId == accountId &&
                                   (request.Surname.IsEmpty() || EF.Functions.ILike(x.Surname, $"{request.Surname}%")) &&
                                   (request.Name.IsEmpty() || EF.Functions.ILike(x.Name, $"{request.Name}%")) &&
                                   (request.Patronymic.IsEmpty() || EF.Functions.ILike(x.Patronymic, $"{request.Patronymic}%")) &&
                                   (request.Phone.IsEmpty() || x.Phone == request.Phone) &&
                                   (request.Email.IsEmpty() || x.Email == request.Email) &&
                                   (!request.MinBirthDate.HasValue || x.BirthDate >= request.MinBirthDate) &&
                                   (!request.MaxBirthDate.HasValue || x.BirthDate <= request.MaxBirthDate) &&
                                   (!request.IsDeleted.HasValue || x.IsDeleted == request.IsDeleted) &&
                                   (!request.MinCreateDate.HasValue || x.CreateDateTime >= request.MinCreateDate) &&
                                   (!request.MaxCreateDate.HasValue || x.CreateDateTime <= request.MaxCreateDate) &&
                                   (!request.MinModifyDate.HasValue || x.ModifyDateTime >= request.MinModifyDate) &&
                                   (!request.MaxModifyDate.HasValue || x.ModifyDateTime <= request.MaxModifyDate))
                            .ToListAsync(ct);

            return(new CustomerGetPagedListResponse
            {
                TotalCount = customers
                             .Count(x => x.FilterByAdditional(request)),
                LastModifyDateTime = customers
                                     .Max(x => x.ModifyDateTime),
                Customers = customers
                            .Where(x => x.FilterByAdditional(request))
                            .AsQueryable()
                            .SortBy(request.SortBy, request.OrderBy)
                            .Skip(request.Offset)
                            .Take(request.Limit)
                            .ToList()
            });
        }