GetApartmentByIdAsync(string apartmentId, CancellationToken cancellationToken = default(CancellationToken)) { Guid id = Guid.Parse(apartmentId); try { var apartment = await _db.Apartments.Where(_ => _.Id == id) .Include(_ => _.Address.Country).Include(_ => _.Address) .AsNoTracking().FirstOrDefaultAsync(cancellationToken); if (apartment is null) { return((Result <ApartmentSearchView>) Result <ApartmentSearchView> .NotOk <ApartmentSearchView>(null, "Apartment is not exist")); } ApartmentSearchView view = new ApartmentSearchView() { Apartment = _mapper.Map <ApartmentSearchDTO>(apartment), Address = _mapper.Map <AddressSearchDTO>(apartment.Address), Country = _mapper.Map <CountrySearchDTO>(apartment.Address.Country) }; return((Result <ApartmentSearchView>) Result <ApartmentSearchView> .Ok(view)); } catch (ArgumentNullException ex) { return((Result <ApartmentSearchView>) Result <ApartmentSearchView> .Fail <ApartmentSearchView>($"Source is null. {ex.Message}")); } }
GetAllApartmentsAsync(PagedRequest <SearchParameters> request, CancellationToken cancellationToken = default(CancellationToken)) { IQueryable <Apartment> apartments = _db.Apartments.Where(_ => _.IsOpen == true); if (!string.IsNullOrEmpty(request.Data.CountryId) && Guid.TryParse(request.Data.CountryId, out var _)) { Guid id = Guid.Parse(request.Data.CountryId); apartments = apartments.Where(_ => _.Address.CountryId == id); } if (!string.IsNullOrEmpty(request.Data.CityName)) { apartments = apartments.Where(_ => _.Address.City.Contains(request.Data.CityName)); } if (request.Data.RoomsFrom > 0) { apartments = apartments.Where(_ => _.NumberOfRooms >= request.Data.RoomsFrom); } if (request.Data.RoomsTill > 0 && request.Data.RoomsTill >= request.Data.RoomsFrom) { apartments = apartments.Where(_ => _.NumberOfRooms <= request.Data.RoomsTill); } if (request.Data.PriceFrom > 0) { apartments = apartments.Where(_ => _.Price >= request.Data.PriceFrom); } if (request.Data.PriceTill > 0 && request.Data.PriceTill >= request.Data.PriceFrom) { apartments = apartments.Where(_ => _.Price <= request.Data.PriceTill); } if (request.Data.NeedDates != null && request.Data.NeedDates.Any()) { foreach (var item in request.Data.NeedDates) { apartments = apartments.Where(_ => _.Dates.Where(_ => _.Date == item.Date).FirstOrDefault() == null); } } try { var count = await apartments.CountAsync(); var searchResult = await apartments.Include(_ => _.Address.Country) .Include(_ => _.Address) .Skip((request.PageNumber - 1) * request.PageSize) .Take(request.PageSize) .AsNoTracking().ToListAsync(cancellationToken); List <ApartmentSearchView> result = new List <ApartmentSearchView>(); foreach (var apartment in searchResult) { ApartmentSearchView view = new ApartmentSearchView() { Apartment = _mapper.Map <ApartmentSearchDTO>(apartment), Address = _mapper.Map <AddressSearchDTO>(apartment.Address), Country = _mapper.Map <CountrySearchDTO>(apartment.Address.Country) }; result.Add(view); } PagedResponse <ApartmentSearchView> response = new PagedResponse <ApartmentSearchView>(_mapper.Map <IEnumerable <ApartmentSearchView> >(result), count, request.PageNumber, request.PageSize); return((Result <PagedResponse <ApartmentSearchView> >) Result <PagedResponse <ApartmentSearchView> > .Ok(response)); } catch (ArgumentNullException ex) { return((Result <PagedResponse <ApartmentSearchView> >) Result <PagedResponse <ApartmentSearchView> > .Fail <PagedResponse <ApartmentSearchView> >($"Source is null. {ex.Message}")); } }