Changes between Version 4 and Version 5 of UseCaseImplementations


Ignore:
Timestamp:
02/03/24 22:51:29 (4 months ago)
Author:
211255
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • UseCaseImplementations

    v4 v5  
    138138== Корисник со основни привилегии
    139139=== Листа сместувања
     140[[Image(SearchHotel.png)]]
     141{{{#!java
     142public List<HotelRoomAvailable> getRoomsAvailibilityByDateAndLocation(String hotelLocation, Date dateFrom, Date dateTo, int numberOfBeds, Boolean flexible) {
     143        if(flexible)
     144        {
     145            Calendar calendar = Calendar.getInstance();
     146            Calendar calendar1 = Calendar.getInstance();
     147            calendar.setTime(dateTo);
     148            calendar1.setTime(dateFrom);
     149            return em.createQuery("SELECT hr FROM HotelRoomAvailable hr WHERE " +
     150                            "((hr.dateFrom <= :dateTo AND hr.dateTo >= :dateFrom) OR " +
     151                            "(hr.dateFrom <= :dateToMinus1 AND hr.dateTo >= :dateFromMinus1) OR " +
     152                            "(hr.dateFrom <= :dateToMinus2 AND hr.dateTo >= :dateFromMinus2) OR " +
     153                            "(hr.dateFrom <= :dateToMinus3 AND hr.dateTo >= :dateFromMinus3) OR " +
     154                            "(hr.dateFrom <= :dateToPlus1 AND hr.dateTo >= :dateFromPlus1) OR " +
     155                            "(hr.dateFrom <= :dateToPlus2 AND hr.dateTo >= :dateFromPlus2) OR " +
     156                            "(hr.dateFrom <= :dateToPlus3 AND hr.dateTo >= :dateFromPlus3)) " +
     157                            "AND hr.hotelRoom.hotel.hotelLocation LIKE :hotelLocation " +
     158                            "AND hr.hotelRoom.numOfBeds >= :numBeds")
     159                    .setParameter("hotelLocation", hotelLocation)
     160                    .setParameter("dateFrom", dateFrom)
     161                    .setParameter("dateTo", dateTo)
     162                    .setParameter("dateToMinus1", subtractDays(calendar, 1))
     163                    .setParameter("dateToMinus2", subtractDays(calendar, 2))
     164                    .setParameter("dateToMinus3", subtractDays(calendar, 3))
     165                    .setParameter("dateToPlus1", addDays(calendar, 1))
     166                    .setParameter("dateToPlus2", addDays(calendar, 2))
     167                    .setParameter("dateToPlus3", addDays(calendar, 3))
     168                    .setParameter("dateFromMinus1", subtractDays(calendar1, 1))
     169                    .setParameter("dateFromMinus2", subtractDays(calendar1, 2))
     170                    .setParameter("dateFromMinus3", subtractDays(calendar1, 3))
     171                    .setParameter("dateFromPlus1", addDays(calendar1, 1))
     172                    .setParameter("dateFromPlus2", addDays(calendar1, 2))
     173                    .setParameter("dateFromPlus3", addDays(calendar1, 3))
     174                    .setParameter("numBeds", numberOfBeds)
     175                    .getResultList();
     176        }
     177        else
     178        {
     179            return em.createQuery("SELECT hr FROM HotelRoomAvailable hr WHERE " +
     180                            "((hr.dateFrom <= :dateTo AND hr.dateTo >= :dateFrom)) " +
     181                            "AND hr.hotelRoom.hotel.hotelLocation LIKE :hotelLocation " +
     182                            "AND hr.hotelRoom.numOfBeds >= :numBeds")
     183                    .setParameter("hotelLocation", hotelLocation)
     184                    .setParameter("dateFrom", dateFrom)
     185                    .setParameter("dateTo", dateTo)
     186                    .setParameter("numBeds", numberOfBeds)
     187                    .getResultList();
     188        }
     189    }
     190}}}
     191Ова е кверито од кое се зимаат хотелите по криетриум, каде што првиот дел е додека флексибилноста од 3 дена има вредност true, па тогаш се листаат +/- (1,2,3) дена од бараните критериуми, а доколку има вредност false тогаш се листаат според точните дати кои се внесени.
    140192{{{#!java
    141193public List<HotelDto> getRoomsAvailibilityByDateAndLocation(String hotelLocation, Date dateFrom, Date dateTo, int numberOfBeds, Boolean flexible) {
     
    175227}}}
    176228Контролерот ги прима потребните податоци и ја повикува функцијата од сервисот.
    177 ----
    178 [[Image(SearchHotel.png)]]
    179229=== Листа ресторани
    180230[[Image(RestaurantSearch.png)]]
     231{{{#!java
     232public List<RestaurantsAvailible> getTablesByDateAndLocation(String restaurantLocation, Date hourFrom, Date hourTo, int noSeats){
     233        return em.createQuery("select hr from RestaurantsAvailible hr where hr.hourFrom <= :hourFrom and hr.hourTo >= :hourTo " +
     234                        "and hr.restaurantTable.restaurant.restaurantLocation LIKE :restaurantLocation and hr.restaurantTable.noSeats >= :noSeats")
     235                .setParameter("restaurantLocation", restaurantLocation)
     236                .setParameter("hourFrom", hourFrom)
     237                .setParameter("hourTo", hourTo)
     238                .setParameter("noSeats", noSeats)
     239                .getResultList();
     240    }
     241}}}
     242Ова е кверито кое ги листа сите маси во одредена локација, со одредено време на доаѓање, заминување и бројка колку луѓе ќе дојдат.
     243
     244{{{#!java
     245public List<RestaurantDto> getTablesByDateAndLocation(String restaurantLocation, Date date, String hourFrom, String hourTo, int noSeats) {
     246        Date dateFrom = date;
     247        Date dateTo = Date.from(date.toInstant());
     248        String[] splittedFrom = hourFrom.split(":");
     249        String[] splittedTo = hourTo.split(":");
     250        dateFrom.setHours(Integer.parseInt(splittedFrom[0]));
     251        dateFrom.setMinutes(Integer.parseInt(splittedFrom[1]));
     252        dateTo.setHours(Integer.parseInt(splittedTo[0]));
     253        dateTo.setMinutes(Integer.parseInt(splittedTo[1]));
     254       
     255        List<RestaurantsAvailible> restaurantsAvailibles = restaurantDao.getTablesByDateAndLocation(restaurantLocation, hourFrom, hourTo, noSeats);
     256        Map<Restaurant, List<RestaurantsAvailible>> tablesByRestaurants = restaurantsAvailibles.stream().collect(Collectors.groupingBy(x -> x.getRestaurantTable().getRestaurant()));
     257        List<RestaurantDto> restaurantsList = tablesByRestaurants.keySet().stream()
     258                .map(x -> new RestaurantDto(
     259                        x.getRestaurantID(),
     260                        x.getRestaurantName(),
     261                        x.getRestaurantLocation(),
     262                        x.getCousineType(),
     263                        x.getRestaurantDescription(),
     264                        x.getRestaurantEdbs(),
     265                        x.getMenus(),
     266                        tablesByRestaurants.get(x),
     267                        getReviewsForRestaurant(x.getRestaurantID()),
     268                        getReviewsForRestaurant(x.getRestaurantID()).stream().mapToDouble(Reviews::getNumStar).average().orElse(0),
     269                        getRestaurantImages(x.getRestaurantID()),
     270                        getMenuImagesByRestaurant(x.getRestaurantID())
     271                )).toList();
     272        return restaurantsList;
     273    }
     274}}}
     275Сервисот кој исто како и во хотели користи Dto притоа ги листа сите ресторани кои можат да го опслужат барањето од корисниците. Со тоа што времето од-до се интерпретира како текст, па тие ги средуваме во сервисот.
     276{{{#!java
     277@GetMapping(path = "/restaurant/search")
     278    public List<RestaurantDto> searchAvailableRestaurant(@RequestParam(name = "restaurantLocation") String restaurantLocation,
     279                                                         @RequestParam(name = "date") @DateTimeFormat(pattern = "yyyy-MM-dd") Date date,
     280                                                         @RequestParam(name = "hourFrom") String hourFrom,
     281                                                         @RequestParam(name = "hourTo") String hourTo,
     282                                                         @RequestParam(name = "numPeople") int noSeats) {
     283
     284        return restaurantManager.getTablesByDateAndLocation(restaurantLocation, date, dateFrom, dateTo, noSeats);
     285    }
     286}}}
     287Во контролерот се примаат податоци за локација, датум, време од до во форма на текст и број на седишта
    181288=== Листа превоз
    182289[[Image(TransportSearch.png)]]
    183 
    184 
     290{{{#!java
     291public List<TransportRoute> getTransportsAvailableByFilters(String fromL, String toL, Date date, int numPassengers) {
     292        return em.createQuery("select h from TransportRoute h where h.from = :froml and h.to = :tol and h.freeSpace >= :nump")
     293                .setParameter("froml", fromL)
     294                .setParameter("tol", toL)
     295                .setParameter("nump", numPassengers)
     296                .getResultList();
     297    }
     298}}}
     299Ова е кверито со кое се наоѓаат сите слобдни транспорти со одредена дата од-до одредено место и број на патници
     300{{{#!java
     301public List<TransportListingDto> getTransportsAvailableByFilters(String from, String to, Date date, int numPassengers) {
     302        List<TransportRoute> transportAvailable = transportDao.getTransportsAvailableByFilters(from, to, date, numPassengers);
     303        Map<TransportAvailible, List<TransportRoute>> transportsByTransporter = transportAvailable.stream().collect(Collectors.groupingBy(x -> x.getParentRoute()));
     304        List<TransportListingDto> transportList = transportsByTransporter.keySet().stream().toList().stream()
     305                .map(x -> new TransportListingDto(
     306                        x.getTransportAvailibleId(),
     307                        x.getFrom(),
     308                        x.getTo(),
     309                        x.getDate(),
     310                        x.getFreeSpace(),
     311                        x.getTime(),
     312                        transportsByTransporter.get(x).stream().mapToDouble(y -> y.getPrice()).min().getAsDouble(),
     313                        x.getRoutes(),
     314                        x.getTransport(),
     315                        getReviewsForTransport(x.getTransport().getTransportID()),
     316                        getReviewsForTransport(x.getTransport().getTransportID()).stream().mapToDouble(Reviews::getNumStar).average().orElse(0)
     317                )).collect(Collectors.toList());
     318        return transportList;
     319    }
     320}}}
     321Исто како и останатите имаме Dto и ги листаме сите слобдони транспорти со наведените критериуми. Притоа што доколку се внесе некој град кој е попатен во некоја рута се листа и таа со тоа што се зима главната рута на тој град.
     322{{{#!comment
     323Не знам дали вака види
     324}}}
     325{{{#!java
     326@GetMapping(path = "/transport/search")
     327    public List<TransportListingDto> searchAvailableTransport(@RequestParam(name = "from") String from,
     328                                                              @RequestParam(name = "to") String to,
     329                                                              @RequestParam(name = "date") @DateTimeFormat(pattern = "yyyy-MM-dd") Date date,
     330                                                              @RequestParam(name = "numPassengers") int numPassengers){
     331        return transportManager.getTransportsAvailableByFilters(from, to, date, numPassengers);
     332    }
     333}}}
     334Контролерот кој според влезните критериуми ги листаме сите слобдони транспорти за тие дестинации.
    185335== Најавен давател на услуги
    186336=== Регистра бизнис