| 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 | ---- |