Beispiel #1
0
        public async Task <ICollection <AdvertisementListingServiceModel> > GetBySearchAsync(CarSearchRequestModel model)
        {
            var carsQuery = this.dbContext.Cars.AsQueryable();

            if (model.MinPrice != 0 && model.MaxPrice != 0)
            {
                carsQuery = carsQuery.Where(c => c.Price > model.MinPrice && c.Price < model.MaxPrice);
            }
            else if (model.MinPrice != 0)
            {
                carsQuery = carsQuery.Where(c => c.Price > model.MinPrice);
            }
            else if (model.MaxPrice != 0)
            {
                carsQuery = carsQuery.Where(c => c.Price < model.MaxPrice);
            }

            if (model.MinYear != 0 && model.MaxYear != 0)
            {
                carsQuery = carsQuery.Where(c => c.Year > model.MinYear && c.Year < model.MaxYear);
            }
            else if (model.MinYear != 0)
            {
                carsQuery = carsQuery.Where(c => c.Year > model.MinYear);
            }
            else if (model.MaxYear != 0)
            {
                carsQuery = carsQuery.Where(c => c.Year < model.MaxYear);
            }

            // cars = model.MinYear != 0 && model.MaxYear != 0 ? cars = cars.Where(a => a.Year > model.MinYear && a.Year < model.MaxYear).ToList()
            //    : model.MinYear != 0 ? cars.Where(a => a.Year > model.MinYear).ToList()
            //    : model.MaxYear != 0 ? cars.Where(a => a.Year < model.MaxYear).ToList() : cars;

            if (model.MinHorsePower != 0 && model.MaxHorsePower != 0)
            {
                carsQuery = carsQuery.Where(c => c.HorsePower > model.MinHorsePower && c.HorsePower < model.MaxHorsePower);
            }
            else if (model.MinHorsePower != 0)
            {
                carsQuery = carsQuery.Where(c => c.HorsePower > model.MinHorsePower);
            }
            else if (model.MaxHorsePower != 0)
            {
                carsQuery = carsQuery.Where(c => c.HorsePower < model.MaxHorsePower);
            }

            if (!string.IsNullOrEmpty(model.FuelType))
            {
                var fuelType = (FuelType)Enum.Parse(typeof(FuelType), model.FuelType);

                carsQuery = carsQuery.Where(c => c.FuelType == fuelType);
            }

            if (!string.IsNullOrEmpty(model.Transmission))
            {
                var transmissionType = (TransmissionType)Enum.Parse(typeof(TransmissionType), model.Transmission);

                carsQuery = carsQuery.Where(c => c.Transmission == transmissionType);
            }

            if (!string.IsNullOrEmpty(model.Color))
            {
                var color = (Color)Enum.Parse(typeof(Color), model.Color);

                carsQuery = carsQuery.Where(c => c.Color == color);
            }

            if (!string.IsNullOrEmpty(model.Location))
            {
                var location = (Location)Enum.Parse(typeof(Location), model.Location);

                carsQuery = carsQuery.Where(c => c.Owner.Location == location);
            }

            if (!string.IsNullOrEmpty(model.Condition))
            {
                var condition = (ConditionType)Enum.Parse(typeof(ConditionType), model.Condition);

                carsQuery = carsQuery.Where(c => c.Condition == condition);
            }

            if (!string.IsNullOrEmpty(model.EuroStandard))
            {
                var euroStandard = (EuroStandard)Enum.Parse(typeof(EuroStandard), model.EuroStandard);

                carsQuery = carsQuery.Where(c => c.EuroStandard == euroStandard);
            }

            if (!string.IsNullOrEmpty(model.DoorsCount))
            {
                var doorsCount = (DoorsCount)Enum.Parse(typeof(DoorsCount), model.DoorsCount);

                carsQuery = carsQuery.Where(c => c.DoorsCount == doorsCount);
            }

            if (!string.IsNullOrEmpty(model.BodyType))
            {
                var bodyType = (BodyType)Enum.Parse(typeof(BodyType), model.BodyType);

                carsQuery = carsQuery.Where(c => c.BodyType == bodyType);
            }

            if (!string.IsNullOrEmpty(model.BrandId))
            {
                carsQuery = carsQuery.Where(c => c.BrandId == model.BrandId);
            }

            if (!string.IsNullOrEmpty(model.ModelId))
            {
                carsQuery = carsQuery.Where(c => c.ModelId == model.ModelId);
            }

            var result = await carsQuery
                         .Select(c => new AdvertisementListingServiceModel
            {
                Id        = c.Advertisement.Id,
                Title     = c.Advertisement.Title,
                Views     = c.Advertisement.Views,
                CreatedOn = c.Advertisement.CreatedOn.ToString(),
                Location  = c.Owner.Location != null ? c.Owner.Location.ToString() : null,
                ImageUrl  = c.Advertisement.Images.Select(x => x.Url).FirstOrDefault(),
                Author    = new UserInfoServiceModel
                {
                    Id                = c.Owner.Id,
                    Username          = c.Owner.UserName,
                    ProfilePictureUrl = c.Owner.ProfilePictureUrl
                },
                Car = new CarInfoServiceModel
                {
                    Price        = c.Price,
                    Year         = c.Year,
                    HorsePower   = c.HorsePower,
                    Mileage      = c.Mileage,
                    Condition    = c.Condition.ToString(),
                    Transmission = c.Transmission.ToString(),
                    BodyType     = c.BodyType.ToString(),
                    FuelType     = c.FuelType.ToString(),
                }
            })
                         .OrderByDescending(c => c.CreatedOn)
                         .ToListAsync();

            return(result);
        }
Beispiel #2
0
        public async Task <ActionResult> BySearch([FromBody] CarSearchRequestModel model)
        {
            var advertisements = await this.advertisementsService.GetBySearchAsync(model);

            return(this.Ok(advertisements));
        }