142 | | |
| 140 | {{{#!java |
| 141 | public List<HotelDto> getRoomsAvailibilityByDateAndLocation(String hotelLocation, Date dateFrom, Date dateTo, int numberOfBeds, Boolean flexible) { |
| 142 | long numberOfNights = Duration.between(dateFrom.toInstant(), dateTo.toInstant()).toDays(); |
| 143 | List<HotelRoomAvailable> roomsAvailible = hotelDao.getRoomsAvailibilityByDateAndLocation(hotelLocation, dateFrom, dateTo, numberOfBeds, flexible); |
| 144 | Map<Hotels, List<HotelRoomAvailable>> roomsByHotels = roomsAvailible.stream().collect(Collectors.groupingBy(x -> x.getHotelRoom().getHotel())); |
| 145 | List<HotelDto> hotelsList = roomsByHotels.keySet().stream() |
| 146 | .map(x -> new HotelDto( |
| 147 | x.getHotelId(), |
| 148 | x.getHotelName(), |
| 149 | x.getHotelDescripiton(), |
| 150 | x.getHotelLocation(), |
| 151 | x.getHotelEDBS(), |
| 152 | x.getParking(), |
| 153 | x.getPetFriendly(), |
| 154 | x.getInternetAvailable(), |
| 155 | roomsByHotels.get(x).stream().mapToDouble(y -> y.getHotelRoom().getPrice()).min().getAsDouble() * numberOfNights, |
| 156 | roomsByHotels.get(x), |
| 157 | getReviewsForHotel(x.getHotelId()), |
| 158 | getReviewsForHotel(x.getHotelId()).stream().mapToDouble(Reviews::getNumStar).average().orElse(0), |
| 159 | getHotelImages(x.getHotelId()) |
| 160 | )).toList(); |
| 161 | return hotelsList; |
| 162 | } |
| 163 | }}} |
| 164 | Во сервисот за да не ги користиме сите податоци од вистинската класа користиме класа HotelDto односно data transfer object. Со ова овозможуваме да за пренос на податоци меѓу backend и frontend. Во функцијата ги листаме сите слободни соби од сите хотели со наведените криетриуми. |
| 165 | {{{#!java |
| 166 | @GetMapping(path = "/hotel/search") |
| 167 | public List<HotelDto> searchAvailibleRooms(@RequestParam(name = "hotelLocation") String hotelLocation, |
| 168 | @RequestParam(name = "dateFrom") @DateTimeFormat(pattern = "yyyy-MM-dd") Date dateFrom, |
| 169 | @RequestParam(name = "dateTo") @DateTimeFormat(pattern = "yyyy-MM-dd") Date dateTo, |
| 170 | @RequestParam(name = "numBeds") int numBeds, |
| 171 | @RequestParam(name = "flexible") Boolean flexible) |
| 172 | { |
| 173 | return hotelManager.getRoomsAvailibilityByDateAndLocation(hotelLocation, dateFrom, dateTo, numBeds, flexible); |
| 174 | } |
| 175 | }}} |
| 176 | Контролерот ги прима потребните податоци и ја повикува функцијата од сервисот. |
| 177 | ---- |