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)); }