Changes between Initial Version and Version 1 of AdditionalApplicationDevelopment


Ignore:
Timestamp:
07/26/23 20:07:49 (16 months ago)
Author:
201084
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • AdditionalApplicationDevelopment

    v1 v1  
     1=== Имплементирање на трансакции во апликацијата
     2
     3
     4Во неколку методи во контролерите се наоѓаа несигурни операции кои можеа да го загрозат интегритетот на базата. Имено постоеа повици за запишување во база едно по друго без никаква сигурност дека доколку вториот повик е неуспешен, првиот ќе се поништи, напротив со кодот којшто беше претходно поставен ќе се извршеше првото додавање, па доколку беше неуспешно второто, првото ќе останеше во база.
     5
     6Со користење на моќната анотација во Spring Boot @Transactional и воведување на нови методи во сервисите се осигураме дека нема ништо вакво да се случи.
     7
     8==== Пример 1
     9Кодот кој претходно изгледаше вака:
     10{{{#!java
     11@PostMapping("/addPart")
     12    public void addPart(@RequestParam String name, @RequestParam(required = false) String description,
     13                        @RequestParam Integer manufacturer, @RequestParam List<Car> cars,
     14                        @RequestParam List<Category> categories, @RequestParam Integer warehouse,
     15                        @RequestParam Integer quantity, @RequestParam Integer amount, HttpServletResponse response){
     16        Part newPart = new Part(name, description==null ? "" : description, partManufacturerRepository.findById(manufacturer).get(),
     17                categories, List.of(warehouseRepository.findById(warehouse).get()),cars);
     18        partRepository.save(newPart);
     19        priceService.save(new Price(amount, LocalDate.now(),newPart));
     20        partIsInStockInWarehouseRepository.save(new PartIsInStockInWarehouse(newPart.getId(),warehouse,quantity));
     21        for (Category c:categories
     22             ) {
     23            partIsFromCategoryRepository.save(new PartIsFromCategory(newPart.getId(),c.getId()));
     24        }
     25        for (Car car:cars){
     26            partIsAppropriateForCarRepository.save(new PartIsAppropriateForCar(newPart.getId(),car.getId()));
     27        }
     28    }
     29}}}
     30Сега изгледа вака :
     31{{{#!java
     32@PostMapping("/addPart")
     33    public void addPart(@RequestParam String name, @RequestParam(required = false) String description,
     34                        @RequestParam Integer manufacturer, @RequestParam List<Car> cars,
     35                        @RequestParam List<Category> categories, @RequestParam Integer warehouse,
     36                        @RequestParam Integer quantity, @RequestParam Integer amount, HttpServletResponse response){
     37        partService.addPart(name,description,manufacturer,cars,categories,warehouse,quantity,amount);
     38    }
     39}}}
     40Со соодветен метод во сервисот :
     41{{{#!java
     42@Transactional
     43    public void addPart(String name, String description, Integer manufacturer, List<Car> cars, List<Category> categories, Integer warehouse, Integer quantity, Integer amount) {
     44        Part newPart = new Part(name, description==null ? "" : description, partManufacturerRepository.findById(manufacturer).get(),
     45                categories, List.of(warehouseRepository.findById(warehouse).get()),cars);
     46        partRepository.save(newPart);
     47        priceService.save(new Price(amount, LocalDate.now(),newPart));
     48        partIsInStockInWarehouseRepository.save(new PartIsInStockInWarehouse(newPart.getId(),warehouse,quantity));
     49        for (Category c:categories
     50        ) {
     51            partIsFromCategoryRepository.save(new PartIsFromCategory(newPart.getId(),c.getId()));
     52        }
     53        for (Car car:cars){
     54            partIsAppropriateForCarRepository.save(new PartIsAppropriateForCar(newPart.getId(),car.getId()));
     55        }
     56    }
     57}}}
     58==== Пример 2
     59Кодот кој претходно изгледаше вака:
     60{{{#!java
     61@PostMapping("/addToOrder/{id}")
     62    public void addToOrder(@PathVariable Integer id,@RequestParam Integer quantity, HttpSession session, HttpServletResponse response, HttpServletRequest request){
     63        if(session.getAttribute("order")==null){
     64            User u = userService.findByUsername(request.getRemoteUser());
     65            Order newOrder = orderService.create((Client) u);
     66            session.setAttribute("order",newOrder);
     67        }
     68        Order order = (Order) session.getAttribute("order");
     69        orderContainsPartRepository.save(new OrderContainsPart(id,order.getOrderid(),quantity));
     70    }
     71}}}
     72Сега изгледа вака :
     73{{{#!java
     74@PostMapping("/addToOrder/{id}")
     75    public void addToOrder(@PathVariable Integer id,@RequestParam Integer quantity, HttpSession session, HttpServletResponse response, HttpServletRequest request){
     76        if(session.getAttribute("order")==null){
     77            User u = userService.findByUsername(request.getRemoteUser());
     78            Order newOrder = orderService.createOrderAndAddPartToOrder((Client) u, id, quantity);
     79            session.setAttribute("order",newOrder);
     80        } else {
     81            Order order = (Order) session.getAttribute("order");
     82            orderContainsPartRepository.save(new OrderContainsPart(id, order.getOrderid(), quantity));
     83        }
     84    }
     85}}}
     86Со соодветен метод во сервисот :
     87{{{#!java
     88    @Transactional
     89    public Order createOrderAndAddPartToOrder(Client user, Integer partId, Integer quantity) {
     90        Order order = orderRepository.save(new Order(user));
     91        orderContainsPartRepository.save(new OrderContainsPart(partId, order.getOrderid(), quantity));
     92        return order;
     93    }
     94}}}
     95==== Пример 3
     96Кодот кој претходно изгледаше вака:
     97{{{#!java
     98@PostMapping("/addCarSampleForUser")
     99    public void addCarSampleForUser(@RequestParam Integer vin, @RequestParam Integer year, @RequestParam Integer power,
     100                                    @RequestParam Integer displacement, @RequestParam String fuel,
     101                                    @RequestParam Integer km, @RequestParam Integer cartype,
     102                                    HttpServletRequest request, HttpServletResponse response){
     103        CarSample cs = new CarSample(vin,year,power,displacement,fuel,km, (Client) userService.findByUsername(request.getRemoteUser()),carService.findById(cartype));
     104        carSampleRepository.save(cs);
     105        serviceBookRepository.save(new ServiceBook(cs));
     106    }
     107}}}
     108Сега изгледа вака :
     109{{{#!java
     110@PostMapping("/addCarSampleForUser")
     111    public void addCarSampleForUser(@RequestParam Integer vin, @RequestParam Integer year, @RequestParam Integer power,
     112                                    @RequestParam Integer displacement, @RequestParam String fuel,
     113                                    @RequestParam Integer km, @RequestParam Integer cartype,
     114                                    HttpServletRequest request, HttpServletResponse response){
     115        userService.addCarSampleForUser(vin,year,power,displacement,fuel,km,cartype,request.getRemoteUser());
     116    }
     117}}}
     118Со соодветен метод во сервисот :
     119{{{#!java
     120    @Transactional
     121    public void addCarSampleForUser(Integer vin, Integer year, Integer power, Integer displacement, String fuel, Integer km, Integer cartype, String username) {
     122        CarSample cs = new CarSample(vin, year, power, displacement, fuel, km, (Client) this.findByUsername(username), carRepository.findById(cartype).get());
     123        carSampleRepository.save(cs);
     124        serviceBookRepository.save(new ServiceBook(cs));
     125    }
     126}}}
     127==== Пример 4
     128Кодот кој претходно изгледаше вака:
     129{{{#!java
     130@PostMapping("/addRepairShop")
     131    public void saveRepairShop(@RequestParam String name,@RequestParam String location,
     132                        @RequestParam String number,@RequestParam Integer carMId,
     133                        HttpServletResponse response) {
     134        RepairShop newRs = new RepairShop(name,location,number,
     135                List.of(carManufacturerRepository.findById(carMId).get()));
     136        repairShopRepository.save(newRs);
     137        rsForCmRepository.save(new RsForCm(newRs.getId(), carMId));
     138    }
     139}}}
     140Сега изгледа вака :
     141{{{#!java
     142@PostMapping("/addRepairShop")
     143    public void saveRepairShop(@RequestParam String name,@RequestParam String location,
     144                        @RequestParam String number,@RequestParam Integer carMId,
     145                        HttpServletResponse response) {
     146        repairShopService.save(name,location,number,carMId);
     147    }
     148}}}
     149Со соодветен метод во сервисот :
     150{{{#!java
     151    @Transactional
     152    public void save(String name, String location, String number, Integer carMId) {
     153        RepairShop newRs = new RepairShop(name,location,number,
     154                List.of(carManufacturerRepository.findById(carMId).get()));
     155        repairShopRepository.save(newRs);
     156        rsForCmRepository.save(new RsForCm(newRs.getId(), carMId));
     157    }
     158}}}
     159==== Пример 5
     160Кодот кој претходно изгледаше вака:
     161{{{#!java
     162@PostMapping("/myWarehouse/{pname}")
     163    public void addPartToWarehouse(@PathVariable String pname,@RequestParam Integer quantity, HttpServletRequest request, HttpServletResponse response){
     164        Integer pId = partRepository.findAllByName(pname).stream().findFirst().get().getId();
     165        Warehouseman whm = (Warehouseman) userService.findByUsername(request.getRemoteUser());
     166        Warehouse wh = whm.getWarehouse();
     167        Integer whId = wh.getId();
     168        PartIsInStockInWarehouseId tmp = new PartIsInStockInWarehouseId(pId,whId);
     169        PartIsInStockInWarehouse temp = partIsInStockInWarehouseRepository.findById(tmp).get();
     170        temp.setQuantity(temp.getQuantity()+quantity);
     171        partIsInStockInWarehouseRepository.save(temp);
     172    }
     173}}}
     174Сега изгледа вака :
     175{{{#!java
     176@PostMapping("/myWarehouse/{pname}")
     177    public void addPartToWarehouse(@PathVariable String pname,@RequestParam Integer quantity, HttpServletRequest request, HttpServletResponse response){
     178        Integer pId = partRepository.findAllByName(pname).stream().findFirst().get().getId();
     179        Warehouseman whm = (Warehouseman) userService.findByUsername(request.getRemoteUser());
     180        Warehouse wh = whm.getWarehouse();
     181        Integer whId = wh.getId();
     182        partService.addPartToWarehouse(pId,quantity,whId);
     183    }
     184}}}
     185Со соодветен метод во сервисот :
     186{{{#!java
     187    @Transactional
     188    public void addPartToWarehouse(Integer partId, Integer quantity, Integer warehouseId) {
     189        PartIsInStockInWarehouseId tmp = new PartIsInStockInWarehouseId(partId, warehouseId);
     190        PartIsInStockInWarehouse temp = partIsInStockInWarehouseRepository.findById(tmp).get();
     191        temp.setQuantity(temp.getQuantity() + quantity);
     192        partIsInStockInWarehouseRepository.save(temp);
     193    }
     194}}}