From d97e9324a7f3cdadc655e0194ae579796461020c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=9A=D0=B0=D1=88=D0=B8=D0=BD=20=D0=9C=D0=B0=D0=BA=D1=81?= =?UTF-8?q?=D0=B8=D0=BC?= Date: Tue, 2 May 2023 13:57:02 +0400 Subject: [PATCH] =?UTF-8?q?=D0=A4=D1=83=D1=85,=20=D0=BD=D0=B0=D0=B4=D0=B5?= =?UTF-8?q?=D1=8E=D1=81=D1=8C,=20=D0=BA=D0=B0=D0=BA=20=D1=83=20*=D0=9A?= =?UTF-8?q?=D0=BE=D0=B5-=D0=BA=D0=BE=D0=B3=D0=BE*=20=D0=BD=D0=B5=20=D0=BF?= =?UTF-8?q?=D0=BE=D0=BF=D1=80=D0=BE=D1=81=D0=B8=D1=82=20=D0=B4=D0=BE=D0=BF?= =?UTF-8?q?.=D0=B7=D0=B0=D0=B4=D0=B0=D0=BD=D0=B8=D0=B5...?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- build.gradle | 7 + data.mv.db | Bin 40960 -> 49152 bytes data.trace.db | 4 + .../ru/ulsru/is/lab1/Lab1Application.java | 1 - .../ru/ulsru/is/lab1/WebConfiguration.java | 13 +- .../lab1/lab3/controller/BuyerController.java | 2 +- .../is/lab1/lab3/controller/BuyerDTO.java | 12 ++ .../lab3/controller/BuyerMVCController.java | 59 ++++++++ .../lab1/lab3/controller/CarController.java | 2 +- .../ulsru/is/lab1/lab3/controller/CarDTO.java | 17 +++ .../lab3/controller/CarMVCController.java | 119 ++++++++++++++++ .../lab1/lab3/controller/StoreController.java | 2 +- .../is/lab1/lab3/controller/StoreDTO.java | 8 +- .../lab3/controller/StoreMVCController.java | 68 +++++++++ .../is/lab1/lab3/service/BuyerService.java | 10 +- .../is/lab1/lab3/service/CarService.java | 25 +++- .../is/lab1/lab3/service/StoreService.java | 3 + .../is/lab1/util/error/AdviceController.java | 41 ------ .../util/validation/ValidationException.java | 18 +-- .../lab1/util/validation/ValidatorUtil.java | 60 ++++---- src/main/resources/application.properties | 2 +- src/main/resources/static/css/style.css | 12 ++ src/main/resources/templates/buyer-edit.html | 34 +++++ src/main/resources/templates/buyer-info.html | 35 +++++ src/main/resources/templates/buyer.html | 55 ++++++++ src/main/resources/templates/car-create.html | 27 ++++ src/main/resources/templates/car-set.html | 132 ++++++++++++++++++ src/main/resources/templates/car.html | 53 +++++++ src/main/resources/templates/default.html | 38 +++++ src/main/resources/templates/error.html | 9 ++ src/main/resources/templates/index.html | 9 ++ src/main/resources/templates/store-edit.html | 27 ++++ src/main/resources/templates/store.html | 57 ++++++++ 33 files changed, 859 insertions(+), 102 deletions(-) create mode 100644 data.trace.db create mode 100644 src/main/java/ru/ulsru/is/lab1/lab3/controller/BuyerMVCController.java create mode 100644 src/main/java/ru/ulsru/is/lab1/lab3/controller/CarMVCController.java create mode 100644 src/main/java/ru/ulsru/is/lab1/lab3/controller/StoreMVCController.java create mode 100644 src/main/resources/static/css/style.css create mode 100644 src/main/resources/templates/buyer-edit.html create mode 100644 src/main/resources/templates/buyer-info.html create mode 100644 src/main/resources/templates/buyer.html create mode 100644 src/main/resources/templates/car-create.html create mode 100644 src/main/resources/templates/car-set.html create mode 100644 src/main/resources/templates/car.html create mode 100644 src/main/resources/templates/default.html create mode 100644 src/main/resources/templates/error.html create mode 100644 src/main/resources/templates/index.html create mode 100644 src/main/resources/templates/store-edit.html create mode 100644 src/main/resources/templates/store.html diff --git a/build.gradle b/build.gradle index 3900d89..05e0582 100644 --- a/build.gradle +++ b/build.gradle @@ -17,7 +17,14 @@ dependencies { implementation 'org.springframework.boot:spring-boot-starter-data-jpa' implementation 'com.h2database:h2:2.1.210' implementation group: 'org.springdoc', name: 'springdoc-openapi-ui', version: '1.6.5' + implementation 'org.springframework.boot:spring-boot-starter-thymeleaf' + testImplementation 'org.springframework.boot:spring-boot-starter-test' + implementation 'org.hibernate.validator:hibernate-validator' + implementation 'nz.net.ultraq.thymeleaf:thymeleaf-layout-dialect' + implementation 'org.webjars:bootstrap:5.1.3' + implementation 'org.webjars:jquery:3.6.0' + implementation 'org.webjars:font-awesome:6.1.0' } tasks.named('test') { diff --git a/data.mv.db b/data.mv.db index 282eca2f828c2de17bc00fe34f60c83439f1e4b9..af896e9548ef9d08382b053773f0b30a4870c509 100644 GIT binary patch literal 49152 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 z zfAx2Q@O8-l2LZN_--hyEhx~tmH2m`a)+9UpKSzKg@PZ+5$o?Mt)4Pd3Js8!4P?pW7 zWI|6hGfMmS=*?cEH~WC>27S<*(LEjP|7QFYQjlqbEjoF`c=!&kYeA~Z zFSr}2bDl6RJVOn10=k&W{YMVe$jOUBq(VljBpjT~{g;?%eo-;uLhiF6(EKhYnqTfW zhe7kZ7;An%6}R(!H9v=GelFMiAdbXWNAo-Ns??`U*UQp>nEH>v7L-!<%(Sw15?;_D zjo(e~6$w=+rH=wvCOE0WNAFLHXJr*Wnxlb=7VB$7;bS>YqzbYGD5`NnPb-OC6h2Vo zgwiKiffK6Nu;L~xe~cA3VIxYzegpoZ->rW>l8!UDOu>T)g zf5+?pR6M;RC!H~sM-lEqw?&QEj**8gMmF;n1tIL?Oy z@*d~IaXwr;4LBdJlP=5oa7Ph*IUkPm;W!_zUdynMI3KR(0*UkCW`@6Ve7GTd;(v0& zg_xeDFq53lc8up}oBI(n%dpVw2*^U!Q&Tbs5DA^|oFJ%t%9a#S zoWRGNi0v~QGt#Nl%*YHT8fs)tN$u+aqdKLiO(`jLETv}!DIpa(Hg_3RMB?q9z>3sv z<}Qk?$&fWNz=Hoa{32jeY^?4;8VQgF77-lgI|y!yj3RRvX;OCr1SBMyAp9nhp!_C6 zwTlwKZ=y&Ma~G@Q$-r--ImFyWb8IK#H?bUS?qUgS?xG1|?xJ;wxr;RoB`~i^C;_ht zenXXu9lY9Zr2P)ceJ4|y^Zy6)%K6gy{~F@_|4wg)0cqF6od4g~yP+$Loc~XqV;5JR zF8_b%DE|LHcJTi{Px$|DPyc8Bgyj6S>CetQEgpV;dGhkv+*RQW=n=C>&PN*s|5x#U z9sf7*e-jrnHL}sk#vmJ-XOWamHV&?4;s4~2jc|^wkPYd>#RY;hJI=jec557O?(X=( z!&zjcQ;OV?QaV!F7_JA7>`_34b1bpu?8W=w;XZ|r@9qUV&3$L*J_Iv?ukPF@Ra=g` z9n8``NCMG5Xi6nL(iH8Hq||g9Mmk}i$9=Yfdwbw?5Asal^udn5ySn@SEb2@uok`V< z3YQrg^dmxy>aUhQ2p*NA@HkOaoYDhlyUc>!U@*&Dc)aE8c;CW}62WEC292YG+W_4J zhxU0B7Xw5==))7ZTU%zGu1qVQ(KbS#PR%z3D=5w#1)G4gZ|2+UeKd%3fyCezdspi-vf~j#um%c~kO5 z4q$%wCA^l%3u|eJ9OwFahrBPqTZZGT-y!lF`N&>ke@~gt0KceBkNSdE-_1FBe`B~l0w@RwIvfva7p1__SNG0{vpR%O7@5 z!rCtc;>Es2L=`69=pEJ?@S=yGVw%`Fi6m@Ui@eck0vtZ$grjMZH#*62P3)&m6JFAf z0?;x{{Jcb7R2dyX@2Sw4mMjOpMLKD-{-3)PyM{`250+zWn~cG{z1xc|9|lR7hWIv z`@u!I`P0!J;^e4;!!hBS+v2D{9nnUCq;!YE@T#j%|8O)y4%~3@Sx&4bp zIzB3xbjrANwEYX)YKT1q*ffbj<#gI=J|>ZaA!4w2=Q}uJu(eX54s{m3>H6K#DV9;zl1g*VzBtvP#yx$iH{)-HX!lG{|Z}Z>Qa+^ z2!+T0C*Onl*@^$p`Tv~%kKG11|DU-xbfIHYmUx=Y#g%lfq~9c;7cO)D|1 containerCustomizer() { -// return container -> { -// container.addErrorPages(new ErrorPage(HttpStatus.NOT_FOUND, "/notFound")); -// }; -// } } diff --git a/src/main/java/ru/ulsru/is/lab1/lab3/controller/BuyerController.java b/src/main/java/ru/ulsru/is/lab1/lab3/controller/BuyerController.java index af8296d..357f9a9 100644 --- a/src/main/java/ru/ulsru/is/lab1/lab3/controller/BuyerController.java +++ b/src/main/java/ru/ulsru/is/lab1/lab3/controller/BuyerController.java @@ -7,7 +7,7 @@ import javax.validation.Valid; import java.util.List; @RestController -@RequestMapping("/buyer") +@RequestMapping("(WebConfiguration.REST_API + /buyer") public class BuyerController { private final BuyerService buyerService; public BuyerController(BuyerService buyerService){ diff --git a/src/main/java/ru/ulsru/is/lab1/lab3/controller/BuyerDTO.java b/src/main/java/ru/ulsru/is/lab1/lab3/controller/BuyerDTO.java index db27b35..057ffdf 100644 --- a/src/main/java/ru/ulsru/is/lab1/lab3/controller/BuyerDTO.java +++ b/src/main/java/ru/ulsru/is/lab1/lab3/controller/BuyerDTO.java @@ -1,10 +1,15 @@ package ru.ulsru.is.lab1.lab3.controller; +import com.fasterxml.jackson.annotation.JsonProperty; import ru.ulsru.is.lab1.lab3.model.Buyer; +import javax.validation.constraints.NotBlank; + public class BuyerDTO { private long id; + @NotBlank(message = "buyerFirstName can't be null or empty") private String buyerFirstName; + @NotBlank(message = "buyerSecondName can't be null or empty") private String buyerSecondName; public BuyerDTO(Buyer buyer){ this.id =buyer.getId(); @@ -13,13 +18,20 @@ public class BuyerDTO { } public BuyerDTO(){ } + @JsonProperty(access = JsonProperty.Access.READ_ONLY) public long getId() { return id; } public String getBuyerFirstName(){ return buyerFirstName; } + public void setBuyerFirstName(String buyerFirstName){ + this.buyerFirstName = buyerFirstName; + } public String getBuyerSecondName(){ return buyerSecondName; } + public void setBuyerSecondName(String buyerSecondName){ + this.buyerSecondName = buyerSecondName; + } } diff --git a/src/main/java/ru/ulsru/is/lab1/lab3/controller/BuyerMVCController.java b/src/main/java/ru/ulsru/is/lab1/lab3/controller/BuyerMVCController.java new file mode 100644 index 0000000..af2697d --- /dev/null +++ b/src/main/java/ru/ulsru/is/lab1/lab3/controller/BuyerMVCController.java @@ -0,0 +1,59 @@ +package ru.ulsru.is.lab1.lab3.controller; + +import org.springframework.stereotype.Controller; +import org.springframework.ui.Model; +import org.springframework.validation.BindingResult; +import org.springframework.web.bind.annotation.*; +import ru.ulsru.is.lab1.lab3.service.BuyerService; + +import javax.validation.Valid; + +@Controller +@RequestMapping("/buyer") +public class BuyerMVCController { + private final BuyerService buyerService; + public BuyerMVCController(BuyerService buyerService){ + this.buyerService = buyerService; + } + @GetMapping + public String getBuyers(Model model){ + model.addAttribute("buyers", + buyerService.findAllBuyers().stream() + .map(BuyerDTO::new) + .toList()); + return "buyer"; + } + + @GetMapping(value = {"/edit", "/edit/{id}"}) + public String editBuyer(@PathVariable(required = false) Long id, + Model model) { + if (id == null || id <= 0) { + model.addAttribute("BuyerDTO", new BuyerDTO()); + } else { + model.addAttribute("buyerId", id); + model.addAttribute("BuyerDTO", new BuyerDTO(buyerService.findBuyer(id))); + } + return "buyer-edit"; + } + @PostMapping(value = {"", "/{id}"}) + public String saveBuyer(@PathVariable(required = false) Long id, + @ModelAttribute @Valid BuyerDTO buyerDTO, + BindingResult bindingResult, + Model model) { + if (bindingResult.hasErrors()) { + model.addAttribute("errors", bindingResult.getAllErrors()); + return "buyer-edit"; + } + if (id == null || id <= 0) { + buyerService.addBuyer(buyerDTO); + } else { + buyerService.updateBuyer(id, buyerDTO); + } + return "redirect:/buyer"; + } + @PostMapping("/delete/{id}") + public String deleteBuyer(@PathVariable Long id) { + buyerService.deleteBuyer(id); + return "redirect:/buyer"; + } +} diff --git a/src/main/java/ru/ulsru/is/lab1/lab3/controller/CarController.java b/src/main/java/ru/ulsru/is/lab1/lab3/controller/CarController.java index 4546113..5a7ff7a 100644 --- a/src/main/java/ru/ulsru/is/lab1/lab3/controller/CarController.java +++ b/src/main/java/ru/ulsru/is/lab1/lab3/controller/CarController.java @@ -7,7 +7,7 @@ import javax.validation.Valid; import java.util.List; @RestController -@RequestMapping("/car") +@RequestMapping("WebConfiguration.REST_API + /car") public class CarController { private final CarService carService; public CarController(CarService carService){ diff --git a/src/main/java/ru/ulsru/is/lab1/lab3/controller/CarDTO.java b/src/main/java/ru/ulsru/is/lab1/lab3/controller/CarDTO.java index 63a6bd3..1b9a890 100644 --- a/src/main/java/ru/ulsru/is/lab1/lab3/controller/CarDTO.java +++ b/src/main/java/ru/ulsru/is/lab1/lab3/controller/CarDTO.java @@ -1,11 +1,14 @@ package ru.ulsru.is.lab1.lab3.controller; +import com.fasterxml.jackson.annotation.JsonProperty; import ru.ulsru.is.lab1.lab3.model.Car; +import javax.validation.constraints.NotBlank; import java.util.List; public class CarDTO { private long id; + @NotBlank(message = "carName can't be null or empty") private String carName; private List buyerDTOList; private List storeDTOList; @@ -23,6 +26,7 @@ public class CarDTO { .toList(); } public CarDTO(){} + @JsonProperty(access = JsonProperty.Access.READ_ONLY) public long getId() { return id; } @@ -32,6 +36,19 @@ public class CarDTO { public List getBuyerDTOList(){ return buyerDTOList; } + + public void setCarName(String carName) { + this.carName = carName; + } + + public void setBuyerDTOList(List buyerDTOList) { + this.buyerDTOList = buyerDTOList; + } + + public void setStoreDTOList(List storeDTOList) { + this.storeDTOList = storeDTOList; + } + public List getStoreDTOList(){ return storeDTOList; } diff --git a/src/main/java/ru/ulsru/is/lab1/lab3/controller/CarMVCController.java b/src/main/java/ru/ulsru/is/lab1/lab3/controller/CarMVCController.java new file mode 100644 index 0000000..fa93f1c --- /dev/null +++ b/src/main/java/ru/ulsru/is/lab1/lab3/controller/CarMVCController.java @@ -0,0 +1,119 @@ +package ru.ulsru.is.lab1.lab3.controller; + +import org.springframework.stereotype.Controller; +import org.springframework.ui.Model; +import org.springframework.validation.BindingResult; +import org.springframework.web.bind.annotation.*; +import ru.ulsru.is.lab1.lab3.service.StoreService; +import ru.ulsru.is.lab1.lab3.service.BuyerService; +import ru.ulsru.is.lab1.lab3.service.CarService; + +import javax.validation.Valid; +import java.util.List; + +@Controller +@RequestMapping("/car") +public class CarMVCController { + private final CarService carService; + private final BuyerService buyerService; + private final StoreService storeService; + public CarMVCController(CarService carService, BuyerService buyerService, StoreService storeService){ + this.carService = carService; + this.buyerService = buyerService; + this.storeService = storeService; + } + @GetMapping + public String getCars(Model model){ + model.addAttribute("cars", + carService.findAllCars().stream() + .map(CarDTO::new) + .toList()); + return "car"; + } + @GetMapping(value = {"/edit", "/edit/{id}"}) + public String editCar(@PathVariable(required = false) Long id, + Model model) { + if (id == null || id <= 0) { + List buyers = buyerService.findAllBuyers().stream() + .map(BuyerDTO::new).toList(); + List stores = storeService.findAllStores().stream() + .map(StoreDTO::new).toList(); + model.addAttribute("CarDTO", new CarDTO()); + model.addAttribute("buyers", buyers); + model.addAttribute("stores", stores); + return "car-create"; + } else { + String name = carService.findCar(id).getCarName(); + List buyers = buyerService.findAllBuyers().stream() + .map(BuyerDTO::new).toList(); + List carBuyers = carService + .findCar(id) + .getBuyers() + .stream() + .map(BuyerDTO::new) + .toList(); + List stores = storeService.findAllStores().stream() + .map(StoreDTO::new).toList(); + List carStores = carService + .findCar(id) + .getStores() + .stream() + .map(StoreDTO::new) + .toList(); + model.addAttribute("name", name); + model.addAttribute("carId", id); + model.addAttribute("carBuyers", carBuyers); + model.addAttribute("buyers", buyers); + model.addAttribute("carStores", carStores); + model.addAttribute("stores", stores); + model.addAttribute("CarDTO", new CarDTO(carService.findCar(id))); + } + return "car-set"; + } + @PostMapping(value = {"/"}) + public String saveCar(@ModelAttribute @Valid CarDTO carDTO, + BindingResult bindingResult, + Model model) { + if (bindingResult.hasErrors()) { + model.addAttribute("errors", bindingResult.getAllErrors()); + return "car-create"; + } + carService.addCar(carDTO); +// } else { +// carService.updateCar(id, carDTO); +// } + return "redirect:/car"; + } + @PostMapping(value = {"/{id}"}) + public String editCar(@PathVariable Long id, + @RequestParam("PW") String PW, + @RequestParam("wpName") String name, + @RequestParam(value="idPW", required = false) Long idPW, + @RequestParam(value = "delete", required = false) boolean del, + Model model) { + if(PW.equals("N")){ + carService.findCar(id).setCarName(name); + carService.updateCar(id, new CarDTO(carService.findCar(id))); + } + if (PW.equals("W")){ + if (del == true) { + carService.deleteBuyer(id, idPW); + } else { + carService.addBuyer(id, idPW); + } + } + else if(PW.equals("P")){ + if (del == true) { + carService.deleteStore(id, idPW); + } else { + carService.addStore(id, idPW); + } + } + return "redirect:/car/edit/" + id; + } + @PostMapping("/delete/{id}") + public String deleteCar(@PathVariable Long id) { + carService.deleteCar(id); + return "redirect:/car"; + } +} diff --git a/src/main/java/ru/ulsru/is/lab1/lab3/controller/StoreController.java b/src/main/java/ru/ulsru/is/lab1/lab3/controller/StoreController.java index 881c654..b8b63c6 100644 --- a/src/main/java/ru/ulsru/is/lab1/lab3/controller/StoreController.java +++ b/src/main/java/ru/ulsru/is/lab1/lab3/controller/StoreController.java @@ -7,7 +7,7 @@ import javax.validation.Valid; import java.util.List; @RestController -@RequestMapping("/store") +@RequestMapping("WebConfiguration.REST_API + /store") public class StoreController { private final StoreService storeService; public StoreController(StoreService storeService){ diff --git a/src/main/java/ru/ulsru/is/lab1/lab3/controller/StoreDTO.java b/src/main/java/ru/ulsru/is/lab1/lab3/controller/StoreDTO.java index 020041c..91656e6 100644 --- a/src/main/java/ru/ulsru/is/lab1/lab3/controller/StoreDTO.java +++ b/src/main/java/ru/ulsru/is/lab1/lab3/controller/StoreDTO.java @@ -1,11 +1,14 @@ package ru.ulsru.is.lab1.lab3.controller; +import com.fasterxml.jackson.annotation.JsonProperty; import ru.ulsru.is.lab1.lab3.model.Store; +import javax.validation.constraints.NotBlank; import java.util.List; public class StoreDTO { private long id; + @NotBlank(message = "storeName can't be null or empty") private String storeName; private List carDTOList; public StoreDTO(Store store){ @@ -19,13 +22,16 @@ public class StoreDTO { } public StoreDTO() { } - + @JsonProperty(access = JsonProperty.Access.READ_ONLY) public long getId() { return id; } public String getStoreName() { return storeName; } + public void setStoreName(String storeName){ + this.storeName = storeName; + } public List getCarDTOList(){ return carDTOList; diff --git a/src/main/java/ru/ulsru/is/lab1/lab3/controller/StoreMVCController.java b/src/main/java/ru/ulsru/is/lab1/lab3/controller/StoreMVCController.java new file mode 100644 index 0000000..8b25830 --- /dev/null +++ b/src/main/java/ru/ulsru/is/lab1/lab3/controller/StoreMVCController.java @@ -0,0 +1,68 @@ +package ru.ulsru.is.lab1.lab3.controller; + +import org.springframework.stereotype.Controller; +import org.springframework.ui.Model; +import org.springframework.validation.BindingResult; +import org.springframework.web.bind.annotation.*; +import ru.ulsru.is.lab1.lab3.service.StoreService; + +import javax.validation.Valid; + +@Controller +@RequestMapping("/store") +public class StoreMVCController { + private final StoreService storeService; + public StoreMVCController(StoreService storeService){ + this.storeService = storeService; + } + @GetMapping + public String getStores(Model model){ + model.addAttribute("stores", + storeService.findAllStores().stream() + .map(StoreDTO::new) + .toList()); + return "store"; + } + @GetMapping("/info/{id}") + public String findBuyersOnWorkplace(@PathVariable(required = false) Long id, Model model){ + model.addAttribute("cathegory", "Кто производит " + storeService.findStore(id).getStoreName()); + model.addAttribute("buyers", storeService.findAllBuyersProducedStore(id) + .stream() + .map(BuyerDTO::new) + .toList()); + model.addAttribute("page", "store"); + return "buyer-info"; + } + @GetMapping(value = {"/edit", "/edit/{id}"}) + public String editStore(@PathVariable(required = false) Long id, + Model model) { + if (id == null || id <= 0) { + model.addAttribute("StoreDTO", new StoreDTO()); + } else { + model.addAttribute("storeId", id); + model.addAttribute("StoreDTO", new StoreDTO(storeService.findStore(id))); + } + return "store-edit"; + } + @PostMapping(value = {"", "/{id}"}) + public String saveStore(@PathVariable(required = false) Long id, + @ModelAttribute @Valid StoreDTO storeDTO, + BindingResult bindingResult, + Model model) { + if (bindingResult.hasErrors()) { + model.addAttribute("errors", bindingResult.getAllErrors()); + return "store-edit"; + } + if (id == null || id <= 0) { + storeService.addStore(storeDTO); + } else { + storeService.updateStore(id, storeDTO); + } + return "redirect:/store"; + } + @PostMapping("/delete/{id}") + public String deleteStore(@PathVariable Long id) { + storeService.deleteStore(id); + return "redirect:/store"; + } +} diff --git a/src/main/java/ru/ulsru/is/lab1/lab3/service/BuyerService.java b/src/main/java/ru/ulsru/is/lab1/lab3/service/BuyerService.java index da86cc1..ea41135 100644 --- a/src/main/java/ru/ulsru/is/lab1/lab3/service/BuyerService.java +++ b/src/main/java/ru/ulsru/is/lab1/lab3/service/BuyerService.java @@ -6,6 +6,7 @@ import ru.ulsru.is.lab1.lab3.Respository.IBuyerRespository; import ru.ulsru.is.lab1.lab3.controller.BuyerDTO; import ru.ulsru.is.lab1.lab3.controller.CarDTO; import ru.ulsru.is.lab1.lab3.model.Buyer; +import ru.ulsru.is.lab1.util.validation.ValidatorUtil; import java.util.List; import java.util.Optional; @@ -13,12 +14,15 @@ import java.util.Optional; @Service public class BuyerService { private final IBuyerRespository buyerRespository; - public BuyerService(IBuyerRespository buyerRespositroy){ + private final ValidatorUtil validatorUtil; + public BuyerService(IBuyerRespository buyerRespositroy, ValidatorUtil validatorUtil){ this.buyerRespository = buyerRespositroy; + this.validatorUtil = validatorUtil; } @Transactional public Buyer addBuyer(BuyerDTO buyerDTO) { final Buyer buyer = new Buyer(buyerDTO.getBuyerFirstName(), buyerDTO.getBuyerSecondName()); + validatorUtil.validate(buyer); buyerRespository.save(buyer); return buyer; } @@ -29,6 +33,9 @@ public class BuyerService { } @Transactional(readOnly = true) public List findAllBuyerByid(CarDTO carDTO) { + if(carDTO.getBuyerDTOList() == null){ + return null; + } return buyerRespository .findAllById(carDTO .getBuyerDTOList() @@ -48,6 +55,7 @@ public class BuyerService { final Buyer currentBuyer = findBuyer(id); currentBuyer.setBuyerFirstName(buyer.getBuyerFirstName()); currentBuyer.setBuyerSecondName(buyer.getBuyerSecondName()); + validatorUtil.validate(currentBuyer); buyerRespository.save(currentBuyer); return currentBuyer; } diff --git a/src/main/java/ru/ulsru/is/lab1/lab3/service/CarService.java b/src/main/java/ru/ulsru/is/lab1/lab3/service/CarService.java index 84f1d3c..4e095a9 100644 --- a/src/main/java/ru/ulsru/is/lab1/lab3/service/CarService.java +++ b/src/main/java/ru/ulsru/is/lab1/lab3/service/CarService.java @@ -37,15 +37,28 @@ public class CarService { return car; } @Transactional - public Car addBuyer(CarDTO carDTO, List buyers){ - final Car currentCar = findCar(carDTO.getId()); - currentCar.setBuyers(buyers); + public Car addBuyer(Long id, Long idW){ + final Car currentCar = findCar(id); + currentCar.addBuyer(buyerService.findBuyer(idW)); return currentCar; } @Transactional - public Car addStore(CarDTO carDTO, List stores){ - final Car currentCar = findCar(carDTO.getId()); - currentCar.setStores(stores); + public Car deleteBuyer(Long id, Long idW){ + final Car currentCar = findCar(id); + currentCar.removeBuyer(buyerService.findBuyer(idW)); + return currentCar; + } + @Transactional + public Car addStore(Long id, Long idP) { + final Car currentCar = findCar(id); + currentCar.addStore(storeService.findStore(idP)); + return currentCar; + } + + @Transactional + public Car deleteStore(Long id, Long idP){ + final Car currentCar = findCar(id); + currentCar.removeStore(storeService.findStore(idP)); return currentCar; } @Transactional(readOnly = true) diff --git a/src/main/java/ru/ulsru/is/lab1/lab3/service/StoreService.java b/src/main/java/ru/ulsru/is/lab1/lab3/service/StoreService.java index cd0818b..7d21b98 100644 --- a/src/main/java/ru/ulsru/is/lab1/lab3/service/StoreService.java +++ b/src/main/java/ru/ulsru/is/lab1/lab3/service/StoreService.java @@ -36,6 +36,9 @@ public class StoreService { } @Transactional(readOnly = true) public List findAllStoresById(CarDTO carDTO) { + if(carDTO.getStoreDTOList() == null){ + return null; + } return storeRespository .findAllById(carDTO .getStoreDTOList() diff --git a/src/main/java/ru/ulsru/is/lab1/util/error/AdviceController.java b/src/main/java/ru/ulsru/is/lab1/util/error/AdviceController.java index 5b920eb..e69de29 100644 --- a/src/main/java/ru/ulsru/is/lab1/util/error/AdviceController.java +++ b/src/main/java/ru/ulsru/is/lab1/util/error/AdviceController.java @@ -1,41 +0,0 @@ -//package ru.ulsru.is.lab1.util.error; -// -//import org.springframework.context.support.DefaultMessageSourceResolvable; -//import org.springframework.http.HttpStatus; -//import org.springframework.http.ResponseEntity; -//import org.springframework.web.bind.MethodArgumentNotValidException; -//import org.springframework.web.bind.annotation.ControllerAdvice; -//import org.springframework.web.bind.annotation.ExceptionHandler; -//import ru.ulsru.is.lab1.lab3.service.ProductNotFoundException; -//import ru.ulsru.is.lab1.lab3.service.WorkerNotFoundException; -//import ru.ulsru.is.lab1.lab3.service.WorkplaceNotFoundException; -//import ru.ulsru.is.lab1.util.validation.ValidationException; -//import java.util.stream.Collectors; -// -// @ControllerAdvice -// public class AdviceController { -// @ExceptionHandler({ -// WorkerNotFoundException.class, -// ProductNotFoundException.class, -// WorkplaceNotFoundException.class, -// ValidationException.class -// }) -// public ResponseEntity handleException(Throwable e) { -// return new ResponseEntity<>(e.getMessage(), HttpStatus.BAD_REQUEST); -// } -// -// @ExceptionHandler(MethodArgumentNotValidException.class) -// public ResponseEntity handleBindException(MethodArgumentNotValidException e) { -// final ValidationException validationException = new ValidationException( -// e.getBindingResult().getAllErrors().stream() -// .map(DefaultMessageSourceResolvable::getDefaultMessage) -// .collect(Collectors.toSet())); -// return handleException(validationException); -// } -// -// @ExceptionHandler(Exception.class) -// public ResponseEntity handleUnknownException(Throwable e) { -// e.printStackTrace(); -// return new ResponseEntity<>(e.getMessage(), HttpStatus.INTERNAL_SERVER_ERROR); -// } -// } diff --git a/src/main/java/ru/ulsru/is/lab1/util/validation/ValidationException.java b/src/main/java/ru/ulsru/is/lab1/util/validation/ValidationException.java index 6cd6d02..f5ef7e3 100644 --- a/src/main/java/ru/ulsru/is/lab1/util/validation/ValidationException.java +++ b/src/main/java/ru/ulsru/is/lab1/util/validation/ValidationException.java @@ -1,9 +1,9 @@ -//package ru.ulsru.is.lab1.util.validation; -// -//import java.util.Set; -// -//public class ValidationException extends RuntimeException { -// public ValidationException(Set errors) { -// super(String.join("\n", errors)); -// } -//} +package ru.ulsru.is.lab1.util.validation; + +import java.util.Set; + +public class ValidationException extends RuntimeException { + public ValidationException(Set errors) { + super(String.join("\n", errors)); + } +} \ No newline at end of file diff --git a/src/main/java/ru/ulsru/is/lab1/util/validation/ValidatorUtil.java b/src/main/java/ru/ulsru/is/lab1/util/validation/ValidatorUtil.java index d39229f..735bb53 100644 --- a/src/main/java/ru/ulsru/is/lab1/util/validation/ValidatorUtil.java +++ b/src/main/java/ru/ulsru/is/lab1/util/validation/ValidatorUtil.java @@ -1,30 +1,30 @@ -//package ru.ulsru.is.lab1.util.validation; -// -//import org.springframework.stereotype.Component; -// -//import javax.validation.ConstraintViolation; -//import javax.validation.Validation; -//import javax.validation.Validator; -//import javax.validation.ValidatorFactory; -//import java.util.Set; -//import java.util.stream.Collectors; -// -//@Component -//public class ValidatorUtil { -// private final Validator validator; -// -// public ValidatorUtil() { -// try (ValidatorFactory factory = Validation.buildDefaultValidatorFactory()) { -// this.validator = factory.getValidator(); -// } -// } -// -// public void validate(T object) { -// final Set> errors = validator.validate(object); -// if (!errors.isEmpty()) { -// throw new ValidationException(errors.stream() -// .map(ConstraintViolation::getMessage) -// .collect(Collectors.toSet())); -// } -// } -//} +package ru.ulsru.is.lab1.util.validation; + +import org.springframework.stereotype.Component; + +import javax.validation.ConstraintViolation; +import javax.validation.Validation; +import javax.validation.Validator; +import javax.validation.ValidatorFactory; +import java.util.Set; +import java.util.stream.Collectors; + +@Component +public class ValidatorUtil { + private final Validator validator; + + public ValidatorUtil() { + try (ValidatorFactory factory = Validation.buildDefaultValidatorFactory()) { + this.validator = factory.getValidator(); + } + } + + public void validate(T object) { + final Set> errors = validator.validate(object); + if (!errors.isEmpty()) { + throw new ValidationException(errors.stream() + .map(ConstraintViolation::getMessage) + .collect(Collectors.toSet())); + } + } +} \ No newline at end of file diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index 8c7476e..62a4c3f 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -1,6 +1,6 @@ spring.main.banner-mode=off server.port=8080 -server.tomcat.relaxed-query-chars=|,{,},[,] +#server.tomcat.relaxed-query-chars=|,{,},[,] spring.datasource.url=jdbc:h2:file:./data spring.datasource.driverClassName=org.h2.Driver spring.datasource.username=sa diff --git a/src/main/resources/static/css/style.css b/src/main/resources/static/css/style.css new file mode 100644 index 0000000..6ff5f08 --- /dev/null +++ b/src/main/resources/static/css/style.css @@ -0,0 +1,12 @@ + +.footer { + position: fixed; + left: 0; + bottom: 0; + width: 100%; + background-color: #f5f5f5; + color: #333; + text-align: center; + padding: 10px; +} + diff --git a/src/main/resources/templates/buyer-edit.html b/src/main/resources/templates/buyer-edit.html new file mode 100644 index 0000000..2848fd5 --- /dev/null +++ b/src/main/resources/templates/buyer-edit.html @@ -0,0 +1,34 @@ + + + + + +
+
+
+
+ + +
+
+ + +
+
+ + + Назад + +
+
+
+ + \ No newline at end of file diff --git a/src/main/resources/templates/buyer-info.html b/src/main/resources/templates/buyer-info.html new file mode 100644 index 0000000..d9deb02 --- /dev/null +++ b/src/main/resources/templates/buyer-info.html @@ -0,0 +1,35 @@ + + + + + +
+
+
+ + + + + + + + + + + + + + + + + +
#IDИмяФамилия
+
+ + Назад + +
+ + \ No newline at end of file diff --git a/src/main/resources/templates/buyer.html b/src/main/resources/templates/buyer.html new file mode 100644 index 0000000..c64ef36 --- /dev/null +++ b/src/main/resources/templates/buyer.html @@ -0,0 +1,55 @@ + + + + + +
+ +
+ + + + + + + + + + + + + + + + + + +
#IDИмяФамилия
+
+ + Изменить + + +
+
+ +
+
+
+
+ + \ No newline at end of file diff --git a/src/main/resources/templates/car-create.html b/src/main/resources/templates/car-create.html new file mode 100644 index 0000000..4a00d22 --- /dev/null +++ b/src/main/resources/templates/car-create.html @@ -0,0 +1,27 @@ + + + + + +
+
+
+
+ + +
+
+ + + Назад + +
+
+
+ + diff --git a/src/main/resources/templates/car-set.html b/src/main/resources/templates/car-set.html new file mode 100644 index 0000000..bc107e5 --- /dev/null +++ b/src/main/resources/templates/car-set.html @@ -0,0 +1,132 @@ + + + + + +
+
+
+
+ + + +
+ +
+ +
+
+
+
+
+ + +
+ + +
+
+ +
+
+ + + + + + + + + + + + + + + + + +
idИмяФамилия
+
+ + + +
+
+ +
+
+
+
+
+ + +
+ + +
+
+ + +
+
+ + + + + + + + + + + + + + + + +
idНазваниеЦена
+
+ + + +
+
+ +
+
+
+
+ +
+ + \ No newline at end of file diff --git a/src/main/resources/templates/car.html b/src/main/resources/templates/car.html new file mode 100644 index 0000000..e114859 --- /dev/null +++ b/src/main/resources/templates/car.html @@ -0,0 +1,53 @@ + + + + + +
+ +
+ + + + + + + + + + + + + + +
#IDНавание
+ + + +
+ + Изменить + + +
+
+ +
+
+
+
+ + \ No newline at end of file diff --git a/src/main/resources/templates/default.html b/src/main/resources/templates/default.html new file mode 100644 index 0000000..fe5959a --- /dev/null +++ b/src/main/resources/templates/default.html @@ -0,0 +1,38 @@ + + + + + Кашин Максим ПИбд-22 + + + + + + + + + +
+
+
+
+
+ Кашин Максим ПИбд-22 +
+ + \ No newline at end of file diff --git a/src/main/resources/templates/error.html b/src/main/resources/templates/error.html new file mode 100644 index 0000000..429c06e --- /dev/null +++ b/src/main/resources/templates/error.html @@ -0,0 +1,9 @@ + + + + + + + \ No newline at end of file diff --git a/src/main/resources/templates/index.html b/src/main/resources/templates/index.html new file mode 100644 index 0000000..7ba7ccd --- /dev/null +++ b/src/main/resources/templates/index.html @@ -0,0 +1,9 @@ + + + + + + + \ No newline at end of file diff --git a/src/main/resources/templates/store-edit.html b/src/main/resources/templates/store-edit.html new file mode 100644 index 0000000..e2a3d29 --- /dev/null +++ b/src/main/resources/templates/store-edit.html @@ -0,0 +1,27 @@ + + + + + +
+
+
+
+ + +
+
+ + + Назад + +
+
+
+ + \ No newline at end of file diff --git a/src/main/resources/templates/store.html b/src/main/resources/templates/store.html new file mode 100644 index 0000000..833078a --- /dev/null +++ b/src/main/resources/templates/store.html @@ -0,0 +1,57 @@ + + + + + +
+ +
+ + + + + + + + + + + + + + + +
#IDНазваниеЦена
+ + +
+ + Инфо + + + Изменить + + +
+
+ +
+
+
+
+ + \ No newline at end of file