public async Task <IEnumerable <Flat> > Search(FlatSearchQuery query) { if (query == null) { throw new ArgumentNullException(nameof(query)); } IQueryable <Flat> flats = null; var user = await _userService.CurrentUser; if (user == null) { flats = _context.Flats.Where(x => !x.IsSold); } else { flats = _context.Flats.Where(x => !x.IsSold || x.OwnerId == user.Id); } if (query.MinNumberOfRooms.HasValue) { flats = flats.Where(x => x.NumberOfRooms >= query.MinNumberOfRooms.Value); } if (query.MaxNumberOfRooms.HasValue) { flats = flats.Where(x => x.NumberOfRooms <= query.MaxNumberOfRooms.Value); } if (query.MinArea.HasValue) { flats = flats.Where(x => x.Area >= query.MinArea.Value); } if (query.MaxArea.HasValue) { flats = flats.Where(x => x.Area <= query.MaxArea.Value); } if (query.MinPrice.HasValue) { flats = flats.Where(x => x.Price >= query.MinPrice.Value); } if (query.MaxPrice.HasValue) { flats = flats.Where(x => x.Price <= query.MaxPrice.Value); } if (query.HasBalcony.HasValue && query.HasBalcony.Value) { flats = flats.Where(x => x.HasBalcony); } return(await flats.ToListAsync()); }
public async Task <IActionResult> Search([FromBody] FlatSearchQuery query) { return(Json(await _flatService.Search(query))); }