public IList <HotelRoomModel> GetRooms(HotelRoomsFiltersModel filters = null)
        {
            var hotelRooms = _dbContext.HotelRooms
                             .Include(r => r.RoomFeatures)
                             .ThenInclude(rf => rf.Feature)
                             .Include(r => r.Reservations)
                             .AsQueryable();

            if (filters != null)
            {
                if (filters.Guests > 0)
                {
                    hotelRooms = hotelRooms.Where(r => r.MaxGuests >= filters.Guests);
                }

                filters.FeatureIds = filters.FeatureIds ?? new List <int>();
                foreach (var featureId in filters.FeatureIds)
                {
                    hotelRooms = hotelRooms.Where(r => r.RoomFeatures.Any(rf => rf.FeatureId == featureId));
                }

                if (filters.TimeRange != null)
                {
                    // correction for dates containing time
                    filters.TimeRange.Start = filters.TimeRange.Start.Date;
                    filters.TimeRange.End   = filters.TimeRange.End.Date;

                    hotelRooms = hotelRooms.Where(r => r.Reservations
                                                  .All(res => res.EndTime <= filters.TimeRange.Start || res.StartTime >= filters.TimeRange.End));
                }
            }

            var hotelRoomsList = hotelRooms.ToList();

            return(_mapper.Map <IList <HotelRoomModel> >(hotelRoomsList));
        }
        public IActionResult GetRooms(HotelRoomsFiltersModel filters)
        {
            var rooms = _hotelService.GetRooms(filters);

            return(Ok(rooms));
        }