예제 #1
0
        public async Task <IActionResult> Search(string?query, [FromQuery] AutoFilterRequest filter, [Range(1, int.MaxValue)] int page = 1, [Range(1, 24)] int pageSize = 5)
        {
            IEnumerable <int>?searchResultIds = null;

            if (!string.IsNullOrEmpty(query))
            {
                ISearchResponse <AutoPostSearchDTO> searchResponse = await _elasticClient.SearchAsync <AutoPostSearchDTO>(
                    s => s.Query(q => q.QueryString(d => d.Query(query)))
                    .From((page - 1) * pageSize)
                    .Size(pageSize));

                searchResultIds = searchResponse.Documents.Select(x => x.PostId);
            }

            IEnumerable <int> filterIds = _autoService.Filter(filter).Select(x => x.PostId);

            if (searchResultIds != null)
            {
                filterIds = searchResultIds.Join(filterIds, x => x, x => x, (postId, _) => postId);
            }

            int totalResults = filterIds.Count();

            filterIds = filterIds.Skip((page - 1) * pageSize).Take(pageSize);

            return(Ok(new PaginatedResponse <AutoPost>(await _postService.Get <AutoPost>(filterIds), page, totalResults)));
        }
예제 #2
0
        public IQueryable <AutoPost> Filter(AutoFilterRequest autoFilterRequest)
        {
            IQueryable <AutoPost> filteredPosts = _myDbContext.AutoPosts.AsNoTracking().Where(x => x.IsPublic == true);

            if (!string.IsNullOrEmpty(autoFilterRequest.Vin))
            {
                filteredPosts = filteredPosts.Where(x => !string.IsNullOrEmpty(x.Vin) && x.Vin.Contains(autoFilterRequest.Vin.ToUpper()));
            }

            if (!string.IsNullOrEmpty(autoFilterRequest.Series))
            {
                filteredPosts = filteredPosts.Where(x => !string.IsNullOrEmpty(x.Series) && x.Series.Contains(autoFilterRequest.Series.ToUpper()));
            }

            if (!string.IsNullOrEmpty(autoFilterRequest.Trim))
            {
                filteredPosts = filteredPosts.Where(x => !string.IsNullOrEmpty(x.Trim) && x.Trim.Contains(autoFilterRequest.Trim.ToUpper()));
            }

            if (!string.IsNullOrEmpty(autoFilterRequest.Color))
            {
                filteredPosts = filteredPosts.Where(x => !string.IsNullOrEmpty(x.Color) && x.Color.Contains(autoFilterRequest.Color.ToUpper()));
            }

            if (autoFilterRequest.MileageFrom.HasValue)
            {
                filteredPosts = filteredPosts.Where(x => x.Mileage.HasValue && x.Mileage >= autoFilterRequest.MileageFrom);
            }

            if (autoFilterRequest.MileageTo.HasValue)
            {
                filteredPosts = filteredPosts.Where(x => x.Mileage.HasValue && x.Mileage <= autoFilterRequest.MileageTo);
            }

            if (autoFilterRequest.YearFrom.HasValue)
            {
                filteredPosts = filteredPosts.Where(x => x.Year.HasValue && x.Year >= autoFilterRequest.YearFrom);
            }

            if (autoFilterRequest.YearTo.HasValue)
            {
                filteredPosts = filteredPosts.Where(x => x.Year.HasValue && x.Year <= autoFilterRequest.YearTo);
            }

            if (autoFilterRequest.Makes != null && autoFilterRequest.Makes.Any())
            {
                filteredPosts = filteredPosts.Where(x => x.MakeId.HasValue && autoFilterRequest.Makes.Contains(x.MakeId.Value));
            }

            if (autoFilterRequest.Models != null && autoFilterRequest.Models.Any())
            {
                filteredPosts = filteredPosts.Where(x => x.ModelId.HasValue && autoFilterRequest.Models.Contains(x.ModelId.Value));
            }

            if (autoFilterRequest.CylinderCount != null && autoFilterRequest.CylinderCount.Any())
            {
                filteredPosts = filteredPosts.Where(x => x.Cylinders.HasValue && autoFilterRequest.CylinderCount.Contains(x.Cylinders.Value));
            }

            if (autoFilterRequest.AutoTypes != null && autoFilterRequest.AutoTypes.Any())
            {
                filteredPosts = filteredPosts.Where(x => x.AutoType.HasValue && autoFilterRequest.AutoTypes.Contains(x.AutoType.Value));
            }

            if (autoFilterRequest.TransmissionTypes != null && autoFilterRequest.TransmissionTypes.Any())
            {
                filteredPosts = filteredPosts.Where(x => x.TransmissionType.HasValue && autoFilterRequest.TransmissionTypes.Contains(x.TransmissionType.Value));
            }

            if (autoFilterRequest.TitleStatuses != null && autoFilterRequest.TitleStatuses.Any())
            {
                filteredPosts = filteredPosts.Where(x => x.TitleStatus.HasValue && autoFilterRequest.TitleStatuses.Contains(x.TitleStatus.Value));
            }

            if (autoFilterRequest.FuelTypes != null && autoFilterRequest.FuelTypes.Any())
            {
                filteredPosts = filteredPosts.Where(x => x.FuelType.HasValue && autoFilterRequest.FuelTypes.Contains(x.FuelType.Value));
            }

            if (autoFilterRequest.AutoConditions != null && autoFilterRequest.AutoConditions.Any())
            {
                filteredPosts = filteredPosts.Where(x => x.AutoCondition.HasValue && autoFilterRequest.AutoConditions.Contains(x.AutoCondition.Value));
            }

            if (autoFilterRequest.ModifiedDateFrom.HasValue)
            {
                filteredPosts = filteredPosts.Where(x => x.ModifiedDate.HasValue && x.ModifiedDate >= autoFilterRequest.ModifiedDateFrom);
            }

            if (autoFilterRequest.ModifiedDateTo.HasValue)
            {
                filteredPosts = filteredPosts.Where(x => x.ModifiedDate.HasValue && x.ModifiedDate <= autoFilterRequest.ModifiedDateTo);
            }

            if (autoFilterRequest.CreatedDateFrom.HasValue)
            {
                filteredPosts = filteredPosts.Where(x => x.CreatedDate.HasValue && x.CreatedDate >= autoFilterRequest.CreatedDateFrom);
            }

            if (autoFilterRequest.CreatedDateTo.HasValue)
            {
                filteredPosts = filteredPosts.Where(x => x.CreatedDate.HasValue && x.CreatedDate <= autoFilterRequest.CreatedDateTo);
            }

            if (autoFilterRequest.HasImages != null)
            {
                filteredPosts = filteredPosts.Where(x => x.PostImages.Any() == autoFilterRequest.HasImages);
            }

            return(filteredPosts);
        }