Exemple #1
0
        protected override object ConvertRequest(CarQuery request)
        {
            GetCarYayaRequest convertedRequest = new();

            convertedRequest.MyProperty3 = request.Id;
            // Some Conversions
            return(convertedRequest);
        }
Exemple #2
0
        protected override object ConvertRequest(CarQuery request)
        {
            GetCarAmaduesRequest query = new();

            //query.Car1 = request.SearchString;
            // Get something from RawRequet and convert it to CarQuery
            return(query);
        }
        public async Task <int> CountPages([FromQuery] CarQuery query)
        {
            ISpecification <Car> numberPlateFilter =
                new ExpressionSpecification <Car> (e => EF.Functions.Like(e.NumberPlate, $"%{query.Search.Trim()}%"));
            ISpecification <Car> carTypeFilter = new ExpressionSpecification <Car> (e => query.CarTypeId == 0 ? true : e.CarTypeId == query.CarTypeId);
            ISpecification <Car> carExpSpec    = numberPlateFilter.And(carTypeFilter);

            return(await carRepository.CountPages(query.PageSize, carExpSpec));
        }
Exemple #4
0
        public override Car Execute(CarQuery request)
        {
            GetCarAmaduesRequest convertedRequest = (GetCarAmaduesRequest)ConvertRequest(request);
            var resultFromHttp = Service.Client.PostAsync("url", new StringContent(convertedRequest.ToString())).Result;
            // parse to response or move this logic into the ISerivceClient - Like Amadeus class in their project for example
            GetCarAmaduesResponse rawResponse = new();

            return(ConvertResponse(rawResponse));
        }
Exemple #5
0
        static void Main(string[] args)
        {
            QueryExecutor queryExecutioner = new QueryExecutor();

            IntQuery    intQuery = new IntQuery();
            StringQuery strQuery = new StringQuery();
            CarQuery    carQuery = new CarQuery();

            Console.WriteLine(queryExecutioner.Execute(intQuery));
            Console.WriteLine(queryExecutioner.Execute(strQuery));
            Console.WriteLine(queryExecutioner.Execute(carQuery));

            Console.ReadLine();
        }
Exemple #6
0
        public async Task <QueryResult <Car> > GetCars(CarQuery queryObj)
        {
            // new result object
            var result = new QueryResult <Car>();

            var query = context.Cars
                        .Include(c => c.Model)
                        .ThenInclude(m => m.Make)
                        .Include(c => c.Features)
                        .ThenInclude(cf => cf.Feature)
                        .AsQueryable();

            // fitler with MakeId
            if (queryObj.MakeId.HasValue)
            {
                query = query.Where(c => c.Model.MakeId == queryObj.MakeId.Value);
            }

            // filter with ModelId
            if (queryObj.ModelId.HasValue)
            {
                query = query.Where(c => c.ModelId == queryObj.MakeId.Value);
            }

            // Sorting
            // mapping the string and expression
            var columnsMap = new Dictionary <string, Expression <Func <Car, object> > >()
            {
                // using the object initialization syntax to add KeyValuePairs to the dictionary
                ["make"]        = c => c.Model.Make.Name,
                ["model"]       = c => c.Model.Name,
                ["contactName"] = c => c.ContactName
            };

            // the extension method
            query = query.ApplyOrdering(queryObj, columnsMap);

            // calculate the total for the pagination
            result.TotalItems = await query.CountAsync();

            // pagination
            query = query.ApplyPaging(queryObj);

            result.Items = await query.ToListAsync();

            return(result);
        }
Exemple #7
0
        public async Task <QueryResult <Car> > GetAll(CarQuery carQuery, bool loadExternal = false)
        {
            var        result = new QueryResult <Car>();
            List <Car> cars;

            if (!loadExternal)
            {
                cars = await _context.Cars.ToListAsync();

                result.Items = await _context.Cars.ToListAsync();

                result.Size = cars.Count;
                return(result);
            }

            var query = _context.Cars
                        .Include(c => c.Model)
                        .ThenInclude(m => m.Make)
                        .Include(c => c.Features)
                        .ThenInclude(f => f.Feature)
                        .AsQueryable();

            query = query.ApplyFiltering(carQuery);

            if (!string.IsNullOrEmpty(carQuery.sortBy))
            {
                var SortingDict = new Dictionary <string, Expression <Func <Car, object> > >
                {
                    ["Name"]  = c => c.ContactName,
                    ["Price"] = c => c.Price,
                    ["Email"] = c => c.Email,
                    ["Make"]  = c => c.Model.Make.Name,
                    ["Model"] = c => c.Model.Name,
                    ["Year"]  = c => c.year,
                };

                query = query.ApplyOrdering(carQuery, SortingDict);
            }
            result.Size = query.Count();

            query = query.ApplyPaging(carQuery);

            result.Items = await query.ToListAsync();

            return(result);
        }
        public async Task <PageData <CarDTO> > GetPaginated(int page, [FromQuery] CarQuery query)
        {
            PageData <CarDTO> result = new PageData <CarDTO> ();
            var carDTOList           = await Filter(query);

            Func <CarDTO, object> orderFunc = a => a.Id;

            switch (query.SortBy)
            {
            case "numberPlate":
                orderFunc = a => a.NumberPlate;
                break;

            case "color":
                orderFunc = a => a.Color;
                break;

            case "carTypeName":
                orderFunc = a => a.CarTypeName;
                break;

            case "cost":
                orderFunc = a => a.Cost;
                break;

            case "seat":
                orderFunc = a => a.Seat;
                break;
            }

            result.TotalPages = (int)Math.Ceiling(carDTOList.Count() / (double)query.PageSize);

            if (!query.Desc)
            {
                result.List = carDTOList.OrderBy(orderFunc).Skip((page - 1) * query.PageSize).Take(query.PageSize);
            }
            else
            {
                result.List = carDTOList.OrderByDescending(orderFunc).Skip((page - 1) * query.PageSize).Take(query.PageSize);
            }

            return(result);
        }
