public async Task <QueryResult <ResidenceDto> > Handle(GetResidencesQuery request, CancellationToken cancellationToken) { IEnumerable <Residence> residences = await residenceRepository.ReadAsync(cancellationToken); if (request.CityId != null) { IEnumerable <Guid> districtIdsInCity = (await districtRepository.ReadAsync(cancellationToken)) .Where(d => d.CityId == request.CityId) .Select(d => d.Id); residences = residences.Where(r => districtIdsInCity.Any(id => r.DistrictId == id)); } if (request.DistrictId != null) { residences = residences.Where(r => r.DistrictId == request.DistrictId); } if (request.MaxPrice != null) { residences = residences.Where(r => r.GetFinalPrice() <= request.MaxPrice); } if (request.MinBedrooms != null) { residences = residences.Where(r => r.Bedrooms >= request.MinBedrooms); } return(new QueryResult <ResidenceDto>() { Items = residences.Select(r => new ResidenceDto(r)), }); }
public async Task <IActionResult> Get([FromQuery] GetResidencesQuery query, CancellationToken cancellationToken) => new OkObjectResult(await Mediator.Send(query, cancellationToken));