public async Task <ActionResult <SearchCarAdsOutputModel> > Search(
            [FromQuery] CarAdsQuery query)
        {
            var carAdListings = await this.carAds.GetListings(query);

            var totalPages = await this.carAds.Total(query);

            return(new SearchCarAdsOutputModel(carAdListings, query.Page, totalPages));
        }
Beispiel #2
0
        private async Task <IQueryable <CarAd> > GetCarAdsQuery(
            CarAdsQuery query,
            int?dealerId       = null,
            bool includePaging = true)
        {
            var dataQuery = this.AllAvailable();

            if (dealerId.HasValue)
            {
                dataQuery = this
                            .All()
                            .Where(c => c.DealerId == dealerId);
            }

            if (query.Category.HasValue)
            {
                dataQuery = dataQuery.Where(c => c.CategoryId == query.Category);
            }

            if (!string.IsNullOrWhiteSpace(query.Description))
            {
                var fullTextSearch = await this.fullTextSearch
                                     .Query <CarAdFullTextSearchModel>(
                    c => c.Description,
                    query.Description);

                var ids = fullTextSearch.Select(c => c.CarAdId);

                dataQuery = dataQuery.Where(c => ids.Contains(c.Id));
            }

            if (!string.IsNullOrWhiteSpace(query.Manufacturer))
            {
                dataQuery = dataQuery.Where(c => c
                                            .Manufacturer.Name.ToLower().Contains(query.Manufacturer.ToLower()));
            }

            if (query.MinPricePerDay.HasValue)
            {
                dataQuery = dataQuery.Where(c => c.PricePerDay >= query.MinPricePerDay);
            }

            if (query.MaxPricePerDay.HasValue)
            {
                dataQuery = dataQuery.Where(c => c.PricePerDay <= query.MaxPricePerDay);
            }

            if (includePaging)
            {
                dataQuery = dataQuery
                            .Skip((query.Page - 1) * CarAdsPerPage)
                            .Take(CarAdsPerPage);
            }

            return(dataQuery);
        }
        public async Task <ActionResult <MineCarAdsOutputModel> > Mine(
            [FromQuery] CarAdsQuery query)
        {
            var dealerId = await this.dealers.GetIdByUser(this.currentUser.UserId);

            var carAdListings = await this.carAds.Mine(dealerId, query);

            var totalPages = await this.carAds.Total(query);

            return(new MineCarAdsOutputModel(carAdListings, query.Page, totalPages));
        }
Beispiel #4
0
 public async Task <int> Total(CarAdsQuery query)
 => await(await this
          .GetCarAdsQuery(query, includePaging: false))
 .CountAsync();
Beispiel #5
0
 public async Task <IEnumerable <MineCarAdOutputModel> > Mine(int dealerId, CarAdsQuery query)
 => await this.mapper
 .ProjectTo <MineCarAdOutputModel>(await this
                                   .GetCarAdsQuery(query, dealerId))
 .ToListAsync();
Beispiel #6
0
 public async Task <IEnumerable <CarAdOutputModel> > GetListings(CarAdsQuery query)
 => await this.mapper
 .ProjectTo <CarAdOutputModel>(await this
                               .GetCarAdsQuery(query))
 .ToListAsync();