Exemple #9
0
        public static IQueryable <Car> ApplyFiltering(this IQueryable <Car> query, CarQuery carQuery)
        {
            if (carQuery.MakeId.HasValue)
            {
                query = query.Where(c => c.Model.MakeId == carQuery.MakeId);
            }

            if (carQuery.ModelId.HasValue)
            {
                query = query.Where(c => c.Model.Id == carQuery.ModelId);
            }

            if (carQuery.yearmax.HasValue)
            {
                query = query.Where(c => c.year <= carQuery.yearmax);
            }

            if (carQuery.yearmin.HasValue)
            {
                query = query.Where(c => c.year >= carQuery.yearmin);
            }

            if (carQuery.PriceMax.HasValue)
            {
                query = query.Where(c => c.Price <= carQuery.PriceMax);
            }

            if (carQuery.PriceMin.HasValue)
            {
                query = query.Where(c => c.Price >= carQuery.PriceMin);
            }

            if (!string.IsNullOrEmpty(carQuery.Owner))
            {
                query = query.Where(c => c.Email == carQuery.Owner);
            }

            return(query);
        }
        private async Task <IEnumerable <CarDTO> > Filter(CarQuery query)
        {
            ISpecification <Car> numberPlateFilter =
                new ExpressionSpecification <Car> (e => EF.Functions.Like(e.NumberPlate, $"%{query.Search.Trim()}%"));
            ISpecification <Car>    carTypeFilter = new ExpressionSpecification <Car> (e => query.CarTypeId == 0 ? true : e.CarTypeId == query.CarTypeId);
            ISpecification <CarDTO> seatFilter    = new ExpressionSpecification <CarDTO> (c => query.Seat == 0 ? true : c.Seat == query.Seat);
            ISpecification <CarDTO> priceFilter   = new ExpressionSpecification <CarDTO> (e => query.MaxPrice == 0 ? true : e.Cost >= query.MinPrice && e.Cost <= query.MaxPrice);
            var startDay = DateTime.ParseExact(query.PickUpDate, "yyyy-MM-dd", CultureInfo.InvariantCulture);
            var endDay   = DateTime.ParseExact(query.DropOffDate, "yyyy-MM-dd", CultureInfo.InvariantCulture);
            ISpecification <Booking> dateFilter = new ExpressionSpecification <Booking> (e =>
                                                                                         (DateTime.Compare(startDay, e.PickUpDate) <= 0 && DateTime.Compare(endDay, e.PickUpDate) >= 0) ||
                                                                                         (DateTime.Compare(startDay, e.DropOffDate) <= 0 && DateTime.Compare(endDay, e.DropOffDate) >= 0));
            ISpecification <CarDTO> carDTOExpSpec = seatFilter.And(priceFilter);
            ISpecification <Car>    carExpSpec    = numberPlateFilter.And(carTypeFilter);

            var list = await carRepository.Search(carExpSpec);

            var carTypeList = await carTypeRepository.GetAll();

            var bookingList = await bookingRepository.Search(dateFilter);

            List <CarDTO> carDTOList = new List <CarDTO> ();

            foreach (var car in list)
            {
                if (bookingList.Where(e => e.CarId == car.Id).Count() == 0)
                {
                    var carType = await carTypeRepository.GetById(car.CarTypeId);

                    CarDTO carDTO = mapper.Map <Car, CarDTO> (car);
                    mapper.Map <CarType, CarDTO> (carType, carDTO);
                    carDTOList.Add(carDTO);
                }
            }

            return(carDTOList.Where(c => carDTOExpSpec.IsSatisfiedBy(c)).ToList());
        }
 public virtual Car GetCar(CarQuery query)
 {
     return(GetCarRequester.Execute(query));
 }
Exemple #12
0
 public override Car Execute(CarQuery request)
 {
     return(ConvertResponse(Service.Client.GetCars((GetCarYayaRequest)ConvertRequest(request))));
 }