コード例 #1
0
        public async Task <List <ToolDetailsViewModel> > Search(SearchFilterDto dto, PagingDto pagingDto)
        {
            try
            {
                if (pagingDto.PageSize == 0)
                {
                    pagingDto.PageSize = 2;
                }
                if (pagingDto.PageNumber == 0)
                {
                    pagingDto.PageNumber = 1;
                }
                _logger.LogInformation("Search: Title = " + dto.Title + "/Creator = " + dto.FullName + "/Tag = " + dto.Tag + "/Description = " + dto.Description);
                var result = await _databaseConnectService.Connection.FindAsync <Tool>(x => x
                                                                                       .Include <Tool_Tag>(join => join.LeftOuterJoin())
                                                                                       .Include <Tag>(join => join.LeftOuterJoin())
                                                                                       .Include <Users>(join => join.LeftOuterJoin())
                                                                                       .Include <Rate>(join => join.LeftOuterJoin())
                                                                                       .Where($"Tool.Title LIKE @title and Users.FullName LIKE @fullName and Tag.Name LIKE @tag and Tool.Description LIKE @desc")
                                                                                       .WithParameters(new { title = string.Format("%{0}%", dto.Title), fullName = string.Format("%{0}%", dto.FullName), tag = string.Format("%{0}%", dto.Tag), desc = string.Format("%{0}%", dto.Description) })
                                                                                       );

                var data = result.Skip((pagingDto.PageNumber - 1) * pagingDto.PageSize).Take(pagingDto.PageSize)
                           .Select(x => ToToolDetailsViewModel(x)).ToList();
                return(data);
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
コード例 #2
0
        public async Task <IActionResult> GetFilteredStores([FromBody] JObject searchFilterDtoJObject)
        {
            var searchFilterDto = new SearchFilterDto(searchFilterDtoJObject);

            var stores = await _filterRepository.GetFilteredStores(searchFilterDto);

            return(Ok(stores));
        }
コード例 #3
0
        public IActionResult List([FromForm] SearchFilterDto filterDto)
        {
            var errors = ValidateSearchFilter(filterDto);

            if (errors.Count() > 0)
            {
                return(BadRequest(string.Join(Environment.NewLine, errors.ToArray())));
            }

            var items = _toDoService.GetToDoItems(ConvertFilter(filterDto));

            return(Ok(items));
        }
コード例 #4
0
        /// <summary>
        /// Преобразует входящий фильтр в фильтр для выборки, который будет передан в сервис.
        /// </summary>
        /// <param name="filterDto">Входяций фильтр.</param>
        private SearchItemFilter ConvertFilter(SearchFilterDto filterDto)
        {
            var filter = new SearchItemFilter
            {
                PageNumber   = filterDto.Current != 0 ? filterDto.Current - 1 : filterDto.Current,
                TakeCount    = filterDto.RowCount,
                SearchPhrase = filterDto.SearchPhrase
            };

            var sortType = Request.Form.TryGetValue("sort[itemType]", out var sortItemsType);

            if (sortType)
            {
                filter.SortType     = sortType;
                filter.SortTypeDesc = string.Equals(sortItemsType, "desc", StringComparison.InvariantCultureIgnoreCase);
            }

            var sortDateStart = Request.Form.TryGetValue("sort[startDateString]", out var sortStartDateType);

            if (sortDateStart)
            {
                filter.SortStartDate     = sortDateStart;
                filter.SortStartDateDesc = string.Equals(sortStartDateType, "desc", StringComparison.InvariantCultureIgnoreCase);
            }

            var sortDateEnd = Request.Form.TryGetValue("sort[endDateString]", out var sortEndDateType);

            if (sortDateEnd)
            {
                filter.SortEndDate     = sortDateEnd;
                filter.SortEndDateDesc = string.Equals(sortEndDateType, "desc", StringComparison.InvariantCultureIgnoreCase);
            }

            filter.ItemType   = int.TryParse(filterDto.Type, out var itemType) ? (ToDoTypeEnum)itemType : ToDoTypeEnum.AllTypes;
            filter.PeriodType = int.TryParse(filterDto.TimePeriod, out var periodType) ? (TimePeriodEnum)periodType : TimePeriodEnum.AllTime;

            if (DateTime.TryParse(filterDto.StartDateSearch, out var StartDT))
            {
                filter.SearchStartDate = StartDT;
            }

            if (DateTime.TryParse(filterDto.EndDateSearch, out var EndDT))
            {
                filter.SearchEndDate = EndDT;
            }

            return(filter);
        }
コード例 #5
0
        public async Task <ICollection <StoreDto> > GetFilteredStores(SearchFilterDto searchFilters)
        {
            searchFilters.Name         = searchFilters.Name ?? "";
            searchFilters.Neighborhood = searchFilters.Neighborhood ?? "";

            Func <Store, bool> filterStoreByTypeExpression = store => store.Type == searchFilters.StoreType;
            Func <Store, bool> filterStoreByNameExpression = store => store.Name.ToLower().Contains(searchFilters.Name.ToLower());
            Func <Store, bool> filterStoreByNeighborhood   = store => store.Neighborhood.ToLower().Contains(searchFilters.Neighborhood.ToLower());

            Expression <Func <Store, bool> > filtersCombinedExpression;

            if (searchFilters.StoreType == StoreType.All)
            {
                filtersCombinedExpression = store => filterStoreByNameExpression(store) && filterStoreByNeighborhood(store);
            }
            else
            {
                filtersCombinedExpression = store => filterStoreByNameExpression(store) && filterStoreByNeighborhood(store) && filterStoreByTypeExpression(store);
            }

            var stores = _dbLjepotaServisContext.Stores.Where(filtersCombinedExpression).ToList();

            var allStoreReservationsGroupedByStoreId = await _dbLjepotaServisContext
                                                       .ReservationServices
                                                       .Where(reservationService => stores.Any(store => store.Id == reservationService.Service.StoreId))
                                                       .Join(_dbLjepotaServisContext.Reservations, reservationService => reservationService.ReservationId,
                                                             reservation => reservation.Id,
                                                             (service, reservation) => new { service, reservation })
                                                       .GroupBy(joined => joined.service.Service.StoreId,
                                                                joined => joined.reservation,
                                                                (storeId, reservation) => new { storeId, reservation })
                                                       .ToListAsync();

            var storeListDto = stores.Select(store =>
            {
                var storeReservations = allStoreReservationsGroupedByStoreId.FirstOrDefault(grouped => grouped.storeId == store.Id);
                var rating            = storeReservations?.reservation.Sum(storeRes => storeRes.Rating) / storeReservations?.reservation.Count() ?? 0;
                return(store.ProjectStoreToStoreDto(rating));
            }).ToList();

            return(storeListDto);
        }
コード例 #6
0
        /// <summary>
        /// Валидирует входные параметры фильтра.
        /// </summary>
        /// <param name="filter">Фильтр.</param>
        /// <returns>Список ошибок валидации, либо пустой список, если ошибок нет.</returns>
        private List <string> ValidateSearchFilter(SearchFilterDto filter)
        {
            var errors = new List <string>();

            if (filter == null)
            {
                errors.Add("Фильтр для поиска не может быть пустым");
                return(errors);
            }

            if (filter.Current < 0)
            {
                errors.Add("Номер текущей страницы не может быть меньше 0");
            }

            if (filter.RowCount < 0)
            {
                errors.Add("Количество запрашиваемых элементов не может быть меньше 0");
            }

            return(errors);
        }
コード例 #7
0
        public async Task <List <ToolDetailsViewModel> > Search(SearchFilterDto dto, PagingDto pagingDto)
        {
            var result = await _toolService.Search(dto, pagingDto);

            return(result);
        }
コード例 #8
0
        public async Task <DishSearchResultDto> Get([FromBody] SearchFilterDto searchFilter)
        {
            var result = await Task.FromResult(new DishSearchResultDto());

            return(result);
        }
コード例 #9
0
 public ActionResult Find([FromBody] SearchFilterDto inspectionCenterDto)
 {
     return(Ok(_inspectionCenterManager.Find(inspectionCenterDto.Name, (PageQuery)inspectionCenterDto)));
 }