/// <summary> /// Get nearest deals. /// </summary> /// <param name="request"></param> /// <returns></returns> public async Task <PagedResult <DealDto> > GetNearestDeals(SearchDealsRequestDto request) { var currentLocation = geometryFactory.CreatePoint(new Coordinate(request.GeoEntry.Longitude, request.GeoEntry.Latitude)); return(await unitOfWork.GetRepository <Deal>() .SearchFor(e => e.Brand.Stores.Any(s => s.Location.Distance(currentLocation) <= request.GeoEntry.Radius) && (e.DealValidFrom <= DateTime.Now) && (DateTime.Now <= e.DealValidTo) && !(e.Brand.Disabled ?? false)) .Include(e => e.Brand) .Include(e => e.Images) .OrderBy(e => e.Name) .Select(e => new DealDto() { Name = e.Name, DealType = (DealType)e.DealType, Gender = (GenderType)e.Gender, Currency = e.Currency, DealValidFrom = e.DealValidFrom, DealValidTo = e.DealValidTo, IsActive = e.IsActive, OriginalPrice = e.OriginalPrice, Price = e.Price, BuyNowUrl = e.BuyNowUrl, MarketUrl = e.MarketUrl, CouponCode = e.CouponCode, Images = e.Images.Select(i => i.Path) }) .GetPagedResultAsync(request.Skip, request.Take)); }
public async Task <ActionResult <PagedResult <DealDto> > > GetNearestDeals([FromQuery] SearchDealsRequestDto request) { PagedResult <DealDto> deals = await dealService.GetNearestDeals(request); if (deals == null) { return(InvalidRequest()); } return(Ok(deals)); }