public async Task <List <HotelAvailabilityResponse> > Handle(SearchHotelAvailabilityQuery request, CancellationToken cancellationToken) { var availability = await _hotelAvailabilityRepository.SearchHotelAvailability(request); return(availability == null ? null : _mapper.Map(availability)); }
public async Task <IActionResult> SearchHotels(HotelAvailabilityRequest request) { var query = new SearchHotelAvailabilityQuery( request.Infants, request.Children, request.Adults, request.StayDate, request.HotelName, request.NetPrice, request.Region, request.Country, request.Available); var result = await _mediatr.Send(query, new CancellationToken()); return(result != null ? (IActionResult)Ok(result) : NotFound(new { Message = $"No Hotels were found." })); }
public async Task <List <HotelAvailability> > SearchHotelAvailability(SearchHotelAvailabilityQuery hotelAvailabilityRequest) { var client = _elasticSearchClient.CreateElasticClient(_elasticsearchConfig.Value.Url); var response = await client.SearchAsync <HotelAvailability>(har => har.Index(_elasticsearchConfig.Value.HotelAvailabilityIndex) .Size(60) .Query(q => q .Bool(bq => bq .Must( fq => fq.Match(m => m.Field(f => f.Available).Query("true")), fq => fq.Range(r => r.Field(f => f.Infants).GreaterThanOrEquals(hotelAvailabilityRequest.Infants)), fq => fq.Range(r => r.Field(f => f.Children).GreaterThanOrEquals(hotelAvailabilityRequest.Children)), fq => fq.Range(r => r.Field(f => f.Adults).GreaterThanOrEquals(hotelAvailabilityRequest.Adults)), fq => fq.Match(m => m.Field(f => f.StayDate).Query(hotelAvailabilityRequest.StayDate.ToString("yyyy'-'MM'-'dd"))), fq => fq.MatchPhrase(mp => mp.Field(f => f.Region).Query(hotelAvailabilityRequest.Region)), fq => fq.MatchPhrase(mp => mp.Field(f => f.Country).Query(hotelAvailabilityRequest.Country)), fq => fq.MatchPhrase(mp => mp.Field(f => f.HotelName).Query(hotelAvailabilityRequest.HotelName)), fq => fq.Range(r => r.Field(f => f.NetPrice).LessThanOrEquals(hotelAvailabilityRequest.NetPrice)) ) ) ) ); return(response.Documents?.Select(d => new HotelAvailability { Adults = d.Adults, AirportCode = d.AirportCode, Children = d.Children, Country = d.Country, CurrencyCode = d.CurrencyCode, EndDate = d.EndDate, HotelId = d.HotelId, HotelName = d.HotelName, Id = d.Id, Infants = d.Infants, Meal = d.Meal, NetPrice = d.NetPrice, Region = d.Region, Room = d.Room, StayDate = d.StayDate, Available = d.Available }).ToList()); }