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)),
            });
        }
Exemplo n.º 2
0
 public async Task <IActionResult> Get([FromQuery] GetResidencesQuery query, CancellationToken cancellationToken) =>
 new OkObjectResult(await Mediator.Send(query, cancellationToken));