protected override object ConvertRequest(CarQuery request) { GetCarYayaRequest convertedRequest = new(); convertedRequest.MyProperty3 = request.Id; // Some Conversions return(convertedRequest); }
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)); }
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)); }
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(); }
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); }
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); }
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)); }
public override Car Execute(CarQuery request) { return(ConvertResponse(Service.Client.GetCars((GetCarYayaRequest)ConvertRequest(request)))); }