예제 #1
0
        /// <summary>
        /// Gets customers.
        /// </summary>
        /// <param name="request">The request.</param>
        /// <returns></returns>
        public async Task <PagedResult <Customer> > GetCustomers(CustomersSearchDto request)
        {
            Expression <Func <Customer, bool> > expression = c => true;

            if (request != null)
            {
                if (!string.IsNullOrEmpty(request.Q))
                {
                    var terms = request.Q.Split(' ').Where(r => !string.IsNullOrWhiteSpace(r));

                    foreach (var term in terms)
                    {
                        expression = expression.And(c => c.Name.Contains(term) || c.Subdomain.Contains(term));
                    }
                }

                if (!request.IncludeArchived)
                {
                    expression = expression.And(c => !c.IsDeleted);
                }
            }

            return(await customerRepository
                   .FindPagedAsync(
                       expression,
                       o => o.OrderBy(e => e.Name),
                       CustomerIncludes,
                       request != null?request.Skip : (int?)null,
                       request != null?request.Take : (int?)null
                       ));
        }
        public async Task GetCustomers_CustomerSubdomainMatchToQuery_ReturnsMatchCustomer()
        {
            // Arrange
            var testCustomer1 = new Customer
            {
                Id        = 3000,
                Name      = "TestCustomer1",
                Subdomain = "TestCustomerSubdomain1"
            };
            var testCustomer2 = new Customer
            {
                Id        = 3001,
                Name      = "TestCustomer2",
                Subdomain = "TestCustomerSubdomain2"
            };
            var searchRequest = new CustomersSearchDto
            {
                Q = testCustomer2.Subdomain
            };

            this.customersRepository.Refresh(new List <Customer> {
                testCustomer1, testCustomer2
            });

            // Act
            var result = await this.sut.GetCustomers(searchRequest);

            var actual = result.Results.FirstOrDefault();

            // Assert
            Assert.IsNotNull(actual);
            Assert.AreSame(testCustomer2, actual);
        }
        public async Task GetCustomers_IncludeArchived_ReturnsDeletedCustomers()
        {
            // Arrange
            var testCustomer1 = new Customer
            {
                Id        = 3000,
                Name      = "TestCustomer1",
                Subdomain = "TestCustomerSubdomain1",
                IsDeleted = true
            };
            var testCustomer2 = new Customer
            {
                Id        = 3001,
                Name      = "TestCustomer2",
                Subdomain = "TestCustomerSubdomain2"
            };
            var searchRequest = new CustomersSearchDto
            {
                IncludeArchived = true
            };

            this.customersRepository.Refresh(new List <Customer> {
                testCustomer1, testCustomer2
            });

            // Act
            var result = await this.sut.GetCustomers(searchRequest);

            var actual = result.Results.FirstOrDefault(c => c.Id == testCustomer1.Id);

            // Assert
            Assert.IsNotNull(actual);
            Assert.AreSame(testCustomer1, actual);
        }
        public async Task <IHttpActionResult> GetCustomers(
            string q             = null,
            int?skip             = null,
            int?take             = null,
            bool includeArchived = false,
            bool isBrief         = true
            )
        {
            // Temporary workaround to avoid unsuccessfull request validation
            var request = new CustomersSearchDto
            {
                Q = q ?? string.Empty,
                IncludeArchived = includeArchived
            };

            request.Skip = skip ?? request.Skip;
            request.Take = take ?? request.Take;

            var responseModel = await customersHelper.GetCustomers(request, isBrief);

            return(Ok(responseModel));
        }
예제 #5
0
        /// <summary>
        /// Gets customers.
        /// </summary>
        /// <param name="request">The request.</param>
        /// <param name="isBrief"></param>
        /// <returns></returns>
        public async Task <PagedResultDto <BaseCustomerResponseDto> > GetCustomers(CustomersSearchDto request, bool isBrief)
        {
            var pagedCustomers = await customerService.GetCustomers(request);

            // Filtering archived customer's sites and organizations
            if (request != null && !request.IncludeArchived)
            {
                foreach (var customer in pagedCustomers.Results)
                {
                    customer.Sites         = customer.Sites.Where(s => !s.IsDeleted).ToList();
                    customer.Organizations = customer.Organizations.Where(s => !s.IsDeleted).ToList();
                }
            }

            var result = new PagedResultDto <BaseCustomerResponseDto>()
            {
                Total   = pagedCustomers.Total,
                Results = isBrief ?
                          Mapper.Map <IList <Customer>, IList <BriefCustomerResponseDto> >(pagedCustomers.Results).Cast <BaseCustomerResponseDto>().ToList() :
                          Mapper.Map <IList <Customer>, IList <FullCustomerResponseDto> >(pagedCustomers.Results).Cast <BaseCustomerResponseDto>().ToList()
            };

            return(result);
        }