From 653b3b1666375567b07126a08978ebfbb76b3a65 Mon Sep 17 00:00:00 2001 From: sergeynikitin Date: Thu, 16 Sep 2021 17:54:31 +0300 Subject: [PATCH 1/7] implement Spring Security --- .../e495ff3eb9c55bd0bcdde0f468b679f4.jpg | Bin 0 -> 60628 bytes ...260\320\275\320\260 2021-08-25 141911.png" | Bin 273874 -> 0 bytes docker/{ => nikitin}/docker-compose.yml | 0 pom.xml | 11 ++ .../component/ShoppingCart.java | 14 ++- .../configuration/MvcConfiguration.java | 2 +- .../controller/CategoryController.java | 12 +-- .../controller/ProductController.java | 60 ++++++----- .../controller/ShoppingCartController.java | 10 +- .../controller/rest/CategoryController.java | 8 +- .../controller/rest/ProductController.java | 14 +-- .../converter/ConverterCategory.java | 10 +- .../converter/ProductConverter.java | 8 +- .../domain/cart}/CartItem.java | 5 +- .../domain/constans/ConstanceName.java | 2 +- .../domain/dto/CategoryDto.java | 2 +- .../{ => mvcLayer}/domain/dto/ProductDto.java | 4 +- .../domain/productMarket}/Category.java | 2 +- .../domain/productMarket}/Product.java | 2 +- .../domain/search/ProductSearchCondition.java | 2 +- .../repository/CategoryRepository.java | 8 +- .../repository/ProductRepository.java | 10 +- .../service/CategoryService.java | 12 +-- .../service/ProductService.java | 20 ++-- .../service/impl/CategoryServiceImpl.java | 19 ++-- .../service/impl/ProductServiceImpl.java | 100 ++++++++---------- .../{ => mvcLayer}/sessionItem/Cart.java | 4 +- .../{ => mvcLayer}/utils/FileUtils.java | 2 +- .../configuration/SecurityConfiguration.java | 43 ++++++++ .../controller/UserController.java | 53 ++++++++++ .../springmvc/securityLayer/domain/Role.java | 19 ++++ .../springmvc/securityLayer/domain/User.java | 36 +++++++ .../repository/RoleRepository.java | 14 +++ .../repository/UserRepository.java | 17 +++ .../securityLayer/service/RoleService.java | 8 ++ .../securityLayer/service/UserService.java | 16 +++ .../service/impl/RoleServiceImpl.java | 26 +++++ .../service/impl/UserDetailsServiceImpl.java | 41 +++++++ .../service/impl/UserServiceImpl.java | 65 ++++++++++++ src/main/resources/application.properties | 2 +- .../V1_user_and_role_create_table.sql | 31 ++++++ .../resources/templates/fragment/header.html | 26 +++-- .../resources/templates/product/list.html | 6 +- src/main/resources/templates/user/admin.html | 47 ++++++++ .../templates/user/registration.html | 56 ++++++++++ .../controller/ProductControllerTest.java | 7 +- 46 files changed, 668 insertions(+), 188 deletions(-) create mode 100644 data/images/product/e495ff3eb9c55bd0bcdde0f468b679f4.jpg delete mode 100644 "data/images/product/\320\241\320\275\320\270\320\274\320\276\320\272 \321\215\320\272\321\200\320\260\320\275\320\260 2021-08-25 141911.png" rename docker/{ => nikitin}/docker-compose.yml (100%) rename src/main/java/com/example/springmvc/{ => mvcLayer}/component/ShoppingCart.java (85%) rename src/main/java/com/example/springmvc/{ => mvcLayer}/configuration/MvcConfiguration.java (92%) rename src/main/java/com/example/springmvc/{ => mvcLayer}/controller/CategoryController.java (80%) rename src/main/java/com/example/springmvc/{ => mvcLayer}/controller/ProductController.java (68%) rename src/main/java/com/example/springmvc/{ => mvcLayer}/controller/ShoppingCartController.java (85%) rename src/main/java/com/example/springmvc/{ => mvcLayer}/controller/rest/CategoryController.java (81%) rename src/main/java/com/example/springmvc/{ => mvcLayer}/controller/rest/ProductController.java (73%) rename src/main/java/com/example/springmvc/{ => mvcLayer}/converter/ConverterCategory.java (60%) rename src/main/java/com/example/springmvc/{ => mvcLayer}/converter/ProductConverter.java (72%) rename src/main/java/com/example/springmvc/{domain => mvcLayer/domain/cart}/CartItem.java (76%) rename src/main/java/com/example/springmvc/{ => mvcLayer}/domain/constans/ConstanceName.java (89%) rename src/main/java/com/example/springmvc/{ => mvcLayer}/domain/dto/CategoryDto.java (85%) rename src/main/java/com/example/springmvc/{ => mvcLayer}/domain/dto/ProductDto.java (73%) rename src/main/java/com/example/springmvc/{domain => mvcLayer/domain/productMarket}/Category.java (94%) rename src/main/java/com/example/springmvc/{domain => mvcLayer/domain/productMarket}/Product.java (95%) rename src/main/java/com/example/springmvc/{ => mvcLayer}/domain/search/ProductSearchCondition.java (88%) rename src/main/java/com/example/springmvc/{ => mvcLayer}/repository/CategoryRepository.java (66%) rename src/main/java/com/example/springmvc/{ => mvcLayer}/repository/ProductRepository.java (68%) rename src/main/java/com/example/springmvc/{ => mvcLayer}/service/CategoryService.java (60%) rename src/main/java/com/example/springmvc/{ => mvcLayer}/service/ProductService.java (50%) rename src/main/java/com/example/springmvc/{ => mvcLayer}/service/impl/CategoryServiceImpl.java (83%) rename src/main/java/com/example/springmvc/{ => mvcLayer}/service/impl/ProductServiceImpl.java (71%) rename src/main/java/com/example/springmvc/{ => mvcLayer}/sessionItem/Cart.java (71%) rename src/main/java/com/example/springmvc/{ => mvcLayer}/utils/FileUtils.java (96%) create mode 100644 src/main/java/com/example/springmvc/securityLayer/configuration/SecurityConfiguration.java create mode 100644 src/main/java/com/example/springmvc/securityLayer/controller/UserController.java create mode 100644 src/main/java/com/example/springmvc/securityLayer/domain/Role.java create mode 100644 src/main/java/com/example/springmvc/securityLayer/domain/User.java create mode 100644 src/main/java/com/example/springmvc/securityLayer/repository/RoleRepository.java create mode 100644 src/main/java/com/example/springmvc/securityLayer/repository/UserRepository.java create mode 100644 src/main/java/com/example/springmvc/securityLayer/service/RoleService.java create mode 100644 src/main/java/com/example/springmvc/securityLayer/service/UserService.java create mode 100644 src/main/java/com/example/springmvc/securityLayer/service/impl/RoleServiceImpl.java create mode 100644 src/main/java/com/example/springmvc/securityLayer/service/impl/UserDetailsServiceImpl.java create mode 100644 src/main/java/com/example/springmvc/securityLayer/service/impl/UserServiceImpl.java create mode 100644 src/main/resources/db/migration/V1_user_and_role_create_table.sql create mode 100644 src/main/resources/templates/user/admin.html create mode 100644 src/main/resources/templates/user/registration.html rename src/test/java/com/example/springmvc/{ => mvcLayer}/controller/ProductControllerTest.java (94%) diff --git a/data/images/product/e495ff3eb9c55bd0bcdde0f468b679f4.jpg b/data/images/product/e495ff3eb9c55bd0bcdde0f468b679f4.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e455463d42fb219a7f002af5e1636d97e73f5656 GIT binary patch literal 60628 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

xBIpLhK$R`f2;m#qG`>@mHW9Q^9|3a$TzfNxAc z?3N@^V`T8Js(mNnh<(|I+|_?9618$Fle662c*AL1y#ga{p))_rGJG!6J*S&HqEV_| zU-&B%tY7V0;{`+42_JqDSh&mGPL8$*e;pe>Nwvfm4WUZurVjF+*8F{Rg$*Yyv`3%f z?PtO%Gi8SxEnfbcA1S6dk54K8wS9o~e=ZMznCyVA^!4QN_h?S2O2KCH>ib{l|AdM7 d&935@k$LzIc2S5+i-CR_-89vEuX8`@{{Ye)w|oEq diff --git a/docker/docker-compose.yml b/docker/nikitin/docker-compose.yml similarity index 100% rename from docker/docker-compose.yml rename to docker/nikitin/docker-compose.yml diff --git a/pom.xml b/pom.xml index 022b565..9d974e5 100644 --- a/pom.xml +++ b/pom.xml @@ -77,6 +77,17 @@ commons-collections4 4.4 + + + org.springframework.boot + spring-boot-starter-security + + + org.thymeleaf.extras + thymeleaf-extras-springsecurity5 + 3.0.4.RELEASE + + diff --git a/src/main/java/com/example/springmvc/component/ShoppingCart.java b/src/main/java/com/example/springmvc/mvcLayer/component/ShoppingCart.java similarity index 85% rename from src/main/java/com/example/springmvc/component/ShoppingCart.java rename to src/main/java/com/example/springmvc/mvcLayer/component/ShoppingCart.java index b438ed6..ecf9c21 100644 --- a/src/main/java/com/example/springmvc/component/ShoppingCart.java +++ b/src/main/java/com/example/springmvc/mvcLayer/component/ShoppingCart.java @@ -1,6 +1,6 @@ -package com.example.springmvc.component; +package com.example.springmvc.mvcLayer.component; -import com.example.springmvc.domain.CartItem; +import com.example.springmvc.mvcLayer.domain.cart.CartItem; import lombok.Getter; import lombok.NoArgsConstructor; import org.springframework.stereotype.Component; @@ -8,7 +8,7 @@ import java.util.HashMap; import java.util.Map; -@Getter +//@Getter @Component @NoArgsConstructor public class ShoppingCart { @@ -62,4 +62,12 @@ public int getCount() { } return count; } + + public Map getCartItems() { + return new HashMap<>(cartItems); + } + + public Integer getTotalPrice() { + return totalPrice; + } } \ No newline at end of file diff --git a/src/main/java/com/example/springmvc/configuration/MvcConfiguration.java b/src/main/java/com/example/springmvc/mvcLayer/configuration/MvcConfiguration.java similarity index 92% rename from src/main/java/com/example/springmvc/configuration/MvcConfiguration.java rename to src/main/java/com/example/springmvc/mvcLayer/configuration/MvcConfiguration.java index 4165ed9..6268dca 100644 --- a/src/main/java/com/example/springmvc/configuration/MvcConfiguration.java +++ b/src/main/java/com/example/springmvc/mvcLayer/configuration/MvcConfiguration.java @@ -1,4 +1,4 @@ -package com.example.springmvc.configuration; +package com.example.springmvc.mvcLayer.configuration; import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry; diff --git a/src/main/java/com/example/springmvc/controller/CategoryController.java b/src/main/java/com/example/springmvc/mvcLayer/controller/CategoryController.java similarity index 80% rename from src/main/java/com/example/springmvc/controller/CategoryController.java rename to src/main/java/com/example/springmvc/mvcLayer/controller/CategoryController.java index ee12e05..a2a0ed3 100644 --- a/src/main/java/com/example/springmvc/controller/CategoryController.java +++ b/src/main/java/com/example/springmvc/mvcLayer/controller/CategoryController.java @@ -1,8 +1,8 @@ -package com.example.springmvc.controller; +package com.example.springmvc.mvcLayer.controller; -import com.example.springmvc.domain.Category; -import com.example.springmvc.domain.Product; -import com.example.springmvc.service.CategoryService; +import com.example.springmvc.mvcLayer.domain.productMarket.Category; +import com.example.springmvc.mvcLayer.domain.productMarket.Product; +import com.example.springmvc.mvcLayer.service.CategoryService; import lombok.AllArgsConstructor; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; @@ -12,7 +12,7 @@ import java.util.List; -import static com.example.springmvc.domain.constans.ConstanceName.*; +import static com.example.springmvc.mvcLayer.domain.constans.ConstanceName.*; @AllArgsConstructor @Controller @@ -44,7 +44,7 @@ public String findAllCategory(Model model) { return "category/list"; } - @GetMapping(FIND) + @GetMapping(FIND)//TODO: переделать чтобы возвращало page public String findProductByCategoryId(@RequestParam Integer categoryId, Model model) { List products = categoryService.findProductsByCategoryId(categoryId); List category = categoryService.findCategory(); diff --git a/src/main/java/com/example/springmvc/controller/ProductController.java b/src/main/java/com/example/springmvc/mvcLayer/controller/ProductController.java similarity index 68% rename from src/main/java/com/example/springmvc/controller/ProductController.java rename to src/main/java/com/example/springmvc/mvcLayer/controller/ProductController.java index 28c1e0f..b4c7f73 100644 --- a/src/main/java/com/example/springmvc/controller/ProductController.java +++ b/src/main/java/com/example/springmvc/mvcLayer/controller/ProductController.java @@ -1,12 +1,12 @@ -package com.example.springmvc.controller; +package com.example.springmvc.mvcLayer.controller; -import com.example.springmvc.domain.Category; -import com.example.springmvc.domain.Product; -import com.example.springmvc.domain.search.ProductSearchCondition; -import com.example.springmvc.domain.dto.ProductDto; -import com.example.springmvc.service.CategoryService; -import com.example.springmvc.service.ProductService; +import com.example.springmvc.mvcLayer.domain.productMarket.Category; +import com.example.springmvc.mvcLayer.domain.productMarket.Product; +import com.example.springmvc.mvcLayer.domain.search.ProductSearchCondition; +import com.example.springmvc.mvcLayer.domain.dto.ProductDto; +import com.example.springmvc.mvcLayer.service.CategoryService; +import com.example.springmvc.mvcLayer.service.ProductService; import lombok.AllArgsConstructor; import org.springframework.data.domain.Page; import org.springframework.stereotype.Controller; @@ -20,7 +20,7 @@ import java.util.stream.Collectors; import java.util.stream.IntStream; -import static com.example.springmvc.domain.constans.ConstanceName.*; +import static com.example.springmvc.mvcLayer.domain.constans.ConstanceName.*; @AllArgsConstructor @Controller @@ -33,22 +33,8 @@ public class ProductController { @GetMapping(LIST) public String getListProducts(ProductSearchCondition searchCondition,Model model) { -// List products = productService.findProducts(); Page page = productService.findAllBySearchConditional(searchCondition); - - - int totalPages = page.getTotalPages(); - - if (totalPages > 0) { - List pageNumbers = IntStream.rangeClosed(1, totalPages) - .boxed() - .collect(Collectors.toList()); - model.addAttribute("pageNumbers", pageNumbers); - } - model.addAttribute("pageNum", searchCondition.getPageNum()); - model.addAttribute("page", page); - model.addAttribute("pageSize", searchCondition.getPageSize()); -// model.addAttribute("page", page); + pagination(searchCondition, model, page); return "product/list"; } @@ -79,18 +65,34 @@ public String handleError(HttpServletRequest req, Exception ex) { } @GetMapping(DELETE) - public String deleteProductById(@RequestParam Integer id, Model model) { - productService.deleteProductById(id); - model.addAttribute("products", productService.findProducts()); + public String deleteProductById(@RequestParam Integer id, ProductSearchCondition searchCondition, Model model) { + Page page = productService.deleteProductById(id, searchCondition); + pagination(searchCondition,model, page); return "product/list"; } @GetMapping(FILTER) - public String filterProductsByTitleAndByMaxAndMinPrice(@RequestParam(required = false) String title, + public String filterProductsByTitleAndByMaxAndMinPrice(ProductSearchCondition searchCondition, + @RequestParam(required = false) String title, @RequestParam(required = false) Integer minPrice, @RequestParam(required = false) Integer maxPrice, Model model) { - List products = productService.findProductsByTitleAndByMaxAndMinPrice(title, minPrice, maxPrice); - model.addAttribute("products", products); + Page page = productService.findProductsByTitleAndByMaxAndMinPriceBySearchConditional( + searchCondition, title, minPrice, maxPrice); + pagination(searchCondition, model, page); + return ("product/list"); } + + private void pagination(ProductSearchCondition searchCondition, Model model, Page page) { + int totalPages = page.getTotalPages(); + if (totalPages > 0) { + List pageNumbers = IntStream.rangeClosed(1, totalPages) + .boxed() + .collect(Collectors.toList()); + model.addAttribute("pageNumbers", pageNumbers); + } + model.addAttribute("pageNum", searchCondition.getPageNum()); + model.addAttribute("page", page); + model.addAttribute("pageSize", searchCondition.getPageSize()); + } } \ No newline at end of file diff --git a/src/main/java/com/example/springmvc/controller/ShoppingCartController.java b/src/main/java/com/example/springmvc/mvcLayer/controller/ShoppingCartController.java similarity index 85% rename from src/main/java/com/example/springmvc/controller/ShoppingCartController.java rename to src/main/java/com/example/springmvc/mvcLayer/controller/ShoppingCartController.java index c8ce4c2..1b08d4d 100644 --- a/src/main/java/com/example/springmvc/controller/ShoppingCartController.java +++ b/src/main/java/com/example/springmvc/mvcLayer/controller/ShoppingCartController.java @@ -1,9 +1,9 @@ -package com.example.springmvc.controller; +package com.example.springmvc.mvcLayer.controller; -import com.example.springmvc.component.ShoppingCart; -import com.example.springmvc.domain.CartItem; -import com.example.springmvc.domain.dto.ProductDto; -import com.example.springmvc.service.ProductService; +import com.example.springmvc.mvcLayer.component.ShoppingCart; +import com.example.springmvc.mvcLayer.domain.cart.CartItem; +import com.example.springmvc.mvcLayer.domain.dto.ProductDto; +import com.example.springmvc.mvcLayer.service.ProductService; import lombok.AllArgsConstructor; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.GetMapping; diff --git a/src/main/java/com/example/springmvc/controller/rest/CategoryController.java b/src/main/java/com/example/springmvc/mvcLayer/controller/rest/CategoryController.java similarity index 81% rename from src/main/java/com/example/springmvc/controller/rest/CategoryController.java rename to src/main/java/com/example/springmvc/mvcLayer/controller/rest/CategoryController.java index c60f914..0d1dcad 100644 --- a/src/main/java/com/example/springmvc/controller/rest/CategoryController.java +++ b/src/main/java/com/example/springmvc/mvcLayer/controller/rest/CategoryController.java @@ -1,15 +1,15 @@ -package com.example.springmvc.controller.rest; +package com.example.springmvc.mvcLayer.controller.rest; -import com.example.springmvc.domain.Category; -import com.example.springmvc.service.CategoryService; +import com.example.springmvc.mvcLayer.domain.productMarket.Category; +import com.example.springmvc.mvcLayer.service.CategoryService; import lombok.AllArgsConstructor; import org.springframework.http.HttpStatus; import org.springframework.web.bind.annotation.*; import java.util.List; -import static com.example.springmvc.domain.constans.ConstanceName.*; +import static com.example.springmvc.mvcLayer.domain.constans.ConstanceName.*; @AllArgsConstructor @RequestMapping(API_V1+CATEGORY) @RestController("restCategoryController") diff --git a/src/main/java/com/example/springmvc/controller/rest/ProductController.java b/src/main/java/com/example/springmvc/mvcLayer/controller/rest/ProductController.java similarity index 73% rename from src/main/java/com/example/springmvc/controller/rest/ProductController.java rename to src/main/java/com/example/springmvc/mvcLayer/controller/rest/ProductController.java index 9874163..577bdc7 100644 --- a/src/main/java/com/example/springmvc/controller/rest/ProductController.java +++ b/src/main/java/com/example/springmvc/mvcLayer/controller/rest/ProductController.java @@ -1,15 +1,15 @@ -package com.example.springmvc.controller.rest; +package com.example.springmvc.mvcLayer.controller.rest; -import com.example.springmvc.domain.Product; -import com.example.springmvc.domain.search.ProductSearchCondition; -import com.example.springmvc.domain.dto.ProductDto; -import com.example.springmvc.service.ProductService; +import com.example.springmvc.mvcLayer.domain.productMarket.Product; +import com.example.springmvc.mvcLayer.domain.search.ProductSearchCondition; +import com.example.springmvc.mvcLayer.domain.dto.ProductDto; +import com.example.springmvc.mvcLayer.service.ProductService; import lombok.AllArgsConstructor; import org.springframework.data.domain.Page; import org.springframework.http.HttpStatus; import org.springframework.web.bind.annotation.*; -import static com.example.springmvc.domain.constans.ConstanceName.*; +import static com.example.springmvc.mvcLayer.domain.constans.ConstanceName.*; @AllArgsConstructor @RequestMapping(API_V1+PRODUCT) @@ -46,7 +46,7 @@ public Product addProduct(@RequestBody Product product) { @DeleteMapping("/{id}") public int deleteProduct(@PathVariable Integer id) { - productService.deleteProductById(id); +// productService.deleteProductById(id); return HttpStatus.OK.value(); } } diff --git a/src/main/java/com/example/springmvc/converter/ConverterCategory.java b/src/main/java/com/example/springmvc/mvcLayer/converter/ConverterCategory.java similarity index 60% rename from src/main/java/com/example/springmvc/converter/ConverterCategory.java rename to src/main/java/com/example/springmvc/mvcLayer/converter/ConverterCategory.java index 451648f..89748b4 100644 --- a/src/main/java/com/example/springmvc/converter/ConverterCategory.java +++ b/src/main/java/com/example/springmvc/mvcLayer/converter/ConverterCategory.java @@ -1,10 +1,8 @@ -package com.example.springmvc.converter; +package com.example.springmvc.mvcLayer.converter; -import com.example.springmvc.domain.Category; -import com.example.springmvc.domain.dto.CategoryDto; -import com.example.springmvc.service.ProductService; - -import java.util.Set; +import com.example.springmvc.mvcLayer.domain.productMarket.Category; +import com.example.springmvc.mvcLayer.domain.dto.CategoryDto; +import com.example.springmvc.mvcLayer.service.ProductService; public class ConverterCategory { private static ProductService productService; diff --git a/src/main/java/com/example/springmvc/converter/ProductConverter.java b/src/main/java/com/example/springmvc/mvcLayer/converter/ProductConverter.java similarity index 72% rename from src/main/java/com/example/springmvc/converter/ProductConverter.java rename to src/main/java/com/example/springmvc/mvcLayer/converter/ProductConverter.java index 440416b..d0a3a5e 100644 --- a/src/main/java/com/example/springmvc/converter/ProductConverter.java +++ b/src/main/java/com/example/springmvc/mvcLayer/converter/ProductConverter.java @@ -1,8 +1,8 @@ -package com.example.springmvc.converter; +package com.example.springmvc.mvcLayer.converter; -import com.example.springmvc.domain.Product; -import com.example.springmvc.domain.dto.ProductDto; -import com.example.springmvc.service.CategoryService; +import com.example.springmvc.mvcLayer.domain.productMarket.Product; +import com.example.springmvc.mvcLayer.domain.dto.ProductDto; +import com.example.springmvc.mvcLayer.service.CategoryService; public class ProductConverter { private static CategoryService categoryService; diff --git a/src/main/java/com/example/springmvc/domain/CartItem.java b/src/main/java/com/example/springmvc/mvcLayer/domain/cart/CartItem.java similarity index 76% rename from src/main/java/com/example/springmvc/domain/CartItem.java rename to src/main/java/com/example/springmvc/mvcLayer/domain/cart/CartItem.java index dc2074c..7918023 100644 --- a/src/main/java/com/example/springmvc/domain/CartItem.java +++ b/src/main/java/com/example/springmvc/mvcLayer/domain/cart/CartItem.java @@ -1,7 +1,6 @@ -package com.example.springmvc.domain; +package com.example.springmvc.mvcLayer.domain.cart; -import com.example.springmvc.domain.dto.ProductDto; -import lombok.AllArgsConstructor; +import com.example.springmvc.mvcLayer.domain.dto.ProductDto; import lombok.Getter; @Getter diff --git a/src/main/java/com/example/springmvc/domain/constans/ConstanceName.java b/src/main/java/com/example/springmvc/mvcLayer/domain/constans/ConstanceName.java similarity index 89% rename from src/main/java/com/example/springmvc/domain/constans/ConstanceName.java rename to src/main/java/com/example/springmvc/mvcLayer/domain/constans/ConstanceName.java index e65e0fb..000042f 100644 --- a/src/main/java/com/example/springmvc/domain/constans/ConstanceName.java +++ b/src/main/java/com/example/springmvc/mvcLayer/domain/constans/ConstanceName.java @@ -1,4 +1,4 @@ -package com.example.springmvc.domain.constans; +package com.example.springmvc.mvcLayer.domain.constans; import lombok.NoArgsConstructor; diff --git a/src/main/java/com/example/springmvc/domain/dto/CategoryDto.java b/src/main/java/com/example/springmvc/mvcLayer/domain/dto/CategoryDto.java similarity index 85% rename from src/main/java/com/example/springmvc/domain/dto/CategoryDto.java rename to src/main/java/com/example/springmvc/mvcLayer/domain/dto/CategoryDto.java index e3bdcd0..d0f239e 100644 --- a/src/main/java/com/example/springmvc/domain/dto/CategoryDto.java +++ b/src/main/java/com/example/springmvc/mvcLayer/domain/dto/CategoryDto.java @@ -1,4 +1,4 @@ -package com.example.springmvc.domain.dto; +package com.example.springmvc.mvcLayer.domain.dto; import lombok.AllArgsConstructor; import lombok.Builder; diff --git a/src/main/java/com/example/springmvc/domain/dto/ProductDto.java b/src/main/java/com/example/springmvc/mvcLayer/domain/dto/ProductDto.java similarity index 73% rename from src/main/java/com/example/springmvc/domain/dto/ProductDto.java rename to src/main/java/com/example/springmvc/mvcLayer/domain/dto/ProductDto.java index e6cbff1..41fdf82 100644 --- a/src/main/java/com/example/springmvc/domain/dto/ProductDto.java +++ b/src/main/java/com/example/springmvc/mvcLayer/domain/dto/ProductDto.java @@ -1,6 +1,6 @@ -package com.example.springmvc.domain.dto; +package com.example.springmvc.mvcLayer.domain.dto; -import com.example.springmvc.domain.Category; +import com.example.springmvc.mvcLayer.domain.productMarket.Category; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; diff --git a/src/main/java/com/example/springmvc/domain/Category.java b/src/main/java/com/example/springmvc/mvcLayer/domain/productMarket/Category.java similarity index 94% rename from src/main/java/com/example/springmvc/domain/Category.java rename to src/main/java/com/example/springmvc/mvcLayer/domain/productMarket/Category.java index 4048ac3..3bf6562 100644 --- a/src/main/java/com/example/springmvc/domain/Category.java +++ b/src/main/java/com/example/springmvc/mvcLayer/domain/productMarket/Category.java @@ -1,4 +1,4 @@ -package com.example.springmvc.domain; +package com.example.springmvc.mvcLayer.domain.productMarket; import com.fasterxml.jackson.annotation.JsonBackReference; import lombok.*; diff --git a/src/main/java/com/example/springmvc/domain/Product.java b/src/main/java/com/example/springmvc/mvcLayer/domain/productMarket/Product.java similarity index 95% rename from src/main/java/com/example/springmvc/domain/Product.java rename to src/main/java/com/example/springmvc/mvcLayer/domain/productMarket/Product.java index 179b1f0..ed2e790 100644 --- a/src/main/java/com/example/springmvc/domain/Product.java +++ b/src/main/java/com/example/springmvc/mvcLayer/domain/productMarket/Product.java @@ -1,4 +1,4 @@ -package com.example.springmvc.domain; +package com.example.springmvc.mvcLayer.domain.productMarket; import lombok.*; diff --git a/src/main/java/com/example/springmvc/domain/search/ProductSearchCondition.java b/src/main/java/com/example/springmvc/mvcLayer/domain/search/ProductSearchCondition.java similarity index 88% rename from src/main/java/com/example/springmvc/domain/search/ProductSearchCondition.java rename to src/main/java/com/example/springmvc/mvcLayer/domain/search/ProductSearchCondition.java index 6ac6f12..1e083fd 100644 --- a/src/main/java/com/example/springmvc/domain/search/ProductSearchCondition.java +++ b/src/main/java/com/example/springmvc/mvcLayer/domain/search/ProductSearchCondition.java @@ -1,4 +1,4 @@ -package com.example.springmvc.domain.search; +package com.example.springmvc.mvcLayer.domain.search; import lombok.Data; import org.springframework.data.domain.Sort; diff --git a/src/main/java/com/example/springmvc/repository/CategoryRepository.java b/src/main/java/com/example/springmvc/mvcLayer/repository/CategoryRepository.java similarity index 66% rename from src/main/java/com/example/springmvc/repository/CategoryRepository.java rename to src/main/java/com/example/springmvc/mvcLayer/repository/CategoryRepository.java index 6b300c8..ee30f4a 100644 --- a/src/main/java/com/example/springmvc/repository/CategoryRepository.java +++ b/src/main/java/com/example/springmvc/mvcLayer/repository/CategoryRepository.java @@ -1,8 +1,6 @@ -package com.example.springmvc.repository; +package com.example.springmvc.mvcLayer.repository; -import com.example.springmvc.domain.Category; -import com.example.springmvc.domain.Product; -import com.example.springmvc.domain.dto.CategoryDto; +import com.example.springmvc.mvcLayer.domain.productMarket.Category; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; @@ -16,4 +14,6 @@ public interface CategoryRepository extends JpaRepository { Set findByProducts_Id(Integer productId); +// Page findProductsByIdCategory(Pageable pageable); + } diff --git a/src/main/java/com/example/springmvc/repository/ProductRepository.java b/src/main/java/com/example/springmvc/mvcLayer/repository/ProductRepository.java similarity index 68% rename from src/main/java/com/example/springmvc/repository/ProductRepository.java rename to src/main/java/com/example/springmvc/mvcLayer/repository/ProductRepository.java index 8c2f398..627bebe 100644 --- a/src/main/java/com/example/springmvc/repository/ProductRepository.java +++ b/src/main/java/com/example/springmvc/mvcLayer/repository/ProductRepository.java @@ -1,7 +1,6 @@ -package com.example.springmvc.repository; +package com.example.springmvc.mvcLayer.repository; -import com.example.springmvc.domain.Product; -import com.example.springmvc.domain.dto.ProductDto; +import com.example.springmvc.mvcLayer.domain.productMarket.Product; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; import org.springframework.data.jpa.repository.JpaRepository; @@ -20,9 +19,10 @@ public interface ProductRepository extends JpaRepository { void deleteById(Integer id); - List findProductsByTitleContainingIgnoreCaseAndPriceBetween(String title, Integer minPrice, Integer maxPrice); - Set findByCategories_Id(Integer categoryId); Page findAll(Pageable pageable); + + Page findProductsByTitleContainingIgnoreCaseAndPriceBetween( + String title, Integer minPrice, Integer maxPrice,Pageable pageable); } diff --git a/src/main/java/com/example/springmvc/service/CategoryService.java b/src/main/java/com/example/springmvc/mvcLayer/service/CategoryService.java similarity index 60% rename from src/main/java/com/example/springmvc/service/CategoryService.java rename to src/main/java/com/example/springmvc/mvcLayer/service/CategoryService.java index d19af87..d71c921 100644 --- a/src/main/java/com/example/springmvc/service/CategoryService.java +++ b/src/main/java/com/example/springmvc/mvcLayer/service/CategoryService.java @@ -1,10 +1,8 @@ -package com.example.springmvc.service; +package com.example.springmvc.mvcLayer.service; -import com.example.springmvc.domain.Category; -import com.example.springmvc.domain.Product; -import com.example.springmvc.domain.dto.CategoryDto; -import org.springframework.data.domain.Page; -import org.springframework.data.domain.Pageable; +import com.example.springmvc.mvcLayer.domain.productMarket.Category; +import com.example.springmvc.mvcLayer.domain.productMarket.Product; +import com.example.springmvc.mvcLayer.domain.dto.CategoryDto; import java.util.List; import java.util.Optional; @@ -27,4 +25,6 @@ public interface CategoryService { Set getCategoryDtoByProductId(Integer productId); Set findCategoriesByProductId(Integer id); + +// Page findAllBySearchConditional(ProductSearchCondition searchCondition); } diff --git a/src/main/java/com/example/springmvc/service/ProductService.java b/src/main/java/com/example/springmvc/mvcLayer/service/ProductService.java similarity index 50% rename from src/main/java/com/example/springmvc/service/ProductService.java rename to src/main/java/com/example/springmvc/mvcLayer/service/ProductService.java index ce97188..61f9d16 100644 --- a/src/main/java/com/example/springmvc/service/ProductService.java +++ b/src/main/java/com/example/springmvc/mvcLayer/service/ProductService.java @@ -1,12 +1,11 @@ -package com.example.springmvc.service; +package com.example.springmvc.mvcLayer.service; -import com.example.springmvc.domain.Product; -import com.example.springmvc.domain.search.ProductSearchCondition; -import com.example.springmvc.domain.dto.ProductDto; +import com.example.springmvc.mvcLayer.domain.productMarket.Product; +import com.example.springmvc.mvcLayer.domain.search.ProductSearchCondition; +import com.example.springmvc.mvcLayer.domain.dto.ProductDto; import org.springframework.data.domain.Page; import org.springframework.web.multipart.MultipartFile; -import java.util.List; import java.util.Optional; import java.util.Set; @@ -18,15 +17,18 @@ public interface ProductService { Product saveProductAndImage(ProductDto product, MultipartFile image); - List findProducts(); +// List findProducts(); Optional findProductById(Integer id); ProductDto findProductDtoById(Integer id); - void deleteProductById(Integer id); - - List findProductsByTitleAndByMaxAndMinPrice(String title, Integer minPrice, Integer maxPrice); + Page deleteProductById(Integer id,ProductSearchCondition searchCondition); Set findProductsDtoByCategoryId(Integer categoryId); + + // + Page findProductsByTitleAndByMaxAndMinPriceBySearchConditional( + ProductSearchCondition searchCondition, String title, Integer minPrice, Integer maxPrice); + } \ No newline at end of file diff --git a/src/main/java/com/example/springmvc/service/impl/CategoryServiceImpl.java b/src/main/java/com/example/springmvc/mvcLayer/service/impl/CategoryServiceImpl.java similarity index 83% rename from src/main/java/com/example/springmvc/service/impl/CategoryServiceImpl.java rename to src/main/java/com/example/springmvc/mvcLayer/service/impl/CategoryServiceImpl.java index 92397ca..f491cd2 100644 --- a/src/main/java/com/example/springmvc/service/impl/CategoryServiceImpl.java +++ b/src/main/java/com/example/springmvc/mvcLayer/service/impl/CategoryServiceImpl.java @@ -1,13 +1,12 @@ -package com.example.springmvc.service.impl; +package com.example.springmvc.mvcLayer.service.impl; -//import com.example.springmvc.converter.Converter; -//import com.example.springmvc.converter.ConverterCategory; -import com.example.springmvc.domain.Category; -import com.example.springmvc.domain.Product; -import com.example.springmvc.domain.dto.CategoryDto; -import com.example.springmvc.repository.CategoryRepository; -import com.example.springmvc.service.CategoryService; -import com.example.springmvc.service.ProductService; +//import com.example.springmvc.mvcLayer.converter.Converter; +//import com.example.springmvc.mvcLayer.converter.ConverterCategory; +import com.example.springmvc.mvcLayer.domain.productMarket.Category; +import com.example.springmvc.mvcLayer.domain.productMarket.Product; +import com.example.springmvc.mvcLayer.domain.dto.CategoryDto; +import com.example.springmvc.mvcLayer.repository.CategoryRepository; +import com.example.springmvc.mvcLayer.service.CategoryService; import lombok.AllArgsConstructor; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -87,6 +86,6 @@ public CategoryDto convert(Category category){ .title(category.getTitle()) // .productsDto(productService.findProductsDtoByCategoryId(category.getId())) .build(); - } + } \ No newline at end of file diff --git a/src/main/java/com/example/springmvc/service/impl/ProductServiceImpl.java b/src/main/java/com/example/springmvc/mvcLayer/service/impl/ProductServiceImpl.java similarity index 71% rename from src/main/java/com/example/springmvc/service/impl/ProductServiceImpl.java rename to src/main/java/com/example/springmvc/mvcLayer/service/impl/ProductServiceImpl.java index 21d2554..998a4a1 100644 --- a/src/main/java/com/example/springmvc/service/impl/ProductServiceImpl.java +++ b/src/main/java/com/example/springmvc/mvcLayer/service/impl/ProductServiceImpl.java @@ -1,13 +1,13 @@ -package com.example.springmvc.service.impl; - -//import com.example.springmvc.converter.Converter; -import com.example.springmvc.converter.ProductConverter; -import com.example.springmvc.domain.Product; -import com.example.springmvc.domain.search.ProductSearchCondition; -import com.example.springmvc.domain.dto.ProductDto; -import com.example.springmvc.repository.ProductRepository; -import com.example.springmvc.service.ProductService; -import com.example.springmvc.utils.FileUtils; +package com.example.springmvc.mvcLayer.service.impl; + +//import com.example.springmvc.mvcLayer.converter.Converter; +import com.example.springmvc.mvcLayer.converter.ProductConverter; +import com.example.springmvc.mvcLayer.domain.productMarket.Product; +import com.example.springmvc.mvcLayer.domain.search.ProductSearchCondition; +import com.example.springmvc.mvcLayer.domain.dto.ProductDto; +import com.example.springmvc.mvcLayer.repository.ProductRepository; +import com.example.springmvc.mvcLayer.service.ProductService; +import com.example.springmvc.mvcLayer.utils.FileUtils; import lombok.AllArgsConstructor; import org.springframework.data.domain.Page; import org.springframework.data.domain.PageRequest; @@ -55,18 +55,18 @@ private Product convertProductDtoInProduct(ProductDto productDto) { return ProductConverter.dtoProductConvertToProduct(productDto, product); } - @Override - public List findProducts() { - return productRepository.findAll(); - } +// @Override +// public List findProducts() { +// return productRepository.findAll(); +// } @Override public Optional findProductById(Integer id) { return productRepository.findById(id); } - @Transactional @Override + @Transactional public ProductDto findProductDtoById(Integer id) { Optional productById = findProductById(id); @@ -74,19 +74,11 @@ public ProductDto findProductDtoById(Integer id) { } @Override - public void deleteProductById(Integer id) { + @Transactional + public Page deleteProductById(Integer id,ProductSearchCondition searchCondition) { productRepository.deleteById(id); - } - - @Override - public List findProductsByTitleAndByMaxAndMinPrice(String title, Integer minPrice, Integer maxPrice) { - if (Objects.isNull(minPrice)) { - minPrice = 0; - } - if (Objects.isNull(maxPrice)) { - maxPrice = Integer.MAX_VALUE; - } - return productRepository.findProductsByTitleContainingIgnoreCaseAndPriceBetween(title, minPrice, maxPrice); + Pageable pageable = getPageable(searchCondition); + return productRepository.findAll(pageable); } @Override @@ -100,6 +92,34 @@ public Set findProductsDtoByCategoryId(Integer categoryId) { return productDtoSet; } + @Override + public Page findAllBySearchConditional(ProductSearchCondition searchCondition) { + Pageable pageRequest = getPageable(searchCondition); + return productRepository.findAll(pageRequest); + } + + private Pageable getPageable(ProductSearchCondition searchCondition) { + return PageRequest.of(searchCondition.getPageNum(), + searchCondition.getPageSize(), + Sort.by(searchCondition.getSortDirection(), searchCondition.getSortField())); + } + + @Override + public Page findProductsByTitleAndByMaxAndMinPriceBySearchConditional( + ProductSearchCondition searchCondition, String title, Integer minPrice, Integer maxPrice) { + if (Objects.isNull(minPrice)) { + minPrice = 0; + } + if (Objects.isNull(maxPrice)) { + maxPrice = Integer.MAX_VALUE; + } + Pageable pageRequest = getPageable(searchCondition); + + return productRepository.findProductsByTitleContainingIgnoreCaseAndPriceBetween(title,minPrice,maxPrice,pageRequest); + } + + + // // private boolean getRedirectView(String title, String price, RedirectAttributes attributes, MultipartFile image) { // if (title.isEmpty()) { @@ -116,30 +136,4 @@ public Set findProductsDtoByCategoryId(Integer categoryId) { // } // return false; // } - - @Override - public Page findAllBySearchConditional(ProductSearchCondition searchCondition) { - Pageable pageRequest = PageRequest.of(searchCondition.getPageNum(), - searchCondition.getPageSize(), - Sort.by(searchCondition.getSortDirection(), searchCondition.getSortField())); -// return pageRequest; - return productRepository.findAll(pageRequest); - } - - - //переместил в конвертер -// private ProductDto productConvertToDtoProduct(Product product) { -// return ProductDto.builder().id(product.getId()) -// .title(product.getTitle()) -// .price(product.getPrice()) -// .categories(categoryService.getCategoryDtoByProductId(product.getId())).build(); -// } -// -// private Product dtoProductConvertToProduct(ProductDto productDto, Product product) { -// product.setTitle(productDto.getTitle()); -// product.setPrice(productDto.getPrice()); -// product.setCategories(categoryService.findCategoriesByProductId(productDto.getId())); -// return product; -// } - } \ No newline at end of file diff --git a/src/main/java/com/example/springmvc/sessionItem/Cart.java b/src/main/java/com/example/springmvc/mvcLayer/sessionItem/Cart.java similarity index 71% rename from src/main/java/com/example/springmvc/sessionItem/Cart.java rename to src/main/java/com/example/springmvc/mvcLayer/sessionItem/Cart.java index 95a60ce..266cf48 100644 --- a/src/main/java/com/example/springmvc/sessionItem/Cart.java +++ b/src/main/java/com/example/springmvc/mvcLayer/sessionItem/Cart.java @@ -1,6 +1,6 @@ -package com.example.springmvc.sessionItem; +package com.example.springmvc.mvcLayer.sessionItem; -import com.example.springmvc.component.ShoppingCart; +import com.example.springmvc.mvcLayer.component.ShoppingCart; import org.springframework.web.bind.annotation.ControllerAdvice; import org.springframework.web.bind.annotation.ModelAttribute; diff --git a/src/main/java/com/example/springmvc/utils/FileUtils.java b/src/main/java/com/example/springmvc/mvcLayer/utils/FileUtils.java similarity index 96% rename from src/main/java/com/example/springmvc/utils/FileUtils.java rename to src/main/java/com/example/springmvc/mvcLayer/utils/FileUtils.java index a6de6bc..08157be 100644 --- a/src/main/java/com/example/springmvc/utils/FileUtils.java +++ b/src/main/java/com/example/springmvc/mvcLayer/utils/FileUtils.java @@ -1,4 +1,4 @@ -package com.example.springmvc.utils; +package com.example.springmvc.mvcLayer.utils; import org.springframework.web.multipart.MultipartFile; diff --git a/src/main/java/com/example/springmvc/securityLayer/configuration/SecurityConfiguration.java b/src/main/java/com/example/springmvc/securityLayer/configuration/SecurityConfiguration.java new file mode 100644 index 0000000..2604b32 --- /dev/null +++ b/src/main/java/com/example/springmvc/securityLayer/configuration/SecurityConfiguration.java @@ -0,0 +1,43 @@ +package com.example.springmvc.securityLayer.configuration; + +import lombok.RequiredArgsConstructor; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.security.authentication.dao.DaoAuthenticationProvider; +import org.springframework.security.config.annotation.web.builders.HttpSecurity; +import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; +import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter; +import org.springframework.security.core.userdetails.UserDetailsService; +import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; + +@Configuration +@EnableWebSecurity +@RequiredArgsConstructor +public class SecurityConfiguration extends WebSecurityConfigurerAdapter { + private final UserDetailsService userDetailsService; + + + @Override + protected void configure(HttpSecurity http) throws Exception { + http.authorizeRequests() + .antMatchers("/user/admin/**").hasAnyRole("ADMIN") + .antMatchers("/product/form/**", "/category/form/**").hasAnyRole("ADMIN", "MANAGER") + .antMatchers("/login/**").authenticated() + .anyRequest().permitAll().and() + .formLogin() + .defaultSuccessUrl("/product/list"); + } + + @Bean + public BCryptPasswordEncoder passwordEncoder() { + return new BCryptPasswordEncoder(8); + } + + @Bean + public DaoAuthenticationProvider authenticationProvider() { + DaoAuthenticationProvider authenticationProvider = new DaoAuthenticationProvider(); + authenticationProvider.setUserDetailsService(userDetailsService); + authenticationProvider.setPasswordEncoder(passwordEncoder()); + return authenticationProvider; + } +} diff --git a/src/main/java/com/example/springmvc/securityLayer/controller/UserController.java b/src/main/java/com/example/springmvc/securityLayer/controller/UserController.java new file mode 100644 index 0000000..b244d51 --- /dev/null +++ b/src/main/java/com/example/springmvc/securityLayer/controller/UserController.java @@ -0,0 +1,53 @@ +package com.example.springmvc.securityLayer.controller; + +import com.example.springmvc.securityLayer.domain.User; +import com.example.springmvc.securityLayer.service.UserService; +import lombok.AllArgsConstructor; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.PageRequest; +import org.springframework.data.domain.Pageable; +import org.springframework.stereotype.Controller; +import org.springframework.ui.Model; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; + +@Controller +@AllArgsConstructor +@RequestMapping("/user") +public class UserController { + + private final UserService userService; + + @GetMapping("/admin") + public String getAllUsers(@RequestParam(required = false) Integer pageNum, Model model) { + final int pageSize = 5; + + Pageable pageRequest = PageRequest.of(pageNum == null ? 0 : pageNum, pageSize); + Page page = userService.findAllByPage(pageRequest); + + model.addAttribute("page", page); + + return "user/admin"; + } + + @GetMapping("/registration") + public String createModelRegistration(Model model) { + model.addAttribute("user", new User()); + return "user/registration"; + } + + @PostMapping("/registration") + public String registrationUser(User user) { + userService.saveUser(user); + return "redirect:/login"; + } + + @GetMapping("/enable") + public String setEnableUser(@RequestParam Long userId, @RequestParam Boolean enable) { + userService.setEnable(userId, enable); + + return "redirect:/user/admin"; + } +} \ No newline at end of file diff --git a/src/main/java/com/example/springmvc/securityLayer/domain/Role.java b/src/main/java/com/example/springmvc/securityLayer/domain/Role.java new file mode 100644 index 0000000..075f1ad --- /dev/null +++ b/src/main/java/com/example/springmvc/securityLayer/domain/Role.java @@ -0,0 +1,19 @@ +package com.example.springmvc.securityLayer.domain; + +import lombok.Data; +import lombok.EqualsAndHashCode; + +import javax.persistence.*; + +@Data +@Entity +@Table(name = "role") +@EqualsAndHashCode(exclude = {"id"}) +public class Role { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + private String name; + +} diff --git a/src/main/java/com/example/springmvc/securityLayer/domain/User.java b/src/main/java/com/example/springmvc/securityLayer/domain/User.java new file mode 100644 index 0000000..204c9bd --- /dev/null +++ b/src/main/java/com/example/springmvc/securityLayer/domain/User.java @@ -0,0 +1,36 @@ +package com.example.springmvc.securityLayer.domain; + +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.NoArgsConstructor; +import lombok.ToString; + +import javax.persistence.*; +import javax.validation.constraints.Email; +import javax.validation.constraints.NotBlank; +import java.util.Collection; + +@Data +@Entity +@NoArgsConstructor +@Table(name = "users") +@EqualsAndHashCode(exclude = {"id"}) +public class User { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + + private String username; + + private String password; + + private String email; + + private boolean enabled = true; + + @ManyToMany + @JoinTable(name = "user_role", + joinColumns = @JoinColumn(name = "user_id"), + inverseJoinColumns = @JoinColumn(name = "role_id")) + private Collection roles; +} \ No newline at end of file diff --git a/src/main/java/com/example/springmvc/securityLayer/repository/RoleRepository.java b/src/main/java/com/example/springmvc/securityLayer/repository/RoleRepository.java new file mode 100644 index 0000000..4516e51 --- /dev/null +++ b/src/main/java/com/example/springmvc/securityLayer/repository/RoleRepository.java @@ -0,0 +1,14 @@ +package com.example.springmvc.securityLayer.repository; + +import com.example.springmvc.securityLayer.domain.Role; +import com.example.springmvc.securityLayer.domain.User; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +import java.util.Optional; + +@Repository +public interface RoleRepository extends JpaRepository { + + Optional findByNameIgnoreCase(String name); +} diff --git a/src/main/java/com/example/springmvc/securityLayer/repository/UserRepository.java b/src/main/java/com/example/springmvc/securityLayer/repository/UserRepository.java new file mode 100644 index 0000000..3ab3409 --- /dev/null +++ b/src/main/java/com/example/springmvc/securityLayer/repository/UserRepository.java @@ -0,0 +1,17 @@ +package com.example.springmvc.securityLayer.repository; + +import com.example.springmvc.securityLayer.domain.User; +import org.springframework.data.domain.Example; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +import java.util.Optional; + +@Repository +public interface UserRepository extends JpaRepository { + + Optional findByUsername(String username); + +} diff --git a/src/main/java/com/example/springmvc/securityLayer/service/RoleService.java b/src/main/java/com/example/springmvc/securityLayer/service/RoleService.java new file mode 100644 index 0000000..aad3632 --- /dev/null +++ b/src/main/java/com/example/springmvc/securityLayer/service/RoleService.java @@ -0,0 +1,8 @@ +package com.example.springmvc.securityLayer.service; + +import com.example.springmvc.securityLayer.domain.Role; + +public interface RoleService { + + Role findByName(String name); +} \ No newline at end of file diff --git a/src/main/java/com/example/springmvc/securityLayer/service/UserService.java b/src/main/java/com/example/springmvc/securityLayer/service/UserService.java new file mode 100644 index 0000000..7448377 --- /dev/null +++ b/src/main/java/com/example/springmvc/securityLayer/service/UserService.java @@ -0,0 +1,16 @@ +package com.example.springmvc.securityLayer.service; + +import com.example.springmvc.securityLayer.domain.User; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; + +public interface UserService { + + User findByUsername(String username); + + User saveUser(User user); + + Page findAllByPage(Pageable pageRequest); + + void setEnable(Long userId, Boolean enable); +} diff --git a/src/main/java/com/example/springmvc/securityLayer/service/impl/RoleServiceImpl.java b/src/main/java/com/example/springmvc/securityLayer/service/impl/RoleServiceImpl.java new file mode 100644 index 0000000..797f298 --- /dev/null +++ b/src/main/java/com/example/springmvc/securityLayer/service/impl/RoleServiceImpl.java @@ -0,0 +1,26 @@ +package com.example.springmvc.securityLayer.service.impl; + +import com.example.springmvc.securityLayer.domain.Role; +import com.example.springmvc.securityLayer.repository.RoleRepository; +import com.example.springmvc.securityLayer.service.RoleService; +import lombok.AllArgsConstructor; +import org.springframework.stereotype.Service; + +import javax.persistence.EntityNotFoundException; +import java.util.Optional; + +@Service +@AllArgsConstructor +public class RoleServiceImpl implements RoleService { + + private final RoleRepository roleRepository; + + @Override + public Role findByName(String name) { + Optional byNameIgnoreCase = roleRepository.findByNameIgnoreCase(name); + if (byNameIgnoreCase.isEmpty()) { + throw new EntityNotFoundException("Role witch name" + name + " not found"); + } + return byNameIgnoreCase.get(); + } +} diff --git a/src/main/java/com/example/springmvc/securityLayer/service/impl/UserDetailsServiceImpl.java b/src/main/java/com/example/springmvc/securityLayer/service/impl/UserDetailsServiceImpl.java new file mode 100644 index 0000000..a3d00bc --- /dev/null +++ b/src/main/java/com/example/springmvc/securityLayer/service/impl/UserDetailsServiceImpl.java @@ -0,0 +1,41 @@ +package com.example.springmvc.securityLayer.service.impl; + +import com.example.springmvc.securityLayer.domain.Role; +import com.example.springmvc.securityLayer.repository.UserRepository; +import lombok.AllArgsConstructor; +import org.springframework.security.core.GrantedAuthority; +import org.springframework.security.core.authority.SimpleGrantedAuthority; +import org.springframework.security.core.userdetails.User; +import org.springframework.security.core.userdetails.UserDetails; +import org.springframework.security.core.userdetails.UserDetailsService; +import org.springframework.security.core.userdetails.UsernameNotFoundException; +import org.springframework.stereotype.Component; +import org.springframework.transaction.annotation.Transactional; + +import java.util.Collection; +import java.util.stream.Collectors; + +@Component +@AllArgsConstructor +public class UserDetailsServiceImpl implements UserDetailsService { + + private final UserRepository userRepository; + + @Override + @Transactional + public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException { + com.example.springmvc.securityLayer.domain.User user = userRepository.findByUsername(username) + .orElseThrow(() -> new UsernameNotFoundException(String.format("User '%s' not found", username))); + + return new User( + user.getUsername(), user.getPassword(), + user.isEnabled(), true, true, true, + mapRolesToAuthorities(user.getRoles()) + ); + } + + private Collection mapRolesToAuthorities(Collection roles) { + return roles.stream().map(role -> new SimpleGrantedAuthority(role.getName())) + .collect(Collectors.toList()); + } +} \ No newline at end of file diff --git a/src/main/java/com/example/springmvc/securityLayer/service/impl/UserServiceImpl.java b/src/main/java/com/example/springmvc/securityLayer/service/impl/UserServiceImpl.java new file mode 100644 index 0000000..4826f7a --- /dev/null +++ b/src/main/java/com/example/springmvc/securityLayer/service/impl/UserServiceImpl.java @@ -0,0 +1,65 @@ +package com.example.springmvc.securityLayer.service.impl; + +import com.example.springmvc.securityLayer.domain.Role; +import com.example.springmvc.securityLayer.domain.User; +import com.example.springmvc.securityLayer.repository.UserRepository; +import com.example.springmvc.securityLayer.service.RoleService; +import com.example.springmvc.securityLayer.service.UserService; +import lombok.AllArgsConstructor; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; +import org.springframework.security.core.userdetails.UsernameNotFoundException; +import org.springframework.security.crypto.password.PasswordEncoder; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import javax.persistence.EntityNotFoundException; +import java.util.ArrayList; +import java.util.Collections; +import java.util.Optional; + +@Service +@AllArgsConstructor +public class UserServiceImpl implements UserService { + + private final UserRepository userRepository; + private final RoleService roleService; + private final PasswordEncoder passwordEncoder; + + + @Override + public User findByUsername(String username) { + Optional byUsername = userRepository.findByUsername(username); + if (byUsername.isEmpty()) { + throw new UsernameNotFoundException(String.format("User '%s' not found", username)); + } + return byUsername.get(); + } + + @Override + @Transactional + public User saveUser(User user) { + Role userRole = roleService.findByName("ROLE_USER"); + user.setRoles(new ArrayList<>(Collections.singletonList(userRole))); + user.setPassword(passwordEncoder.encode(user.getPassword())); + + return userRepository.save(user); + } + + @Override + public Page findAllByPage(Pageable pageable) { + return userRepository.findAll(pageable); + } + + @Override + @Transactional + public void setEnable(Long userId, Boolean enable) { + Optional byId = userRepository.findById(userId); + if (byId.isEmpty()) { + throw new EntityNotFoundException("User witch id" + userId + " not found"); + } + User user = byId.get(); + user.setEnabled(enable); + userRepository.save(user); + } +} diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index b77550b..6c79ed7 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -10,4 +10,4 @@ spring.flyway.enabled=true spring.flyway.url=jdbc:postgresql://localhost:5435/spring spring.flyway.schemas=public spring.flyway.user=postgres -spring.flyway.password=postgrespass \ No newline at end of file +spring.flyway.password=postgrespass diff --git a/src/main/resources/db/migration/V1_user_and_role_create_table.sql b/src/main/resources/db/migration/V1_user_and_role_create_table.sql new file mode 100644 index 0000000..b14696d --- /dev/null +++ b/src/main/resources/db/migration/V1_user_and_role_create_table.sql @@ -0,0 +1,31 @@ +create table users +( + id bigserial, + username varchar(30) not null unique, + password varchar(80) not null, + email varchar(50) unique, + enabled boolean default true, + primary key (id) +); + +create table role +( + id serial, + name varchar(50) not null, + primary key (id) +); + +CREATE TABLE user_role +( + user_id bigint not null, + role_id int not null, + primary key (user_id, role_id), + foreign key (user_id) references users (id), + foreign key (role_id) references role (id) +); + +insert into role (name) +values ('ROLE_USER'), + ('ROLE_MANAGER'), + ('ROLE_ADMIN'); + diff --git a/src/main/resources/templates/fragment/header.html b/src/main/resources/templates/fragment/header.html index 7c9f96c..f82a7da 100644 --- a/src/main/resources/templates/fragment/header.html +++ b/src/main/resources/templates/fragment/header.html @@ -1,5 +1,5 @@ - + @@ -15,7 +15,7 @@ -
  • Категорию
  • - - - -
    - -
    - - - - + + + diff --git a/src/main/resources/templates/product/list.html b/src/main/resources/templates/product/list.html index 3be5d00..c5cd913 100644 --- a/src/main/resources/templates/product/list.html +++ b/src/main/resources/templates/product/list.html @@ -1,5 +1,5 @@ - + Продукты @@ -19,9 +19,9 @@
    Card title

    Cost

    Редактировать + th:href="@{/product/form(id=${product.id})}" sec:authorize="hasAnyRole('ROLE_ADMIN', 'ROLE_MANAGER')">Редактировать Удалить + th:href="@{/product/delete(id=${product.id})}" sec:authorize="hasAnyRole('ROLE_ADMIN', 'ROLE_MANAGER')">Удалить
    diff --git a/src/main/resources/templates/user/admin.html b/src/main/resources/templates/user/admin.html new file mode 100644 index 0000000..6ae7c67 --- /dev/null +++ b/src/main/resources/templates/user/admin.html @@ -0,0 +1,47 @@ + + + + + Пользователи + + + +
    Header
    +
    + +

    Пользователи

    + +
    + + + + + + + + + + + + + + + + +
    #ЛогинEmailРоли
    + + + + + Заблокировать + Активировать +
    +
    + +
    + Footer +
    +
    + + \ No newline at end of file diff --git a/src/main/resources/templates/user/registration.html b/src/main/resources/templates/user/registration.html new file mode 100644 index 0000000..30715f0 --- /dev/null +++ b/src/main/resources/templates/user/registration.html @@ -0,0 +1,56 @@ + + + + + Пользователи + + + +
    +
    Header
    + +
    +
    +
    + +
    + + + + +
    Регистрация
    + +
    + + +
    + +
    + + +
    +
    + + +
    + + + +
    + Уже зарегистрированы? + Войти +
    +
    + +
    +
    +
    + +
    + Footer +
    +
    + + + \ No newline at end of file diff --git a/src/test/java/com/example/springmvc/controller/ProductControllerTest.java b/src/test/java/com/example/springmvc/mvcLayer/controller/ProductControllerTest.java similarity index 94% rename from src/test/java/com/example/springmvc/controller/ProductControllerTest.java rename to src/test/java/com/example/springmvc/mvcLayer/controller/ProductControllerTest.java index 41ca301..a527d2a 100644 --- a/src/test/java/com/example/springmvc/controller/ProductControllerTest.java +++ b/src/test/java/com/example/springmvc/mvcLayer/controller/ProductControllerTest.java @@ -1,9 +1,6 @@ -package com.example.springmvc.controller; +package com.example.springmvc.mvcLayer.controller; -import com.example.springmvc.SpringMvcApplicationTests; -import com.example.springmvc.domain.Category; -import com.example.springmvc.domain.Product; -//import com.example.springmvc.service.ProductService; +//import com.example.springmvc.mvcLayer.service.ProductService; //import org.junit.jupiter.api.BeforeEach; //import org.junit.jupiter.api.Test; //import org.mockito.Mockito; From 4d55dca579be44b1e5fa1662d1c12ff90dfad665 Mon Sep 17 00:00:00 2001 From: sergeynikitin Date: Fri, 17 Sep 2021 10:57:39 +0300 Subject: [PATCH 2/7] implement Spring Security --- .../configuration/SecurityConfiguration.java | 8 +++++--- src/main/resources/templates/fragment/header.html | 10 +++++++--- 2 files changed, 12 insertions(+), 6 deletions(-) diff --git a/src/main/java/com/example/springmvc/securityLayer/configuration/SecurityConfiguration.java b/src/main/java/com/example/springmvc/securityLayer/configuration/SecurityConfiguration.java index 2604b32..af3008b 100644 --- a/src/main/java/com/example/springmvc/securityLayer/configuration/SecurityConfiguration.java +++ b/src/main/java/com/example/springmvc/securityLayer/configuration/SecurityConfiguration.java @@ -10,7 +10,6 @@ import org.springframework.security.core.userdetails.UserDetailsService; import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; -@Configuration @EnableWebSecurity @RequiredArgsConstructor public class SecurityConfiguration extends WebSecurityConfigurerAdapter { @@ -23,9 +22,12 @@ protected void configure(HttpSecurity http) throws Exception { .antMatchers("/user/admin/**").hasAnyRole("ADMIN") .antMatchers("/product/form/**", "/category/form/**").hasAnyRole("ADMIN", "MANAGER") .antMatchers("/login/**").authenticated() - .anyRequest().permitAll().and() + .anyRequest().permitAll() + .and() .formLogin() - .defaultSuccessUrl("/product/list"); + .defaultSuccessUrl("/product/list") + .and() + .logout().logoutSuccessUrl("/product/list"); } @Bean diff --git a/src/main/resources/templates/fragment/header.html b/src/main/resources/templates/fragment/header.html index f82a7da..0b9f6b5 100644 --- a/src/main/resources/templates/fragment/header.html +++ b/src/main/resources/templates/fragment/header.html @@ -15,7 +15,7 @@ -
    From 2e706d25b06e971b5b1028844f1f9246434f3ec8 Mon Sep 17 00:00:00 2001 From: sergeynikitin Date: Sat, 18 Sep 2021 14:09:35 +0300 Subject: [PATCH 3/7] refactor --- pom.xml | 6 --- .../controller/CategoryController.java | 4 +- .../controller/ProductController.java | 52 ++++++++++--------- .../domain/productMarket/Category.java | 2 + .../domain/productMarket/Product.java | 4 ++ .../domain/search/ProductSearchCondition.java | 15 +++--- .../mvcLayer/service/ProductService.java | 7 ++- .../service/impl/ProductServiceImpl.java | 50 +++++++----------- .../configuration/SecurityConfiguration.java | 3 +- .../controller/UserController.java | 4 -- .../springmvc/securityLayer/domain/Role.java | 1 + .../springmvc/securityLayer/domain/User.java | 10 +++- .../service/impl/UserDetailsServiceImpl.java | 2 +- .../resources/templates/category/form.html | 2 +- .../resources/templates/product/form.html | 5 +- 15 files changed, 80 insertions(+), 87 deletions(-) diff --git a/pom.xml b/pom.xml index 9d974e5..ace5fbb 100644 --- a/pom.xml +++ b/pom.xml @@ -52,12 +52,6 @@ 2.5.3 - - - - - - org.flywaydb flyway-core diff --git a/src/main/java/com/example/springmvc/mvcLayer/controller/CategoryController.java b/src/main/java/com/example/springmvc/mvcLayer/controller/CategoryController.java index a2a0ed3..2c38a96 100644 --- a/src/main/java/com/example/springmvc/mvcLayer/controller/CategoryController.java +++ b/src/main/java/com/example/springmvc/mvcLayer/controller/CategoryController.java @@ -31,10 +31,10 @@ public String addViewToCreateCategory(Model model, @ModelAttribute("error") Stri public RedirectView createCategory(@RequestParam String title, RedirectAttributes attributes) { if (title.isEmpty()) { attributes.addFlashAttribute("error", "Заполните поле название категории"); - return new RedirectView("/form"); + return new RedirectView(CATEGORY+FORM); } categoryService.addCategory(title); - return new RedirectView("/category/list"); + return new RedirectView(CATEGORY+LIST); } @GetMapping(LIST) diff --git a/src/main/java/com/example/springmvc/mvcLayer/controller/ProductController.java b/src/main/java/com/example/springmvc/mvcLayer/controller/ProductController.java index b4c7f73..8a08d25 100644 --- a/src/main/java/com/example/springmvc/mvcLayer/controller/ProductController.java +++ b/src/main/java/com/example/springmvc/mvcLayer/controller/ProductController.java @@ -1,10 +1,10 @@ package com.example.springmvc.mvcLayer.controller; +import com.example.springmvc.mvcLayer.domain.dto.ProductDto; import com.example.springmvc.mvcLayer.domain.productMarket.Category; import com.example.springmvc.mvcLayer.domain.productMarket.Product; import com.example.springmvc.mvcLayer.domain.search.ProductSearchCondition; -import com.example.springmvc.mvcLayer.domain.dto.ProductDto; import com.example.springmvc.mvcLayer.service.CategoryService; import com.example.springmvc.mvcLayer.service.ProductService; import lombok.AllArgsConstructor; @@ -13,12 +13,11 @@ import org.springframework.ui.Model; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; +import org.springframework.web.servlet.mvc.support.RedirectAttributes; import org.springframework.web.servlet.view.RedirectView; import javax.servlet.http.HttpServletRequest; import java.util.List; -import java.util.stream.Collectors; -import java.util.stream.IntStream; import static com.example.springmvc.mvcLayer.domain.constans.ConstanceName.*; @@ -32,16 +31,18 @@ public class ProductController { @GetMapping(LIST) - public String getListProducts(ProductSearchCondition searchCondition,Model model) { + public String getListProducts(@ModelAttribute ProductSearchCondition searchCondition, Model model) { Page page = productService.findAllBySearchConditional(searchCondition); - pagination(searchCondition, model, page); + productService.pagination(searchCondition, model, page); return "product/list"; } @GetMapping(FORM) - public String getProductForm(Model model, @RequestParam(required = false) Integer id) { + public String getProductForm(Model model, @RequestParam(required = false) Integer id, + @ModelAttribute("error") String error) { List categories = categoryService.findCategory(); model.addAttribute("categories", categories); + model.addAttribute("error", error); if (id != null) { ProductDto productDtoById = productService.findProductDtoById(id); model.addAttribute("product", productDtoById); @@ -52,10 +53,14 @@ public String getProductForm(Model model, @RequestParam(required = false) Intege } @PostMapping(FORM) - public RedirectView saveProduct(ProductDto product, + public RedirectView saveProduct(@ModelAttribute ProductDto product, RedirectAttributes attributes, @RequestParam(required = false) MultipartFile image) { + boolean redirectView = getRedirectView(product.getTitle(), product.getPrice(), attributes, image); + if (redirectView) { + return new RedirectView(PRODUCT+FORM); + } productService.saveProductAndImage(product, image); - return new RedirectView("/product/list"); + return new RedirectView(PRODUCT+LIST); } @ExceptionHandler(Exception.class) @@ -65,34 +70,31 @@ public String handleError(HttpServletRequest req, Exception ex) { } @GetMapping(DELETE) - public String deleteProductById(@RequestParam Integer id, ProductSearchCondition searchCondition, Model model) { - Page page = productService.deleteProductById(id, searchCondition); - pagination(searchCondition,model, page); - return "product/list"; + public RedirectView deleteProductById(@RequestParam Integer id) { + productService.deleteProductById(id); + return new RedirectView(PRODUCT+LIST); } @GetMapping(FILTER) - public String filterProductsByTitleAndByMaxAndMinPrice(ProductSearchCondition searchCondition, + public String filterProductsByTitleAndByMaxAndMinPrice(@ModelAttribute ProductSearchCondition searchCondition, @RequestParam(required = false) String title, @RequestParam(required = false) Integer minPrice, @RequestParam(required = false) Integer maxPrice, Model model) { Page page = productService.findProductsByTitleAndByMaxAndMinPriceBySearchConditional( searchCondition, title, minPrice, maxPrice); - pagination(searchCondition, model, page); - + productService.pagination(searchCondition, model, page); return ("product/list"); } - private void pagination(ProductSearchCondition searchCondition, Model model, Page page) { - int totalPages = page.getTotalPages(); - if (totalPages > 0) { - List pageNumbers = IntStream.rangeClosed(1, totalPages) - .boxed() - .collect(Collectors.toList()); - model.addAttribute("pageNumbers", pageNumbers); + private boolean getRedirectView(String title, Integer price, RedirectAttributes attributes, MultipartFile image) { + if (title.isEmpty()) { + attributes.addFlashAttribute("error", "Заполните поле с названием продукта"); + return true; + } + if (price==null) { + attributes.addFlashAttribute("error", "Заполните поле с ценой продукта"); + return true; } - model.addAttribute("pageNum", searchCondition.getPageNum()); - model.addAttribute("page", page); - model.addAttribute("pageSize", searchCondition.getPageSize()); + return false; } } \ No newline at end of file diff --git a/src/main/java/com/example/springmvc/mvcLayer/domain/productMarket/Category.java b/src/main/java/com/example/springmvc/mvcLayer/domain/productMarket/Category.java index 3bf6562..5730f1d 100644 --- a/src/main/java/com/example/springmvc/mvcLayer/domain/productMarket/Category.java +++ b/src/main/java/com/example/springmvc/mvcLayer/domain/productMarket/Category.java @@ -4,6 +4,7 @@ import lombok.*; import javax.persistence.*; +import javax.validation.constraints.NotBlank; import java.util.List; import java.util.Set; @@ -22,6 +23,7 @@ public class Category { private Integer id; @Column(name = "title") + @NotBlank(message = "Название обязательно") private String title; @ManyToOne diff --git a/src/main/java/com/example/springmvc/mvcLayer/domain/productMarket/Product.java b/src/main/java/com/example/springmvc/mvcLayer/domain/productMarket/Product.java index ed2e790..5ca0c1c 100644 --- a/src/main/java/com/example/springmvc/mvcLayer/domain/productMarket/Product.java +++ b/src/main/java/com/example/springmvc/mvcLayer/domain/productMarket/Product.java @@ -22,14 +22,18 @@ public class Product { @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "id") private Integer id; + @NotBlank(message = "Название обязательно") @Column(name = "title") private String title; + @NotNull(message = "Цена обязательна") @Column(name = "price") private Integer price; + @Column(name = "image") private String image; + @ManyToMany @JoinTable( name = "product_category", diff --git a/src/main/java/com/example/springmvc/mvcLayer/domain/search/ProductSearchCondition.java b/src/main/java/com/example/springmvc/mvcLayer/domain/search/ProductSearchCondition.java index 1e083fd..55364a9 100644 --- a/src/main/java/com/example/springmvc/mvcLayer/domain/search/ProductSearchCondition.java +++ b/src/main/java/com/example/springmvc/mvcLayer/domain/search/ProductSearchCondition.java @@ -1,19 +1,20 @@ package com.example.springmvc.mvcLayer.domain.search; +import com.example.springmvc.mvcLayer.domain.dto.ProductDto; import lombok.Data; +import org.springframework.data.domain.Page; import org.springframework.data.domain.Sort; +import java.util.Collections; +import java.util.List; + @Data public class ProductSearchCondition { private Sort.Direction sortDirection=Sort.Direction.ASC; private String sortField="title"; - private int pageNum; - private Integer pageSize=20; - -// private List pageNumbers = Collections.singletonList(1); -// -// private Page page; + private int pageNum =1; + private Integer pageSize=10; -// private String titleFilter; + private Page page; } diff --git a/src/main/java/com/example/springmvc/mvcLayer/service/ProductService.java b/src/main/java/com/example/springmvc/mvcLayer/service/ProductService.java index 61f9d16..dc85f07 100644 --- a/src/main/java/com/example/springmvc/mvcLayer/service/ProductService.java +++ b/src/main/java/com/example/springmvc/mvcLayer/service/ProductService.java @@ -4,6 +4,7 @@ import com.example.springmvc.mvcLayer.domain.search.ProductSearchCondition; import com.example.springmvc.mvcLayer.domain.dto.ProductDto; import org.springframework.data.domain.Page; +import org.springframework.ui.Model; import org.springframework.web.multipart.MultipartFile; import java.util.Optional; @@ -17,18 +18,16 @@ public interface ProductService { Product saveProductAndImage(ProductDto product, MultipartFile image); -// List findProducts(); - Optional findProductById(Integer id); ProductDto findProductDtoById(Integer id); - Page deleteProductById(Integer id,ProductSearchCondition searchCondition); + void deleteProductById(Integer id); Set findProductsDtoByCategoryId(Integer categoryId); - // Page findProductsByTitleAndByMaxAndMinPriceBySearchConditional( ProductSearchCondition searchCondition, String title, Integer minPrice, Integer maxPrice); + void pagination(ProductSearchCondition searchCondition, Model model, Page page); } \ No newline at end of file diff --git a/src/main/java/com/example/springmvc/mvcLayer/service/impl/ProductServiceImpl.java b/src/main/java/com/example/springmvc/mvcLayer/service/impl/ProductServiceImpl.java index 998a4a1..a434cb4 100644 --- a/src/main/java/com/example/springmvc/mvcLayer/service/impl/ProductServiceImpl.java +++ b/src/main/java/com/example/springmvc/mvcLayer/service/impl/ProductServiceImpl.java @@ -1,6 +1,5 @@ package com.example.springmvc.mvcLayer.service.impl; -//import com.example.springmvc.mvcLayer.converter.Converter; import com.example.springmvc.mvcLayer.converter.ProductConverter; import com.example.springmvc.mvcLayer.domain.productMarket.Product; import com.example.springmvc.mvcLayer.domain.search.ProductSearchCondition; @@ -15,10 +14,14 @@ import org.springframework.data.domain.Sort; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import org.springframework.ui.Model; import org.springframework.web.multipart.MultipartFile; +import org.springframework.web.servlet.mvc.support.RedirectAttributes; import java.nio.file.Path; import java.util.*; +import java.util.stream.Collectors; +import java.util.stream.IntStream; @AllArgsConstructor @Service @@ -55,11 +58,6 @@ private Product convertProductDtoInProduct(ProductDto productDto) { return ProductConverter.dtoProductConvertToProduct(productDto, product); } -// @Override -// public List findProducts() { -// return productRepository.findAll(); -// } - @Override public Optional findProductById(Integer id) { return productRepository.findById(id); @@ -69,16 +67,12 @@ public Optional findProductById(Integer id) { @Transactional public ProductDto findProductDtoById(Integer id) { Optional productById = findProductById(id); - return ProductConverter.productConvertToDtoProduct(productById.get()); } @Override - @Transactional - public Page deleteProductById(Integer id,ProductSearchCondition searchCondition) { + public void deleteProductById(Integer id) { productRepository.deleteById(id); - Pageable pageable = getPageable(searchCondition); - return productRepository.findAll(pageable); } @Override @@ -99,7 +93,7 @@ public Page findAllBySearchConditional(ProductSearchCondition searchCon } private Pageable getPageable(ProductSearchCondition searchCondition) { - return PageRequest.of(searchCondition.getPageNum(), + return PageRequest.of(searchCondition.getPageNum()-1, searchCondition.getPageSize(), Sort.by(searchCondition.getSortDirection(), searchCondition.getSortField())); } @@ -114,26 +108,20 @@ public Page findProductsByTitleAndByMaxAndMinPriceBySearchConditional( maxPrice = Integer.MAX_VALUE; } Pageable pageRequest = getPageable(searchCondition); - return productRepository.findProductsByTitleContainingIgnoreCaseAndPriceBetween(title,minPrice,maxPrice,pageRequest); } - - -// -// private boolean getRedirectView(String title, String price, RedirectAttributes attributes, MultipartFile image) { -// if (title.isEmpty()) { -// attributes.addFlashAttribute("error", "Заполните поле с названием продукта"); -// return true; -// } -// if (price.isEmpty()) { -// attributes.addFlashAttribute("error", "Заполните поле с ценой продукта"); -// return true; -// } -// if (image.isEmpty()) { -// attributes.addFlashAttribute("error", "Заполните поле с фотографией продукта"); -// return true; -// } -// return false; -// } + @Override + public void pagination(ProductSearchCondition searchCondition, Model model, Page page) { + int totalPages = page.getTotalPages(); + if (totalPages > 0) { + List pageNumbers = IntStream.rangeClosed(1, totalPages) + .boxed() + .collect(Collectors.toList()); + model.addAttribute("pageNumbers", pageNumbers); + } + model.addAttribute("pageNum", searchCondition.getPageNum()); + model.addAttribute("page", page); + model.addAttribute("pageSize", searchCondition.getPageSize()); + } } \ No newline at end of file diff --git a/src/main/java/com/example/springmvc/securityLayer/configuration/SecurityConfiguration.java b/src/main/java/com/example/springmvc/securityLayer/configuration/SecurityConfiguration.java index af3008b..f641930 100644 --- a/src/main/java/com/example/springmvc/securityLayer/configuration/SecurityConfiguration.java +++ b/src/main/java/com/example/springmvc/securityLayer/configuration/SecurityConfiguration.java @@ -2,7 +2,6 @@ import lombok.RequiredArgsConstructor; import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; import org.springframework.security.authentication.dao.DaoAuthenticationProvider; import org.springframework.security.config.annotation.web.builders.HttpSecurity; import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; @@ -32,7 +31,7 @@ protected void configure(HttpSecurity http) throws Exception { @Bean public BCryptPasswordEncoder passwordEncoder() { - return new BCryptPasswordEncoder(8); + return new BCryptPasswordEncoder(); } @Bean diff --git a/src/main/java/com/example/springmvc/securityLayer/controller/UserController.java b/src/main/java/com/example/springmvc/securityLayer/controller/UserController.java index b244d51..b948ab2 100644 --- a/src/main/java/com/example/springmvc/securityLayer/controller/UserController.java +++ b/src/main/java/com/example/springmvc/securityLayer/controller/UserController.java @@ -23,12 +23,9 @@ public class UserController { @GetMapping("/admin") public String getAllUsers(@RequestParam(required = false) Integer pageNum, Model model) { final int pageSize = 5; - Pageable pageRequest = PageRequest.of(pageNum == null ? 0 : pageNum, pageSize); Page page = userService.findAllByPage(pageRequest); - model.addAttribute("page", page); - return "user/admin"; } @@ -47,7 +44,6 @@ public String registrationUser(User user) { @GetMapping("/enable") public String setEnableUser(@RequestParam Long userId, @RequestParam Boolean enable) { userService.setEnable(userId, enable); - return "redirect:/user/admin"; } } \ No newline at end of file diff --git a/src/main/java/com/example/springmvc/securityLayer/domain/Role.java b/src/main/java/com/example/springmvc/securityLayer/domain/Role.java index 075f1ad..6d76a5a 100644 --- a/src/main/java/com/example/springmvc/securityLayer/domain/Role.java +++ b/src/main/java/com/example/springmvc/securityLayer/domain/Role.java @@ -14,6 +14,7 @@ public class Role { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; + private String name; } diff --git a/src/main/java/com/example/springmvc/securityLayer/domain/User.java b/src/main/java/com/example/springmvc/securityLayer/domain/User.java index 204c9bd..29559d0 100644 --- a/src/main/java/com/example/springmvc/securityLayer/domain/User.java +++ b/src/main/java/com/example/springmvc/securityLayer/domain/User.java @@ -7,23 +7,31 @@ import javax.persistence.*; import javax.validation.constraints.Email; +import javax.validation.constraints.Min; import javax.validation.constraints.NotBlank; +import javax.validation.constraints.Size; import java.util.Collection; @Data @Entity @NoArgsConstructor @Table(name = "users") -@EqualsAndHashCode(exclude = {"id"}) +@ToString(exclude = "roles") +@EqualsAndHashCode(exclude = {"id", "roles"}) public class User { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; + @NotBlank(message = "Имя обязательно") +// @Size(min = 1,max = 30) private String username; +// @Size(min = 6,max = 80) + @NotBlank(message = "Пароль обязательно") private String password; + @NotBlank(message = "email обязательно") private String email; private boolean enabled = true; diff --git a/src/main/java/com/example/springmvc/securityLayer/service/impl/UserDetailsServiceImpl.java b/src/main/java/com/example/springmvc/securityLayer/service/impl/UserDetailsServiceImpl.java index a3d00bc..64dc8e3 100644 --- a/src/main/java/com/example/springmvc/securityLayer/service/impl/UserDetailsServiceImpl.java +++ b/src/main/java/com/example/springmvc/securityLayer/service/impl/UserDetailsServiceImpl.java @@ -13,6 +13,7 @@ import org.springframework.transaction.annotation.Transactional; import java.util.Collection; +import java.util.Stack; import java.util.stream.Collectors; @Component @@ -26,7 +27,6 @@ public class UserDetailsServiceImpl implements UserDetailsService { public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException { com.example.springmvc.securityLayer.domain.User user = userRepository.findByUsername(username) .orElseThrow(() -> new UsernameNotFoundException(String.format("User '%s' not found", username))); - return new User( user.getUsername(), user.getPassword(), user.isEnabled(), true, true, true, diff --git a/src/main/resources/templates/category/form.html b/src/main/resources/templates/category/form.html index 2768f44..7567887 100644 --- a/src/main/resources/templates/category/form.html +++ b/src/main/resources/templates/category/form.html @@ -12,9 +12,9 @@

    Добавить категорию

    -

    +

    diff --git a/src/main/resources/templates/product/form.html b/src/main/resources/templates/product/form.html index d685026..2f47389 100644 --- a/src/main/resources/templates/product/form.html +++ b/src/main/resources/templates/product/form.html @@ -12,7 +12,7 @@

    Добавление/Редактирование продукта

    - +

    @@ -22,8 +22,7 @@

    - +

    From 67c06e7ff19998b3b3bf28d53d6f0f919e99bf55 Mon Sep 17 00:00:00 2001 From: sergeynikitin Date: Sat, 18 Sep 2021 15:44:51 +0300 Subject: [PATCH 4/7] refactor --- .../controller/CategoryController.java | 20 +++---- .../controller/rest/CategoryController.java | 46 --------------- .../controller/rest/ProductController.java | 52 ---------------- .../mvcLayer/converter/ConverterCategory.java | 17 ------ .../domain/search/ProductSearchCondition.java | 2 +- .../repository/CategoryRepository.java | 6 +- .../repository/ProductRepository.java | 2 - .../mvcLayer/service/CategoryService.java | 16 +---- .../mvcLayer/service/ProductService.java | 5 -- .../service/impl/CategoryServiceImpl.java | 59 ------------------- .../service/impl/ProductServiceImpl.java | 17 ------ .../resources/templates/category/list.html | 2 +- .../resources/templates/filter/filter.html | 41 ++++++------- .../resources/templates/product/list.html | 1 + 14 files changed, 41 insertions(+), 245 deletions(-) delete mode 100644 src/main/java/com/example/springmvc/mvcLayer/controller/rest/CategoryController.java delete mode 100644 src/main/java/com/example/springmvc/mvcLayer/controller/rest/ProductController.java delete mode 100644 src/main/java/com/example/springmvc/mvcLayer/converter/ConverterCategory.java diff --git a/src/main/java/com/example/springmvc/mvcLayer/controller/CategoryController.java b/src/main/java/com/example/springmvc/mvcLayer/controller/CategoryController.java index 2c38a96..0db7995 100644 --- a/src/main/java/com/example/springmvc/mvcLayer/controller/CategoryController.java +++ b/src/main/java/com/example/springmvc/mvcLayer/controller/CategoryController.java @@ -19,7 +19,7 @@ @RequestMapping(CATEGORY) public class CategoryController { - private CategoryService categoryService; + private final CategoryService categoryService; @GetMapping(FORM) public String addViewToCreateCategory(Model model, @ModelAttribute("error") String error) { @@ -44,13 +44,13 @@ public String findAllCategory(Model model) { return "category/list"; } - @GetMapping(FIND)//TODO: переделать чтобы возвращало page - public String findProductByCategoryId(@RequestParam Integer categoryId, Model model) { - List products = categoryService.findProductsByCategoryId(categoryId); - List category = categoryService.findCategory(); - model.addAttribute("category", category); - model.addAttribute("products", products); - - return "product/list"; - } +// @GetMapping(FIND)// +// public String findProductByCategoryId(@RequestParam Integer categoryId, Model model) { +// List products = categoryService.findProductsByCategoryId(categoryId); +// List category = categoryService.findCategory(); +// model.addAttribute("category", category); +// model.addAttribute("products", products); +// +// return "product/list"; +// } } diff --git a/src/main/java/com/example/springmvc/mvcLayer/controller/rest/CategoryController.java b/src/main/java/com/example/springmvc/mvcLayer/controller/rest/CategoryController.java deleted file mode 100644 index 0d1dcad..0000000 --- a/src/main/java/com/example/springmvc/mvcLayer/controller/rest/CategoryController.java +++ /dev/null @@ -1,46 +0,0 @@ -package com.example.springmvc.mvcLayer.controller.rest; - - -import com.example.springmvc.mvcLayer.domain.productMarket.Category; -import com.example.springmvc.mvcLayer.service.CategoryService; -import lombok.AllArgsConstructor; -import org.springframework.http.HttpStatus; -import org.springframework.web.bind.annotation.*; - -import java.util.List; - -import static com.example.springmvc.mvcLayer.domain.constans.ConstanceName.*; -@AllArgsConstructor -@RequestMapping(API_V1+CATEGORY) -@RestController("restCategoryController") -public class CategoryController { - CategoryService categoryService; - - @GetMapping - public List getCategories() { - return categoryService.findCategory(); - } - - @GetMapping("/{id}") - public Category getCategoryById(@PathVariable Integer id) { - return categoryService.findCategoryById(id).get(); - } - - @PostMapping - public int addCategory(@RequestBody String title) { - categoryService.addCategory(title); - return HttpStatus.OK.value(); - } - - @PutMapping("/{id}") - public int updateCategory(@PathVariable Integer id, @RequestBody String title) { - categoryService.updateCategory(id, title); - return HttpStatus.OK.value(); - } - - @DeleteMapping("/{id}") - public int deleteCategory(@PathVariable Integer id) { - categoryService.deleteCategory(id); - return HttpStatus.OK.value(); - } -} \ No newline at end of file diff --git a/src/main/java/com/example/springmvc/mvcLayer/controller/rest/ProductController.java b/src/main/java/com/example/springmvc/mvcLayer/controller/rest/ProductController.java deleted file mode 100644 index 577bdc7..0000000 --- a/src/main/java/com/example/springmvc/mvcLayer/controller/rest/ProductController.java +++ /dev/null @@ -1,52 +0,0 @@ -package com.example.springmvc.mvcLayer.controller.rest; - -import com.example.springmvc.mvcLayer.domain.productMarket.Product; -import com.example.springmvc.mvcLayer.domain.search.ProductSearchCondition; -import com.example.springmvc.mvcLayer.domain.dto.ProductDto; -import com.example.springmvc.mvcLayer.service.ProductService; -import lombok.AllArgsConstructor; -import org.springframework.data.domain.Page; -import org.springframework.http.HttpStatus; -import org.springframework.web.bind.annotation.*; - -import static com.example.springmvc.mvcLayer.domain.constans.ConstanceName.*; - -@AllArgsConstructor -@RequestMapping(API_V1+PRODUCT) -@RestController("restProductController") -public class ProductController { - - private ProductService productService; - - @GetMapping("/{id}") - private ProductDto getProductById(@PathVariable Integer id) { - return productService.findProductDtoById(id); - } -// -// @GetMapping -// public List getAllProducts() { -// return productService.findProducts(); -// } - - @PostMapping - public Page getAllProducts(@RequestBody ProductSearchCondition searchCondition) { - return productService.findAllBySearchConditional(searchCondition); - } - - - @PutMapping - public Product updateProduct(@RequestBody Product product) { - return productService.saveProduct(product); - } - - @PostMapping("/add") - public Product addProduct(@RequestBody Product product) { - return productService.saveProduct(product); - } - - @DeleteMapping("/{id}") - public int deleteProduct(@PathVariable Integer id) { -// productService.deleteProductById(id); - return HttpStatus.OK.value(); - } -} diff --git a/src/main/java/com/example/springmvc/mvcLayer/converter/ConverterCategory.java b/src/main/java/com/example/springmvc/mvcLayer/converter/ConverterCategory.java deleted file mode 100644 index 89748b4..0000000 --- a/src/main/java/com/example/springmvc/mvcLayer/converter/ConverterCategory.java +++ /dev/null @@ -1,17 +0,0 @@ -package com.example.springmvc.mvcLayer.converter; - -import com.example.springmvc.mvcLayer.domain.productMarket.Category; -import com.example.springmvc.mvcLayer.domain.dto.CategoryDto; -import com.example.springmvc.mvcLayer.service.ProductService; - -public class ConverterCategory { - private static ProductService productService; - - public static CategoryDto convert(Category category){ - return CategoryDto.builder().id(category.getId()) - .title(category.getTitle()) - .productsDto(productService.findProductsDtoByCategoryId(category.getId())) - .build(); - - } -} diff --git a/src/main/java/com/example/springmvc/mvcLayer/domain/search/ProductSearchCondition.java b/src/main/java/com/example/springmvc/mvcLayer/domain/search/ProductSearchCondition.java index 55364a9..93e6769 100644 --- a/src/main/java/com/example/springmvc/mvcLayer/domain/search/ProductSearchCondition.java +++ b/src/main/java/com/example/springmvc/mvcLayer/domain/search/ProductSearchCondition.java @@ -16,5 +16,5 @@ public class ProductSearchCondition { private int pageNum =1; private Integer pageSize=10; - private Page page; +// private Page page; } diff --git a/src/main/java/com/example/springmvc/mvcLayer/repository/CategoryRepository.java b/src/main/java/com/example/springmvc/mvcLayer/repository/CategoryRepository.java index ee30f4a..84a11ed 100644 --- a/src/main/java/com/example/springmvc/mvcLayer/repository/CategoryRepository.java +++ b/src/main/java/com/example/springmvc/mvcLayer/repository/CategoryRepository.java @@ -1,6 +1,9 @@ package com.example.springmvc.mvcLayer.repository; import com.example.springmvc.mvcLayer.domain.productMarket.Category; +import com.example.springmvc.mvcLayer.domain.productMarket.Product; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; @@ -12,7 +15,8 @@ public interface CategoryRepository extends JpaRepository { Optional findCategoryByTitle(String title); - Set findByProducts_Id(Integer productId); + +// Set findByProducts_Id(Integer productId); // Page findProductsByIdCategory(Pageable pageable); diff --git a/src/main/java/com/example/springmvc/mvcLayer/repository/ProductRepository.java b/src/main/java/com/example/springmvc/mvcLayer/repository/ProductRepository.java index 627bebe..1f763c8 100644 --- a/src/main/java/com/example/springmvc/mvcLayer/repository/ProductRepository.java +++ b/src/main/java/com/example/springmvc/mvcLayer/repository/ProductRepository.java @@ -19,8 +19,6 @@ public interface ProductRepository extends JpaRepository { void deleteById(Integer id); - Set findByCategories_Id(Integer categoryId); - Page findAll(Pageable pageable); Page findProductsByTitleContainingIgnoreCaseAndPriceBetween( diff --git a/src/main/java/com/example/springmvc/mvcLayer/service/CategoryService.java b/src/main/java/com/example/springmvc/mvcLayer/service/CategoryService.java index d71c921..116c086 100644 --- a/src/main/java/com/example/springmvc/mvcLayer/service/CategoryService.java +++ b/src/main/java/com/example/springmvc/mvcLayer/service/CategoryService.java @@ -3,6 +3,8 @@ import com.example.springmvc.mvcLayer.domain.productMarket.Category; import com.example.springmvc.mvcLayer.domain.productMarket.Product; import com.example.springmvc.mvcLayer.domain.dto.CategoryDto; +import com.example.springmvc.mvcLayer.domain.search.ProductSearchCondition; +import org.springframework.data.domain.Page; import java.util.List; import java.util.Optional; @@ -10,21 +12,7 @@ public interface CategoryService { - void deleteCategory(Integer id); - - void updateCategory(Integer id,String title); - List findCategory(); void addCategory(String title); - - ListfindProductsByCategoryId(Integer id); - - Optional findCategoryById(Integer id); - - Set getCategoryDtoByProductId(Integer productId); - - Set findCategoriesByProductId(Integer id); - -// Page findAllBySearchConditional(ProductSearchCondition searchCondition); } diff --git a/src/main/java/com/example/springmvc/mvcLayer/service/ProductService.java b/src/main/java/com/example/springmvc/mvcLayer/service/ProductService.java index dc85f07..4f31946 100644 --- a/src/main/java/com/example/springmvc/mvcLayer/service/ProductService.java +++ b/src/main/java/com/example/springmvc/mvcLayer/service/ProductService.java @@ -8,14 +8,11 @@ import org.springframework.web.multipart.MultipartFile; import java.util.Optional; -import java.util.Set; public interface ProductService { Page findAllBySearchConditional(ProductSearchCondition searchCondition); - Product saveProduct(Product product); - Product saveProductAndImage(ProductDto product, MultipartFile image); Optional findProductById(Integer id); @@ -24,8 +21,6 @@ public interface ProductService { void deleteProductById(Integer id); - Set findProductsDtoByCategoryId(Integer categoryId); - Page findProductsByTitleAndByMaxAndMinPriceBySearchConditional( ProductSearchCondition searchCondition, String title, Integer minPrice, Integer maxPrice); diff --git a/src/main/java/com/example/springmvc/mvcLayer/service/impl/CategoryServiceImpl.java b/src/main/java/com/example/springmvc/mvcLayer/service/impl/CategoryServiceImpl.java index f491cd2..9ce27e0 100644 --- a/src/main/java/com/example/springmvc/mvcLayer/service/impl/CategoryServiceImpl.java +++ b/src/main/java/com/example/springmvc/mvcLayer/service/impl/CategoryServiceImpl.java @@ -1,43 +1,20 @@ package com.example.springmvc.mvcLayer.service.impl; -//import com.example.springmvc.mvcLayer.converter.Converter; -//import com.example.springmvc.mvcLayer.converter.ConverterCategory; import com.example.springmvc.mvcLayer.domain.productMarket.Category; -import com.example.springmvc.mvcLayer.domain.productMarket.Product; -import com.example.springmvc.mvcLayer.domain.dto.CategoryDto; import com.example.springmvc.mvcLayer.repository.CategoryRepository; import com.example.springmvc.mvcLayer.service.CategoryService; import lombok.AllArgsConstructor; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; -import java.util.HashSet; import java.util.List; import java.util.Optional; -import java.util.Set; @Service @AllArgsConstructor public class CategoryServiceImpl implements CategoryService { private final CategoryRepository categoryRepository; -// private final ProductService productService; - - @Override - public void deleteCategory(Integer id) { - categoryRepository.deleteById(id); - } - - @Override - @Transactional - public void updateCategory(Integer id, String title) { - Optional byId = categoryRepository.findById(id); - if (byId.isPresent()) { - Category category = byId.get(); - category.setTitle(title); - categoryRepository.save(category); - } - } @Override public List findCategory() { @@ -52,40 +29,4 @@ public void addCategory(String title) { categoryRepository.save(new Category(title)); } } - - @Override - public List findProductsByCategoryId(Integer id) { - Optional byId = categoryRepository.findById(id); - Category category = byId.get(); - return category.getProducts(); - } - - @Override - public Optional findCategoryById(Integer id) { - return categoryRepository.findById(id); - } - - @Override - public Set getCategoryDtoByProductId(Integer productId) { - Set categoriesByProductId = categoryRepository.findByProducts_Id(productId); - SetcategoryDtoSet=new HashSet<>(); - for (Category category : categoriesByProductId) { - CategoryDto convert = convert(category); - categoryDtoSet.add(convert); - } - return categoryDtoSet; - } - - @Override - public Set findCategoriesByProductId(Integer id) { - return categoryRepository.findByProducts_Id(id); - } - - public CategoryDto convert(Category category){ - return CategoryDto.builder().id(category.getId()) - .title(category.getTitle()) -// .productsDto(productService.findProductsDtoByCategoryId(category.getId())) - .build(); - } - } \ No newline at end of file diff --git a/src/main/java/com/example/springmvc/mvcLayer/service/impl/ProductServiceImpl.java b/src/main/java/com/example/springmvc/mvcLayer/service/impl/ProductServiceImpl.java index a434cb4..aa41368 100644 --- a/src/main/java/com/example/springmvc/mvcLayer/service/impl/ProductServiceImpl.java +++ b/src/main/java/com/example/springmvc/mvcLayer/service/impl/ProductServiceImpl.java @@ -16,7 +16,6 @@ import org.springframework.transaction.annotation.Transactional; import org.springframework.ui.Model; import org.springframework.web.multipart.MultipartFile; -import org.springframework.web.servlet.mvc.support.RedirectAttributes; import java.nio.file.Path; import java.util.*; @@ -29,11 +28,6 @@ public class ProductServiceImpl implements ProductService { private final ProductRepository productRepository; - @Override - public Product saveProduct(Product product) { - return productRepository.save(product); - } - @Override @Transactional public Product saveProductAndImage(ProductDto productDto, MultipartFile image) { @@ -75,17 +69,6 @@ public void deleteProductById(Integer id) { productRepository.deleteById(id); } - @Override - public Set findProductsDtoByCategoryId(Integer categoryId) { - Set productsByCategoryId = productRepository.findByCategories_Id(categoryId); - SetproductDtoSet=new HashSet<>(); - for (Product product : productsByCategoryId) { - ProductDto productDto = ProductConverter.productConvertToDtoProduct(product); - productDtoSet.add(productDto); - } - return productDtoSet; - } - @Override public Page findAllBySearchConditional(ProductSearchCondition searchCondition) { Pageable pageRequest = getPageable(searchCondition); diff --git a/src/main/resources/templates/category/list.html b/src/main/resources/templates/category/list.html index 8a0ca8f..8522501 100644 --- a/src/main/resources/templates/category/list.html +++ b/src/main/resources/templates/category/list.html @@ -9,7 +9,7 @@
    Header
    -
    filter
    +
    diff --git a/src/main/resources/templates/filter/filter.html b/src/main/resources/templates/filter/filter.html index 44c1709..78d361e 100644 --- a/src/main/resources/templates/filter/filter.html +++ b/src/main/resources/templates/filter/filter.html @@ -9,15 +9,16 @@ \ No newline at end of file diff --git a/src/main/resources/templates/product/list.html b/src/main/resources/templates/product/list.html index c5cd913..5f7214b 100644 --- a/src/main/resources/templates/product/list.html +++ b/src/main/resources/templates/product/list.html @@ -10,6 +10,7 @@
    Header
    filter
    +
    Date: Thu, 23 Sep 2021 18:02:04 +0300 Subject: [PATCH 5/7] refactor --- .../springmvc/mvcLayer/component/ShoppingCart.java | 1 - .../configuration/SecurityConfiguration.java | 2 +- .../mvcLayer/controller/CategoryController.java | 3 +-- .../mvcLayer/controller/ProductController.java | 4 ++-- .../controller/UserController.java | 6 +++--- .../Cart.java => controller/advice/GlobalCart.java} | 4 ++-- .../mvcLayer/converter/ProductConverter.java | 2 +- .../domain/{productMarket => }/Category.java | 2 +- .../mvcLayer/domain/{productMarket => }/Product.java | 2 +- .../springmvc/mvcLayer/domain/dto/ProductDto.java | 2 +- .../domain => mvcLayer/domain/security}/Role.java | 2 +- .../domain => mvcLayer/domain/security}/User.java | 5 +---- .../mvcLayer/repository/CategoryRepository.java | 6 +----- .../mvcLayer/repository/ProductRepository.java | 3 +-- .../repository/RoleRepository.java | 5 ++--- .../repository/UserRepository.java | 7 ++----- .../springmvc/mvcLayer/service/CategoryService.java | 8 +------- .../springmvc/mvcLayer/service/ProductService.java | 2 +- .../springmvc/mvcLayer/service/RoleService.java | 8 ++++++++ .../service/UserService.java | 4 ++-- .../mvcLayer/service/impl/CategoryServiceImpl.java | 2 +- .../mvcLayer/service/impl/ProductServiceImpl.java | 2 +- .../service/impl/security}/RoleServiceImpl.java | 8 ++++---- .../impl/security}/UserDetailsServiceImpl.java | 9 ++++----- .../service/impl/security}/UserServiceImpl.java | 12 ++++++------ .../springmvc/securityLayer/service/RoleService.java | 8 -------- 26 files changed, 49 insertions(+), 70 deletions(-) rename src/main/java/com/example/springmvc/{securityLayer => mvcLayer}/configuration/SecurityConfiguration.java (96%) rename src/main/java/com/example/springmvc/{securityLayer => mvcLayer}/controller/UserController.java (89%) rename src/main/java/com/example/springmvc/mvcLayer/{sessionItem/Cart.java => controller/advice/GlobalCart.java} (79%) rename src/main/java/com/example/springmvc/mvcLayer/domain/{productMarket => }/Category.java (94%) rename src/main/java/com/example/springmvc/mvcLayer/domain/{productMarket => }/Product.java (95%) rename src/main/java/com/example/springmvc/{securityLayer/domain => mvcLayer/domain/security}/Role.java (83%) rename src/main/java/com/example/springmvc/{securityLayer/domain => mvcLayer/domain/security}/User.java (85%) rename src/main/java/com/example/springmvc/{securityLayer => mvcLayer}/repository/RoleRepository.java (62%) rename src/main/java/com/example/springmvc/{securityLayer => mvcLayer}/repository/UserRepository.java (52%) create mode 100644 src/main/java/com/example/springmvc/mvcLayer/service/RoleService.java rename src/main/java/com/example/springmvc/{securityLayer => mvcLayer}/service/UserService.java (73%) rename src/main/java/com/example/springmvc/{securityLayer/service/impl => mvcLayer/service/impl/security}/RoleServiceImpl.java (71%) rename src/main/java/com/example/springmvc/{securityLayer/service/impl => mvcLayer/service/impl/security}/UserDetailsServiceImpl.java (82%) rename src/main/java/com/example/springmvc/{securityLayer/service/impl => mvcLayer/service/impl/security}/UserServiceImpl.java (83%) delete mode 100644 src/main/java/com/example/springmvc/securityLayer/service/RoleService.java diff --git a/src/main/java/com/example/springmvc/mvcLayer/component/ShoppingCart.java b/src/main/java/com/example/springmvc/mvcLayer/component/ShoppingCart.java index ecf9c21..db3d3d4 100644 --- a/src/main/java/com/example/springmvc/mvcLayer/component/ShoppingCart.java +++ b/src/main/java/com/example/springmvc/mvcLayer/component/ShoppingCart.java @@ -1,7 +1,6 @@ package com.example.springmvc.mvcLayer.component; import com.example.springmvc.mvcLayer.domain.cart.CartItem; -import lombok.Getter; import lombok.NoArgsConstructor; import org.springframework.stereotype.Component; diff --git a/src/main/java/com/example/springmvc/securityLayer/configuration/SecurityConfiguration.java b/src/main/java/com/example/springmvc/mvcLayer/configuration/SecurityConfiguration.java similarity index 96% rename from src/main/java/com/example/springmvc/securityLayer/configuration/SecurityConfiguration.java rename to src/main/java/com/example/springmvc/mvcLayer/configuration/SecurityConfiguration.java index f641930..dcf4bae 100644 --- a/src/main/java/com/example/springmvc/securityLayer/configuration/SecurityConfiguration.java +++ b/src/main/java/com/example/springmvc/mvcLayer/configuration/SecurityConfiguration.java @@ -1,4 +1,4 @@ -package com.example.springmvc.securityLayer.configuration; +package com.example.springmvc.mvcLayer.configuration; import lombok.RequiredArgsConstructor; import org.springframework.context.annotation.Bean; diff --git a/src/main/java/com/example/springmvc/mvcLayer/controller/CategoryController.java b/src/main/java/com/example/springmvc/mvcLayer/controller/CategoryController.java index 0db7995..1b757ab 100644 --- a/src/main/java/com/example/springmvc/mvcLayer/controller/CategoryController.java +++ b/src/main/java/com/example/springmvc/mvcLayer/controller/CategoryController.java @@ -1,7 +1,6 @@ package com.example.springmvc.mvcLayer.controller; -import com.example.springmvc.mvcLayer.domain.productMarket.Category; -import com.example.springmvc.mvcLayer.domain.productMarket.Product; +import com.example.springmvc.mvcLayer.domain.Category; import com.example.springmvc.mvcLayer.service.CategoryService; import lombok.AllArgsConstructor; import org.springframework.stereotype.Controller; diff --git a/src/main/java/com/example/springmvc/mvcLayer/controller/ProductController.java b/src/main/java/com/example/springmvc/mvcLayer/controller/ProductController.java index 8a08d25..7818739 100644 --- a/src/main/java/com/example/springmvc/mvcLayer/controller/ProductController.java +++ b/src/main/java/com/example/springmvc/mvcLayer/controller/ProductController.java @@ -2,8 +2,8 @@ import com.example.springmvc.mvcLayer.domain.dto.ProductDto; -import com.example.springmvc.mvcLayer.domain.productMarket.Category; -import com.example.springmvc.mvcLayer.domain.productMarket.Product; +import com.example.springmvc.mvcLayer.domain.Category; +import com.example.springmvc.mvcLayer.domain.Product; import com.example.springmvc.mvcLayer.domain.search.ProductSearchCondition; import com.example.springmvc.mvcLayer.service.CategoryService; import com.example.springmvc.mvcLayer.service.ProductService; diff --git a/src/main/java/com/example/springmvc/securityLayer/controller/UserController.java b/src/main/java/com/example/springmvc/mvcLayer/controller/UserController.java similarity index 89% rename from src/main/java/com/example/springmvc/securityLayer/controller/UserController.java rename to src/main/java/com/example/springmvc/mvcLayer/controller/UserController.java index b948ab2..a03fec1 100644 --- a/src/main/java/com/example/springmvc/securityLayer/controller/UserController.java +++ b/src/main/java/com/example/springmvc/mvcLayer/controller/UserController.java @@ -1,7 +1,7 @@ -package com.example.springmvc.securityLayer.controller; +package com.example.springmvc.mvcLayer.controller; -import com.example.springmvc.securityLayer.domain.User; -import com.example.springmvc.securityLayer.service.UserService; +import com.example.springmvc.mvcLayer.domain.security.User; +import com.example.springmvc.mvcLayer.service.UserService; import lombok.AllArgsConstructor; import org.springframework.data.domain.Page; import org.springframework.data.domain.PageRequest; diff --git a/src/main/java/com/example/springmvc/mvcLayer/sessionItem/Cart.java b/src/main/java/com/example/springmvc/mvcLayer/controller/advice/GlobalCart.java similarity index 79% rename from src/main/java/com/example/springmvc/mvcLayer/sessionItem/Cart.java rename to src/main/java/com/example/springmvc/mvcLayer/controller/advice/GlobalCart.java index 266cf48..d78ddd6 100644 --- a/src/main/java/com/example/springmvc/mvcLayer/sessionItem/Cart.java +++ b/src/main/java/com/example/springmvc/mvcLayer/controller/advice/GlobalCart.java @@ -1,11 +1,11 @@ -package com.example.springmvc.mvcLayer.sessionItem; +package com.example.springmvc.mvcLayer.controller.advice; import com.example.springmvc.mvcLayer.component.ShoppingCart; import org.springframework.web.bind.annotation.ControllerAdvice; import org.springframework.web.bind.annotation.ModelAttribute; @ControllerAdvice -public class Cart { +public class GlobalCart { @ModelAttribute("shoppingCart") public ShoppingCart shoppingCart() { diff --git a/src/main/java/com/example/springmvc/mvcLayer/converter/ProductConverter.java b/src/main/java/com/example/springmvc/mvcLayer/converter/ProductConverter.java index d0a3a5e..c88fa8d 100644 --- a/src/main/java/com/example/springmvc/mvcLayer/converter/ProductConverter.java +++ b/src/main/java/com/example/springmvc/mvcLayer/converter/ProductConverter.java @@ -1,6 +1,6 @@ package com.example.springmvc.mvcLayer.converter; -import com.example.springmvc.mvcLayer.domain.productMarket.Product; +import com.example.springmvc.mvcLayer.domain.Product; import com.example.springmvc.mvcLayer.domain.dto.ProductDto; import com.example.springmvc.mvcLayer.service.CategoryService; diff --git a/src/main/java/com/example/springmvc/mvcLayer/domain/productMarket/Category.java b/src/main/java/com/example/springmvc/mvcLayer/domain/Category.java similarity index 94% rename from src/main/java/com/example/springmvc/mvcLayer/domain/productMarket/Category.java rename to src/main/java/com/example/springmvc/mvcLayer/domain/Category.java index 5730f1d..9c63b28 100644 --- a/src/main/java/com/example/springmvc/mvcLayer/domain/productMarket/Category.java +++ b/src/main/java/com/example/springmvc/mvcLayer/domain/Category.java @@ -1,4 +1,4 @@ -package com.example.springmvc.mvcLayer.domain.productMarket; +package com.example.springmvc.mvcLayer.domain; import com.fasterxml.jackson.annotation.JsonBackReference; import lombok.*; diff --git a/src/main/java/com/example/springmvc/mvcLayer/domain/productMarket/Product.java b/src/main/java/com/example/springmvc/mvcLayer/domain/Product.java similarity index 95% rename from src/main/java/com/example/springmvc/mvcLayer/domain/productMarket/Product.java rename to src/main/java/com/example/springmvc/mvcLayer/domain/Product.java index 5ca0c1c..2876a6b 100644 --- a/src/main/java/com/example/springmvc/mvcLayer/domain/productMarket/Product.java +++ b/src/main/java/com/example/springmvc/mvcLayer/domain/Product.java @@ -1,4 +1,4 @@ -package com.example.springmvc.mvcLayer.domain.productMarket; +package com.example.springmvc.mvcLayer.domain; import lombok.*; diff --git a/src/main/java/com/example/springmvc/mvcLayer/domain/dto/ProductDto.java b/src/main/java/com/example/springmvc/mvcLayer/domain/dto/ProductDto.java index 41fdf82..3381c68 100644 --- a/src/main/java/com/example/springmvc/mvcLayer/domain/dto/ProductDto.java +++ b/src/main/java/com/example/springmvc/mvcLayer/domain/dto/ProductDto.java @@ -1,6 +1,6 @@ package com.example.springmvc.mvcLayer.domain.dto; -import com.example.springmvc.mvcLayer.domain.productMarket.Category; +import com.example.springmvc.mvcLayer.domain.Category; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; diff --git a/src/main/java/com/example/springmvc/securityLayer/domain/Role.java b/src/main/java/com/example/springmvc/mvcLayer/domain/security/Role.java similarity index 83% rename from src/main/java/com/example/springmvc/securityLayer/domain/Role.java rename to src/main/java/com/example/springmvc/mvcLayer/domain/security/Role.java index 6d76a5a..036f5d3 100644 --- a/src/main/java/com/example/springmvc/securityLayer/domain/Role.java +++ b/src/main/java/com/example/springmvc/mvcLayer/domain/security/Role.java @@ -1,4 +1,4 @@ -package com.example.springmvc.securityLayer.domain; +package com.example.springmvc.mvcLayer.domain.security; import lombok.Data; import lombok.EqualsAndHashCode; diff --git a/src/main/java/com/example/springmvc/securityLayer/domain/User.java b/src/main/java/com/example/springmvc/mvcLayer/domain/security/User.java similarity index 85% rename from src/main/java/com/example/springmvc/securityLayer/domain/User.java rename to src/main/java/com/example/springmvc/mvcLayer/domain/security/User.java index 29559d0..c0cb1f6 100644 --- a/src/main/java/com/example/springmvc/securityLayer/domain/User.java +++ b/src/main/java/com/example/springmvc/mvcLayer/domain/security/User.java @@ -1,4 +1,4 @@ -package com.example.springmvc.securityLayer.domain; +package com.example.springmvc.mvcLayer.domain.security; import lombok.Data; import lombok.EqualsAndHashCode; @@ -6,10 +6,7 @@ import lombok.ToString; import javax.persistence.*; -import javax.validation.constraints.Email; -import javax.validation.constraints.Min; import javax.validation.constraints.NotBlank; -import javax.validation.constraints.Size; import java.util.Collection; @Data diff --git a/src/main/java/com/example/springmvc/mvcLayer/repository/CategoryRepository.java b/src/main/java/com/example/springmvc/mvcLayer/repository/CategoryRepository.java index 84a11ed..e6e5f11 100644 --- a/src/main/java/com/example/springmvc/mvcLayer/repository/CategoryRepository.java +++ b/src/main/java/com/example/springmvc/mvcLayer/repository/CategoryRepository.java @@ -1,14 +1,10 @@ package com.example.springmvc.mvcLayer.repository; -import com.example.springmvc.mvcLayer.domain.productMarket.Category; -import com.example.springmvc.mvcLayer.domain.productMarket.Product; -import org.springframework.data.domain.Page; -import org.springframework.data.domain.Pageable; +import com.example.springmvc.mvcLayer.domain.Category; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; import java.util.Optional; -import java.util.Set; @Repository public interface CategoryRepository extends JpaRepository { diff --git a/src/main/java/com/example/springmvc/mvcLayer/repository/ProductRepository.java b/src/main/java/com/example/springmvc/mvcLayer/repository/ProductRepository.java index 1f763c8..f7c6348 100644 --- a/src/main/java/com/example/springmvc/mvcLayer/repository/ProductRepository.java +++ b/src/main/java/com/example/springmvc/mvcLayer/repository/ProductRepository.java @@ -1,6 +1,6 @@ package com.example.springmvc.mvcLayer.repository; -import com.example.springmvc.mvcLayer.domain.productMarket.Product; +import com.example.springmvc.mvcLayer.domain.Product; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; import org.springframework.data.jpa.repository.JpaRepository; @@ -8,7 +8,6 @@ import java.util.List; import java.util.Optional; -import java.util.Set; @Repository public interface ProductRepository extends JpaRepository { diff --git a/src/main/java/com/example/springmvc/securityLayer/repository/RoleRepository.java b/src/main/java/com/example/springmvc/mvcLayer/repository/RoleRepository.java similarity index 62% rename from src/main/java/com/example/springmvc/securityLayer/repository/RoleRepository.java rename to src/main/java/com/example/springmvc/mvcLayer/repository/RoleRepository.java index 4516e51..b0ded53 100644 --- a/src/main/java/com/example/springmvc/securityLayer/repository/RoleRepository.java +++ b/src/main/java/com/example/springmvc/mvcLayer/repository/RoleRepository.java @@ -1,7 +1,6 @@ -package com.example.springmvc.securityLayer.repository; +package com.example.springmvc.mvcLayer.repository; -import com.example.springmvc.securityLayer.domain.Role; -import com.example.springmvc.securityLayer.domain.User; +import com.example.springmvc.mvcLayer.domain.security.Role; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; diff --git a/src/main/java/com/example/springmvc/securityLayer/repository/UserRepository.java b/src/main/java/com/example/springmvc/mvcLayer/repository/UserRepository.java similarity index 52% rename from src/main/java/com/example/springmvc/securityLayer/repository/UserRepository.java rename to src/main/java/com/example/springmvc/mvcLayer/repository/UserRepository.java index 3ab3409..f91aea2 100644 --- a/src/main/java/com/example/springmvc/securityLayer/repository/UserRepository.java +++ b/src/main/java/com/example/springmvc/mvcLayer/repository/UserRepository.java @@ -1,9 +1,6 @@ -package com.example.springmvc.securityLayer.repository; +package com.example.springmvc.mvcLayer.repository; -import com.example.springmvc.securityLayer.domain.User; -import org.springframework.data.domain.Example; -import org.springframework.data.domain.Page; -import org.springframework.data.domain.Pageable; +import com.example.springmvc.mvcLayer.domain.security.User; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; diff --git a/src/main/java/com/example/springmvc/mvcLayer/service/CategoryService.java b/src/main/java/com/example/springmvc/mvcLayer/service/CategoryService.java index 116c086..aba32ce 100644 --- a/src/main/java/com/example/springmvc/mvcLayer/service/CategoryService.java +++ b/src/main/java/com/example/springmvc/mvcLayer/service/CategoryService.java @@ -1,14 +1,8 @@ package com.example.springmvc.mvcLayer.service; -import com.example.springmvc.mvcLayer.domain.productMarket.Category; -import com.example.springmvc.mvcLayer.domain.productMarket.Product; -import com.example.springmvc.mvcLayer.domain.dto.CategoryDto; -import com.example.springmvc.mvcLayer.domain.search.ProductSearchCondition; -import org.springframework.data.domain.Page; +import com.example.springmvc.mvcLayer.domain.Category; import java.util.List; -import java.util.Optional; -import java.util.Set; public interface CategoryService { diff --git a/src/main/java/com/example/springmvc/mvcLayer/service/ProductService.java b/src/main/java/com/example/springmvc/mvcLayer/service/ProductService.java index 4f31946..e442a19 100644 --- a/src/main/java/com/example/springmvc/mvcLayer/service/ProductService.java +++ b/src/main/java/com/example/springmvc/mvcLayer/service/ProductService.java @@ -1,6 +1,6 @@ package com.example.springmvc.mvcLayer.service; -import com.example.springmvc.mvcLayer.domain.productMarket.Product; +import com.example.springmvc.mvcLayer.domain.Product; import com.example.springmvc.mvcLayer.domain.search.ProductSearchCondition; import com.example.springmvc.mvcLayer.domain.dto.ProductDto; import org.springframework.data.domain.Page; diff --git a/src/main/java/com/example/springmvc/mvcLayer/service/RoleService.java b/src/main/java/com/example/springmvc/mvcLayer/service/RoleService.java new file mode 100644 index 0000000..503d479 --- /dev/null +++ b/src/main/java/com/example/springmvc/mvcLayer/service/RoleService.java @@ -0,0 +1,8 @@ +package com.example.springmvc.mvcLayer.service; + +import com.example.springmvc.mvcLayer.domain.security.Role; + +public interface RoleService { + + Role findByName(String name); +} \ No newline at end of file diff --git a/src/main/java/com/example/springmvc/securityLayer/service/UserService.java b/src/main/java/com/example/springmvc/mvcLayer/service/UserService.java similarity index 73% rename from src/main/java/com/example/springmvc/securityLayer/service/UserService.java rename to src/main/java/com/example/springmvc/mvcLayer/service/UserService.java index 7448377..8a670f0 100644 --- a/src/main/java/com/example/springmvc/securityLayer/service/UserService.java +++ b/src/main/java/com/example/springmvc/mvcLayer/service/UserService.java @@ -1,6 +1,6 @@ -package com.example.springmvc.securityLayer.service; +package com.example.springmvc.mvcLayer.service; -import com.example.springmvc.securityLayer.domain.User; +import com.example.springmvc.mvcLayer.domain.security.User; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; diff --git a/src/main/java/com/example/springmvc/mvcLayer/service/impl/CategoryServiceImpl.java b/src/main/java/com/example/springmvc/mvcLayer/service/impl/CategoryServiceImpl.java index 9ce27e0..7533b46 100644 --- a/src/main/java/com/example/springmvc/mvcLayer/service/impl/CategoryServiceImpl.java +++ b/src/main/java/com/example/springmvc/mvcLayer/service/impl/CategoryServiceImpl.java @@ -1,6 +1,6 @@ package com.example.springmvc.mvcLayer.service.impl; -import com.example.springmvc.mvcLayer.domain.productMarket.Category; +import com.example.springmvc.mvcLayer.domain.Category; import com.example.springmvc.mvcLayer.repository.CategoryRepository; import com.example.springmvc.mvcLayer.service.CategoryService; import lombok.AllArgsConstructor; diff --git a/src/main/java/com/example/springmvc/mvcLayer/service/impl/ProductServiceImpl.java b/src/main/java/com/example/springmvc/mvcLayer/service/impl/ProductServiceImpl.java index aa41368..a3d95d8 100644 --- a/src/main/java/com/example/springmvc/mvcLayer/service/impl/ProductServiceImpl.java +++ b/src/main/java/com/example/springmvc/mvcLayer/service/impl/ProductServiceImpl.java @@ -1,7 +1,7 @@ package com.example.springmvc.mvcLayer.service.impl; import com.example.springmvc.mvcLayer.converter.ProductConverter; -import com.example.springmvc.mvcLayer.domain.productMarket.Product; +import com.example.springmvc.mvcLayer.domain.Product; import com.example.springmvc.mvcLayer.domain.search.ProductSearchCondition; import com.example.springmvc.mvcLayer.domain.dto.ProductDto; import com.example.springmvc.mvcLayer.repository.ProductRepository; diff --git a/src/main/java/com/example/springmvc/securityLayer/service/impl/RoleServiceImpl.java b/src/main/java/com/example/springmvc/mvcLayer/service/impl/security/RoleServiceImpl.java similarity index 71% rename from src/main/java/com/example/springmvc/securityLayer/service/impl/RoleServiceImpl.java rename to src/main/java/com/example/springmvc/mvcLayer/service/impl/security/RoleServiceImpl.java index 797f298..4c64872 100644 --- a/src/main/java/com/example/springmvc/securityLayer/service/impl/RoleServiceImpl.java +++ b/src/main/java/com/example/springmvc/mvcLayer/service/impl/security/RoleServiceImpl.java @@ -1,8 +1,8 @@ -package com.example.springmvc.securityLayer.service.impl; +package com.example.springmvc.mvcLayer.service.impl.security; -import com.example.springmvc.securityLayer.domain.Role; -import com.example.springmvc.securityLayer.repository.RoleRepository; -import com.example.springmvc.securityLayer.service.RoleService; +import com.example.springmvc.mvcLayer.domain.security.Role; +import com.example.springmvc.mvcLayer.repository.RoleRepository; +import com.example.springmvc.mvcLayer.service.RoleService; import lombok.AllArgsConstructor; import org.springframework.stereotype.Service; diff --git a/src/main/java/com/example/springmvc/securityLayer/service/impl/UserDetailsServiceImpl.java b/src/main/java/com/example/springmvc/mvcLayer/service/impl/security/UserDetailsServiceImpl.java similarity index 82% rename from src/main/java/com/example/springmvc/securityLayer/service/impl/UserDetailsServiceImpl.java rename to src/main/java/com/example/springmvc/mvcLayer/service/impl/security/UserDetailsServiceImpl.java index 64dc8e3..b9f901e 100644 --- a/src/main/java/com/example/springmvc/securityLayer/service/impl/UserDetailsServiceImpl.java +++ b/src/main/java/com/example/springmvc/mvcLayer/service/impl/security/UserDetailsServiceImpl.java @@ -1,7 +1,7 @@ -package com.example.springmvc.securityLayer.service.impl; +package com.example.springmvc.mvcLayer.service.impl.security; -import com.example.springmvc.securityLayer.domain.Role; -import com.example.springmvc.securityLayer.repository.UserRepository; +import com.example.springmvc.mvcLayer.domain.security.Role; +import com.example.springmvc.mvcLayer.repository.UserRepository; import lombok.AllArgsConstructor; import org.springframework.security.core.GrantedAuthority; import org.springframework.security.core.authority.SimpleGrantedAuthority; @@ -13,7 +13,6 @@ import org.springframework.transaction.annotation.Transactional; import java.util.Collection; -import java.util.Stack; import java.util.stream.Collectors; @Component @@ -25,7 +24,7 @@ public class UserDetailsServiceImpl implements UserDetailsService { @Override @Transactional public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException { - com.example.springmvc.securityLayer.domain.User user = userRepository.findByUsername(username) + com.example.springmvc.mvcLayer.domain.security.User user = userRepository.findByUsername(username) .orElseThrow(() -> new UsernameNotFoundException(String.format("User '%s' not found", username))); return new User( user.getUsername(), user.getPassword(), diff --git a/src/main/java/com/example/springmvc/securityLayer/service/impl/UserServiceImpl.java b/src/main/java/com/example/springmvc/mvcLayer/service/impl/security/UserServiceImpl.java similarity index 83% rename from src/main/java/com/example/springmvc/securityLayer/service/impl/UserServiceImpl.java rename to src/main/java/com/example/springmvc/mvcLayer/service/impl/security/UserServiceImpl.java index 4826f7a..19ff560 100644 --- a/src/main/java/com/example/springmvc/securityLayer/service/impl/UserServiceImpl.java +++ b/src/main/java/com/example/springmvc/mvcLayer/service/impl/security/UserServiceImpl.java @@ -1,10 +1,10 @@ -package com.example.springmvc.securityLayer.service.impl; +package com.example.springmvc.mvcLayer.service.impl.security; -import com.example.springmvc.securityLayer.domain.Role; -import com.example.springmvc.securityLayer.domain.User; -import com.example.springmvc.securityLayer.repository.UserRepository; -import com.example.springmvc.securityLayer.service.RoleService; -import com.example.springmvc.securityLayer.service.UserService; +import com.example.springmvc.mvcLayer.domain.security.Role; +import com.example.springmvc.mvcLayer.domain.security.User; +import com.example.springmvc.mvcLayer.repository.UserRepository; +import com.example.springmvc.mvcLayer.service.RoleService; +import com.example.springmvc.mvcLayer.service.UserService; import lombok.AllArgsConstructor; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; diff --git a/src/main/java/com/example/springmvc/securityLayer/service/RoleService.java b/src/main/java/com/example/springmvc/securityLayer/service/RoleService.java deleted file mode 100644 index aad3632..0000000 --- a/src/main/java/com/example/springmvc/securityLayer/service/RoleService.java +++ /dev/null @@ -1,8 +0,0 @@ -package com.example.springmvc.securityLayer.service; - -import com.example.springmvc.securityLayer.domain.Role; - -public interface RoleService { - - Role findByName(String name); -} \ No newline at end of file From 7521adf8fe31bce3d7f88b81de593bc6d978145b Mon Sep 17 00:00:00 2001 From: sergeynikitin Date: Fri, 24 Sep 2021 11:43:32 +0300 Subject: [PATCH 6/7] +SQLscript(insert) --- .../V1_produc_and_category_create_table.sql | 29 ++++++++++++++++++- .../V1_user_and_role_create_table.sql | 8 +++++ 2 files changed, 36 insertions(+), 1 deletion(-) diff --git a/src/main/resources/db/migration/V1_produc_and_category_create_table.sql b/src/main/resources/db/migration/V1_produc_and_category_create_table.sql index 2b09450..3d66c83 100644 --- a/src/main/resources/db/migration/V1_produc_and_category_create_table.sql +++ b/src/main/resources/db/migration/V1_produc_and_category_create_table.sql @@ -26,4 +26,31 @@ CREATE TABLE IF NOT EXISTS product_category primary key (product_id, category_id), foreign key (product_id) references product (id), foreign key (category_id) references category (id) -) +); + +INSERT INTO public.category (id, title, parent_id) VALUES (1, 'Овощи', null); +INSERT INTO public.category (id, title, parent_id) VALUES (2, 'Фрукты', null); +INSERT INTO public.category (id, title, parent_id) VALUES (3, 'Рыба с/с', null); +INSERT INTO public.category (id, title, parent_id) VALUES (4, 'Колбасы с/к', null); + +INSERT INTO public.product (id, title, price, image) VALUES (5, 'Фейхоа', 180, '\data\images\product\e495ff3eb9c55bd0bcdde0f468b679f4.jpg'); +INSERT INTO public.product (id, title, price, image) VALUES (6, 'Виноград', 180, '\data\images\product\e495ff3eb9c55bd0bcdde0f468b679f4.jpg'); +INSERT INTO public.product (id, title, price, image) VALUES (8, 'Перец красный', 189, '\data\images\product\e495ff3eb9c55bd0bcdde0f468b679f4.jpg'); +INSERT INTO public.product (id, title, price, image) VALUES (9, 'Латук', 123, '\data\images\product\e495ff3eb9c55bd0bcdde0f468b679f4.jpg'); +INSERT INTO public.product (id, title, price, image) VALUES (12, 'Томаты', 232, '\data\images\product\e495ff3eb9c55bd0bcdde0f468b679f4.jpg'); +INSERT INTO public.product (id, title, price, image) VALUES (14, 'Абрикос', 232, '\data\images\product\e495ff3eb9c55bd0bcdde0f468b679f4.jpg'); +INSERT INTO public.product (id, title, price, image) VALUES (15, 'Персики', 232, '\data\images\product\e495ff3eb9c55bd0bcdde0f468b679f4.jpg'); +INSERT INTO public.product (id, title, price, image) VALUES (17, 'Шампиньоны', 212, '\data\images\product\e495ff3eb9c55bd0bcdde0f468b679f4.jpg'); +INSERT INTO public.product (id, title, price, image) VALUES (18, 'Огурцы', 343, '\data\images\product\e495ff3eb9c55bd0bcdde0f468b679f4.jpg'); +INSERT INTO public.product (id, title, price, image) VALUES (19, 'Лосось с/с', 1500, '\data\images\product\e495ff3eb9c55bd0bcdde0f468b679f4.jpg'); + +INSERT INTO public.product_category (product_id, category_id) VALUES (5, 2); +INSERT INTO public.product_category (product_id, category_id) VALUES (6, 2); +INSERT INTO public.product_category (product_id, category_id) VALUES (8, 1); +INSERT INTO public.product_category (product_id, category_id) VALUES (9, 1); +INSERT INTO public.product_category (product_id, category_id) VALUES (12, 1); +INSERT INTO public.product_category (product_id, category_id) VALUES (14, 2); +INSERT INTO public.product_category (product_id, category_id) VALUES (15, 2); +INSERT INTO public.product_category (product_id, category_id) VALUES (17, 1); +INSERT INTO public.product_category (product_id, category_id) VALUES (18, 1); +INSERT INTO public.product_category (product_id, category_id) VALUES (19, 3); diff --git a/src/main/resources/db/migration/V1_user_and_role_create_table.sql b/src/main/resources/db/migration/V1_user_and_role_create_table.sql index b14696d..bd026f4 100644 --- a/src/main/resources/db/migration/V1_user_and_role_create_table.sql +++ b/src/main/resources/db/migration/V1_user_and_role_create_table.sql @@ -29,3 +29,11 @@ values ('ROLE_USER'), ('ROLE_MANAGER'), ('ROLE_ADMIN'); +INSERT INTO public.users (id, username, password, email, enabled) VALUES (2, 'ggg', '$2a$08$2RO4rUMaLLW4z4aFpSqchelNnPgJp4T/1OAvEvALpkDbQvD7eavxe', 'ggg@ggg', true); +INSERT INTO public.users (id, username, password, email, enabled) VALUES (3, 'fff', '$2a$08$JYwknbmooZXl5a.Yb8ABbeNGMX/sKyIe0PgvwN9fYilcYeGzPLLD.', 'fff@fff', true); +INSERT INTO public.users (id, username, password, email, enabled) VALUES (5, 'rrr', '$2a$08$OstLi7a0.S0FC1nERZsC8uuU0pbGQPWRVmkel.DFaNWUcm08KeWOy', 'rrr@rrr', true); + +INSERT INTO public.user_role (user_id, role_id) VALUES (2, 3); +INSERT INTO public.user_role (user_id, role_id) VALUES (3, 1); +INSERT INTO public.user_role (user_id, role_id) VALUES (5, 1); + From 4fce9f988b4db7cb46d61af423e916a68b7b51c5 Mon Sep 17 00:00:00 2001 From: sergeynikitin Date: Tue, 12 Oct 2021 23:34:31 +0300 Subject: [PATCH 7/7] implements orders --- pom.xml | 12 +++ .../mvcLayer/component/ShoppingCart.java | 2 +- .../controller/CategoryController.java | 10 --- .../mvcLayer/controller/OrderController.java | 47 +++++++++++ .../controller/ProductController.java | 24 ++++-- .../mvcLayer/controller/UserController.java | 9 ++ .../mvcLayer/converter/ProductConverter.java | 22 ----- .../springmvc/mvcLayer/domain/Address.java | 32 ++++++++ .../springmvc/mvcLayer/domain/Category.java | 6 +- .../springmvc/mvcLayer/domain/Order.java | 48 +++++++++++ .../springmvc/mvcLayer/domain/Product.java | 15 ++-- .../mvcLayer/domain/dto/ProductDto.java | 11 ++- .../repository/AddressRepository.java | 9 ++ .../repository/CategoryRepository.java | 3 +- .../mvcLayer/repository/OrderRepository.java | 13 +++ .../repository/ProductRepository.java | 7 +- .../mvcLayer/service/CategoryService.java | 6 ++ .../mvcLayer/service/OrderService.java | 13 +++ .../mvcLayer/service/ProductService.java | 2 + .../service/impl/CategoryServiceImpl.java | 15 +++- .../service/impl/OrderServiceImpl.java | 59 +++++++++++++ .../service/impl/ProductServiceImpl.java | 43 ++++++++-- src/main/resources/application.properties | 1 + .../V1_address_orders_create_rable.sql | 43 ++++++++++ src/main/resources/templates/cart/list.html | 2 + .../resources/templates/category/list.html | 4 +- .../resources/templates/filter/filter.html | 56 ------------- .../resources/templates/fragment/header.html | 5 ++ src/main/resources/templates/order/list.html | 50 +++++++++++ .../resources/templates/order/newOrder.html | 82 +++++++++++++++++++ .../resources/templates/product/form.html | 6 +- .../templates/user/personalAccount.html | 42 ++++++++++ .../templates/user/registration.html | 2 +- 33 files changed, 566 insertions(+), 135 deletions(-) create mode 100644 src/main/java/com/example/springmvc/mvcLayer/controller/OrderController.java delete mode 100644 src/main/java/com/example/springmvc/mvcLayer/converter/ProductConverter.java create mode 100644 src/main/java/com/example/springmvc/mvcLayer/domain/Address.java create mode 100644 src/main/java/com/example/springmvc/mvcLayer/domain/Order.java create mode 100644 src/main/java/com/example/springmvc/mvcLayer/repository/AddressRepository.java create mode 100644 src/main/java/com/example/springmvc/mvcLayer/repository/OrderRepository.java create mode 100644 src/main/java/com/example/springmvc/mvcLayer/service/OrderService.java create mode 100644 src/main/java/com/example/springmvc/mvcLayer/service/impl/OrderServiceImpl.java create mode 100644 src/main/resources/db/migration/V1_address_orders_create_rable.sql delete mode 100644 src/main/resources/templates/filter/filter.html create mode 100644 src/main/resources/templates/order/list.html create mode 100644 src/main/resources/templates/order/newOrder.html create mode 100644 src/main/resources/templates/user/personalAccount.html diff --git a/pom.xml b/pom.xml index ace5fbb..e5be462 100644 --- a/pom.xml +++ b/pom.xml @@ -18,6 +18,12 @@ 11 + + com.vladmihalcea + hibernate-types-52 + 2.12.1 + + org.springframework.boot spring-boot-starter-web @@ -82,6 +88,12 @@ 3.0.4.RELEASE + + org.modelmapper + modelmapper + 2.4.4 + + diff --git a/src/main/java/com/example/springmvc/mvcLayer/component/ShoppingCart.java b/src/main/java/com/example/springmvc/mvcLayer/component/ShoppingCart.java index db3d3d4..27d5ed8 100644 --- a/src/main/java/com/example/springmvc/mvcLayer/component/ShoppingCart.java +++ b/src/main/java/com/example/springmvc/mvcLayer/component/ShoppingCart.java @@ -7,7 +7,7 @@ import java.util.HashMap; import java.util.Map; -//@Getter + @Component @NoArgsConstructor public class ShoppingCart { diff --git a/src/main/java/com/example/springmvc/mvcLayer/controller/CategoryController.java b/src/main/java/com/example/springmvc/mvcLayer/controller/CategoryController.java index 1b757ab..88e4f68 100644 --- a/src/main/java/com/example/springmvc/mvcLayer/controller/CategoryController.java +++ b/src/main/java/com/example/springmvc/mvcLayer/controller/CategoryController.java @@ -42,14 +42,4 @@ public String findAllCategory(Model model) { model.addAttribute("categories", categories); return "category/list"; } - -// @GetMapping(FIND)// -// public String findProductByCategoryId(@RequestParam Integer categoryId, Model model) { -// List products = categoryService.findProductsByCategoryId(categoryId); -// List category = categoryService.findCategory(); -// model.addAttribute("category", category); -// model.addAttribute("products", products); -// -// return "product/list"; -// } } diff --git a/src/main/java/com/example/springmvc/mvcLayer/controller/OrderController.java b/src/main/java/com/example/springmvc/mvcLayer/controller/OrderController.java new file mode 100644 index 0000000..ebbf106 --- /dev/null +++ b/src/main/java/com/example/springmvc/mvcLayer/controller/OrderController.java @@ -0,0 +1,47 @@ +package com.example.springmvc.mvcLayer.controller; + +import com.example.springmvc.mvcLayer.component.ShoppingCart; +import com.example.springmvc.mvcLayer.domain.Address; +import com.example.springmvc.mvcLayer.domain.Order; +import com.example.springmvc.mvcLayer.service.OrderService; +import lombok.AllArgsConstructor; +import org.springframework.security.core.context.SecurityContextHolder; +import org.springframework.stereotype.Controller; +import org.springframework.ui.Model; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +import static com.example.springmvc.mvcLayer.domain.constans.ConstanceName.FORM; +import static com.example.springmvc.mvcLayer.domain.constans.ConstanceName.LIST; + +@Controller +@AllArgsConstructor +@SessionAttributes("shoppingCart") +@RequestMapping("/order") +public class OrderController { + + private final OrderService orderService; + + @GetMapping(LIST) + public String getAllOrders(Model model) { + String name = SecurityContextHolder.getContext().getAuthentication().getName(); + List orders = orderService.getAllOrders(name); + model.addAttribute("orders", orders); + return "order/list"; + } + + @GetMapping(FORM) + public String createOrderView(Model model, @ModelAttribute ShoppingCart shoppingCart) { + model.addAttribute("address", new Address()); + return "order/newOrder"; + } + + @PostMapping(FORM) + public String createOrder(@ModelAttribute Address address, + @ModelAttribute ShoppingCart shoppingCart) { + String name = SecurityContextHolder.getContext().getAuthentication().getName(); + orderService.save(shoppingCart, address, name); + return "redirect:/order/list"; + } +} diff --git a/src/main/java/com/example/springmvc/mvcLayer/controller/ProductController.java b/src/main/java/com/example/springmvc/mvcLayer/controller/ProductController.java index 7818739..337c7c9 100644 --- a/src/main/java/com/example/springmvc/mvcLayer/controller/ProductController.java +++ b/src/main/java/com/example/springmvc/mvcLayer/controller/ProductController.java @@ -1,9 +1,9 @@ package com.example.springmvc.mvcLayer.controller; -import com.example.springmvc.mvcLayer.domain.dto.ProductDto; import com.example.springmvc.mvcLayer.domain.Category; import com.example.springmvc.mvcLayer.domain.Product; +import com.example.springmvc.mvcLayer.domain.dto.ProductDto; import com.example.springmvc.mvcLayer.domain.search.ProductSearchCondition; import com.example.springmvc.mvcLayer.service.CategoryService; import com.example.springmvc.mvcLayer.service.ProductService; @@ -26,8 +26,8 @@ @RequestMapping(PRODUCT) public class ProductController { - private ProductService productService; - private CategoryService categoryService; + private final ProductService productService; + private final CategoryService categoryService; @GetMapping(LIST) @@ -37,6 +37,14 @@ public String getListProducts(@ModelAttribute ProductSearchCondition searchCondi return "product/list"; } + @GetMapping(LIST + "/{catId}") + public String getProductsByCategoryId(@PathVariable Integer catId, Model model) { + ProductSearchCondition searchCondition = new ProductSearchCondition(); + Page page = productService.findProductsByCategoryId(catId, searchCondition); + productService.pagination(searchCondition, model, page); + return "product/list"; + } + @GetMapping(FORM) public String getProductForm(Model model, @RequestParam(required = false) Integer id, @ModelAttribute("error") String error) { @@ -57,10 +65,10 @@ public RedirectView saveProduct(@ModelAttribute ProductDto product, RedirectAttr @RequestParam(required = false) MultipartFile image) { boolean redirectView = getRedirectView(product.getTitle(), product.getPrice(), attributes, image); if (redirectView) { - return new RedirectView(PRODUCT+FORM); + return new RedirectView("/product/form"); } productService.saveProductAndImage(product, image); - return new RedirectView(PRODUCT+LIST); + return new RedirectView("/product/list"); } @ExceptionHandler(Exception.class) @@ -71,8 +79,8 @@ public String handleError(HttpServletRequest req, Exception ex) { @GetMapping(DELETE) public RedirectView deleteProductById(@RequestParam Integer id) { - productService.deleteProductById(id); - return new RedirectView(PRODUCT+LIST); + productService.deleteProductById(id); + return new RedirectView("/product/list"); } @GetMapping(FILTER) @@ -91,7 +99,7 @@ private boolean getRedirectView(String title, Integer price, RedirectAttributes attributes.addFlashAttribute("error", "Заполните поле с названием продукта"); return true; } - if (price==null) { + if (price == null) { attributes.addFlashAttribute("error", "Заполните поле с ценой продукта"); return true; } diff --git a/src/main/java/com/example/springmvc/mvcLayer/controller/UserController.java b/src/main/java/com/example/springmvc/mvcLayer/controller/UserController.java index a03fec1..0977c05 100644 --- a/src/main/java/com/example/springmvc/mvcLayer/controller/UserController.java +++ b/src/main/java/com/example/springmvc/mvcLayer/controller/UserController.java @@ -6,6 +6,7 @@ import org.springframework.data.domain.Page; import org.springframework.data.domain.PageRequest; import org.springframework.data.domain.Pageable; +import org.springframework.security.core.context.SecurityContextHolder; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.GetMapping; @@ -46,4 +47,12 @@ public String setEnableUser(@RequestParam Long userId, @RequestParam Boolean ena userService.setEnable(userId, enable); return "redirect:/user/admin"; } + + @GetMapping("/account") + public String getUserAccount(Model model) { + String name = SecurityContextHolder.getContext().getAuthentication().getName(); + User user = userService.findByUsername(name); + model.addAttribute("user", user); + return "user/personalAccount"; + } } \ No newline at end of file diff --git a/src/main/java/com/example/springmvc/mvcLayer/converter/ProductConverter.java b/src/main/java/com/example/springmvc/mvcLayer/converter/ProductConverter.java deleted file mode 100644 index c88fa8d..0000000 --- a/src/main/java/com/example/springmvc/mvcLayer/converter/ProductConverter.java +++ /dev/null @@ -1,22 +0,0 @@ -package com.example.springmvc.mvcLayer.converter; - -import com.example.springmvc.mvcLayer.domain.Product; -import com.example.springmvc.mvcLayer.domain.dto.ProductDto; -import com.example.springmvc.mvcLayer.service.CategoryService; - -public class ProductConverter { - private static CategoryService categoryService; - public static ProductDto productConvertToDtoProduct(Product product) { - return ProductDto.builder().id(product.getId()) - .title(product.getTitle()) - .price(product.getPrice()) - .categories(product.getCategories()).build(); - } - - public static Product dtoProductConvertToProduct(ProductDto productDto, Product product) { - product.setTitle(productDto.getTitle()); - product.setPrice(productDto.getPrice()); - product.setCategories(productDto.getCategories()); - return product; - } -} \ No newline at end of file diff --git a/src/main/java/com/example/springmvc/mvcLayer/domain/Address.java b/src/main/java/com/example/springmvc/mvcLayer/domain/Address.java new file mode 100644 index 0000000..16ce928 --- /dev/null +++ b/src/main/java/com/example/springmvc/mvcLayer/domain/Address.java @@ -0,0 +1,32 @@ +package com.example.springmvc.mvcLayer.domain; + +import lombok.*; + +import javax.persistence.*; + +@Data +@Entity +@Builder +@NoArgsConstructor +@AllArgsConstructor +@Table(name = "address") +@EqualsAndHashCode(exclude = {"id"}) +public class Address { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Integer id; + + @Column(name = "city") + private String city; + + @Column(name = "street") + private String street; + + @Column(name = "house") + private int house; + + @Column(name = "apartment") + private int apartment; + +} \ No newline at end of file diff --git a/src/main/java/com/example/springmvc/mvcLayer/domain/Category.java b/src/main/java/com/example/springmvc/mvcLayer/domain/Category.java index 9c63b28..b4d48c5 100644 --- a/src/main/java/com/example/springmvc/mvcLayer/domain/Category.java +++ b/src/main/java/com/example/springmvc/mvcLayer/domain/Category.java @@ -8,14 +8,14 @@ import java.util.List; import java.util.Set; -@AllArgsConstructor -@NoArgsConstructor @Data @Entity @Builder +@NoArgsConstructor +@AllArgsConstructor +@Table(name = "category") @ToString(exclude = {"subCategories"}) @EqualsAndHashCode(exclude = {"id", "subCategories"}) -@Table(name = "category") public class Category { @Id diff --git a/src/main/java/com/example/springmvc/mvcLayer/domain/Order.java b/src/main/java/com/example/springmvc/mvcLayer/domain/Order.java new file mode 100644 index 0000000..0f26abf --- /dev/null +++ b/src/main/java/com/example/springmvc/mvcLayer/domain/Order.java @@ -0,0 +1,48 @@ +package com.example.springmvc.mvcLayer.domain; + +import com.example.springmvc.mvcLayer.domain.dto.ProductDto; +import com.example.springmvc.mvcLayer.domain.security.User; +import com.vladmihalcea.hibernate.type.json.JsonBinaryType; +import lombok.*; +import org.hibernate.annotations.Type; +import org.hibernate.annotations.TypeDef; + +import javax.persistence.*; +import java.io.Serializable; +import java.time.LocalDate; +import java.util.List; + +@Data +@Entity +@Builder +@NoArgsConstructor +@AllArgsConstructor +@Table(name = "orders") +@TypeDef(name = "jsonb", typeClass = JsonBinaryType.class) +@ToString(exclude = {"userId", "address", "cart"}) +@EqualsAndHashCode(exclude = {"id", "userId", "address", "cart"}) +public class Order implements Serializable { + + @Id + @Column(name = "id") + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Integer id; + + @Column(name = "status") + private String status; + + @OneToOne + @JoinColumn(name = "address_id") + private Address address; + + @JoinColumn(name = "user_id") + @ManyToOne(fetch = FetchType.LAZY) + private User userId; + + @Type(type = "jsonb") + @Column(columnDefinition = "jsonb") + private List cart; + + @Column(name = "date") + private LocalDate date; +} diff --git a/src/main/java/com/example/springmvc/mvcLayer/domain/Product.java b/src/main/java/com/example/springmvc/mvcLayer/domain/Product.java index 2876a6b..03c871f 100644 --- a/src/main/java/com/example/springmvc/mvcLayer/domain/Product.java +++ b/src/main/java/com/example/springmvc/mvcLayer/domain/Product.java @@ -8,14 +8,15 @@ import java.util.HashSet; import java.util.Set; -@Builder -@ToString(exclude = {"categories"}) -@EqualsAndHashCode(exclude = {"id", "categories"}) + @Data -@AllArgsConstructor -@NoArgsConstructor @Entity +@Builder +@NoArgsConstructor +@AllArgsConstructor @Table(name = "product") +@ToString(exclude = {"categories"}) +@EqualsAndHashCode(exclude = {"id", "categories"}) public class Product { @Id @@ -46,8 +47,4 @@ public Product(String title, int price) { this.title = title; this.price = price; } -// @Override -// public String toString() { -// return "{" + id + ", " + title + ", " + price + "," + category + "," + image + "}"; -// } } diff --git a/src/main/java/com/example/springmvc/mvcLayer/domain/dto/ProductDto.java b/src/main/java/com/example/springmvc/mvcLayer/domain/dto/ProductDto.java index 3381c68..36acd9d 100644 --- a/src/main/java/com/example/springmvc/mvcLayer/domain/dto/ProductDto.java +++ b/src/main/java/com/example/springmvc/mvcLayer/domain/dto/ProductDto.java @@ -1,20 +1,19 @@ package com.example.springmvc.mvcLayer.domain.dto; import com.example.springmvc.mvcLayer.domain.Category; -import lombok.AllArgsConstructor; -import lombok.Builder; -import lombok.Data; -import lombok.NoArgsConstructor; +import lombok.*; +import java.io.Serializable; import java.util.Set; @Data @Builder @NoArgsConstructor @AllArgsConstructor -public class ProductDto { +@EqualsAndHashCode(exclude = "categoryDto") +public class ProductDto implements Serializable { private Integer id; private String title; private Integer price; - private Set categories; + private Set categoryDto; } \ No newline at end of file diff --git a/src/main/java/com/example/springmvc/mvcLayer/repository/AddressRepository.java b/src/main/java/com/example/springmvc/mvcLayer/repository/AddressRepository.java new file mode 100644 index 0000000..bd65030 --- /dev/null +++ b/src/main/java/com/example/springmvc/mvcLayer/repository/AddressRepository.java @@ -0,0 +1,9 @@ +package com.example.springmvc.mvcLayer.repository; + +import com.example.springmvc.mvcLayer.domain.Address; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +@Repository +public interface AddressRepository extends JpaRepository { +} diff --git a/src/main/java/com/example/springmvc/mvcLayer/repository/CategoryRepository.java b/src/main/java/com/example/springmvc/mvcLayer/repository/CategoryRepository.java index e6e5f11..e9a5473 100644 --- a/src/main/java/com/example/springmvc/mvcLayer/repository/CategoryRepository.java +++ b/src/main/java/com/example/springmvc/mvcLayer/repository/CategoryRepository.java @@ -5,6 +5,7 @@ import org.springframework.stereotype.Repository; import java.util.Optional; +import java.util.Set; @Repository public interface CategoryRepository extends JpaRepository { @@ -12,7 +13,7 @@ public interface CategoryRepository extends JpaRepository { Optional findCategoryByTitle(String title); -// Set findByProducts_Id(Integer productId); + Set findCategoryByIdIn(Set ids); // Page findProductsByIdCategory(Pageable pageable); diff --git a/src/main/java/com/example/springmvc/mvcLayer/repository/OrderRepository.java b/src/main/java/com/example/springmvc/mvcLayer/repository/OrderRepository.java new file mode 100644 index 0000000..8eed25b --- /dev/null +++ b/src/main/java/com/example/springmvc/mvcLayer/repository/OrderRepository.java @@ -0,0 +1,13 @@ +package com.example.springmvc.mvcLayer.repository; + +import com.example.springmvc.mvcLayer.domain.Order; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +import java.util.List; + +@Repository +public interface OrderRepository extends JpaRepository { + + List findOrdersByUserId_Username(String userName); +} diff --git a/src/main/java/com/example/springmvc/mvcLayer/repository/ProductRepository.java b/src/main/java/com/example/springmvc/mvcLayer/repository/ProductRepository.java index f7c6348..3334703 100644 --- a/src/main/java/com/example/springmvc/mvcLayer/repository/ProductRepository.java +++ b/src/main/java/com/example/springmvc/mvcLayer/repository/ProductRepository.java @@ -1,5 +1,6 @@ package com.example.springmvc.mvcLayer.repository; +import com.example.springmvc.mvcLayer.domain.Category; import com.example.springmvc.mvcLayer.domain.Product; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; @@ -12,7 +13,9 @@ @Repository public interface ProductRepository extends JpaRepository { - List findAll(); + // List findAll(); + Page findProductsByCategories(Pageable pageable, Category category); + Optional findById(Integer id); @@ -21,5 +24,5 @@ public interface ProductRepository extends JpaRepository { Page findAll(Pageable pageable); Page findProductsByTitleContainingIgnoreCaseAndPriceBetween( - String title, Integer minPrice, Integer maxPrice,Pageable pageable); + String title, Integer minPrice, Integer maxPrice, Pageable pageable); } diff --git a/src/main/java/com/example/springmvc/mvcLayer/service/CategoryService.java b/src/main/java/com/example/springmvc/mvcLayer/service/CategoryService.java index aba32ce..efef088 100644 --- a/src/main/java/com/example/springmvc/mvcLayer/service/CategoryService.java +++ b/src/main/java/com/example/springmvc/mvcLayer/service/CategoryService.java @@ -3,10 +3,16 @@ import com.example.springmvc.mvcLayer.domain.Category; import java.util.List; +import java.util.Set; public interface CategoryService { List findCategory(); void addCategory(String title); + + Set findCategoryById(Set id); + + Set getCategoryIdList(Set categories); + } diff --git a/src/main/java/com/example/springmvc/mvcLayer/service/OrderService.java b/src/main/java/com/example/springmvc/mvcLayer/service/OrderService.java new file mode 100644 index 0000000..8b36f26 --- /dev/null +++ b/src/main/java/com/example/springmvc/mvcLayer/service/OrderService.java @@ -0,0 +1,13 @@ +package com.example.springmvc.mvcLayer.service; + +import com.example.springmvc.mvcLayer.component.ShoppingCart; +import com.example.springmvc.mvcLayer.domain.Address; +import com.example.springmvc.mvcLayer.domain.Order; + +import java.util.List; + +public interface OrderService { + + void save(ShoppingCart shoppingCart, Address address, String name ); + List getAllOrders(String name); +} diff --git a/src/main/java/com/example/springmvc/mvcLayer/service/ProductService.java b/src/main/java/com/example/springmvc/mvcLayer/service/ProductService.java index e442a19..b114852 100644 --- a/src/main/java/com/example/springmvc/mvcLayer/service/ProductService.java +++ b/src/main/java/com/example/springmvc/mvcLayer/service/ProductService.java @@ -11,6 +11,8 @@ public interface ProductService { + Page findProductsByCategoryId(Integer catId,ProductSearchCondition searchCondition); + Page findAllBySearchConditional(ProductSearchCondition searchCondition); Product saveProductAndImage(ProductDto product, MultipartFile image); diff --git a/src/main/java/com/example/springmvc/mvcLayer/service/impl/CategoryServiceImpl.java b/src/main/java/com/example/springmvc/mvcLayer/service/impl/CategoryServiceImpl.java index 7533b46..1b177d3 100644 --- a/src/main/java/com/example/springmvc/mvcLayer/service/impl/CategoryServiceImpl.java +++ b/src/main/java/com/example/springmvc/mvcLayer/service/impl/CategoryServiceImpl.java @@ -7,8 +7,7 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; -import java.util.List; -import java.util.Optional; +import java.util.*; @Service @AllArgsConstructor @@ -29,4 +28,16 @@ public void addCategory(String title) { categoryRepository.save(new Category(title)); } } + + @Override + public Set findCategoryById(Set id) { + return categoryRepository.findCategoryByIdIn(id); + } + + @Override + public Set getCategoryIdList(Set categories) { + Set ids = new HashSet<>(); + categories.forEach(category -> ids.add(category.getId())); + return ids; + } } \ No newline at end of file diff --git a/src/main/java/com/example/springmvc/mvcLayer/service/impl/OrderServiceImpl.java b/src/main/java/com/example/springmvc/mvcLayer/service/impl/OrderServiceImpl.java new file mode 100644 index 0000000..28630a7 --- /dev/null +++ b/src/main/java/com/example/springmvc/mvcLayer/service/impl/OrderServiceImpl.java @@ -0,0 +1,59 @@ +package com.example.springmvc.mvcLayer.service.impl; + +import com.example.springmvc.mvcLayer.component.ShoppingCart; +import com.example.springmvc.mvcLayer.domain.Address; +import com.example.springmvc.mvcLayer.domain.Order; +import com.example.springmvc.mvcLayer.domain.cart.CartItem; +import com.example.springmvc.mvcLayer.domain.dto.ProductDto; +import com.example.springmvc.mvcLayer.domain.security.User; +import com.example.springmvc.mvcLayer.repository.AddressRepository; +import com.example.springmvc.mvcLayer.repository.OrderRepository; +import com.example.springmvc.mvcLayer.service.OrderService; +import com.example.springmvc.mvcLayer.service.UserService; +import lombok.AllArgsConstructor; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.time.LocalDate; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +@Service +@AllArgsConstructor +public class OrderServiceImpl implements OrderService { + + private final OrderRepository orderRepository; + + private final UserService userService; + + private final AddressRepository addressRepository; + + @Override + @Transactional + public void save(ShoppingCart shoppingCart, Address address, String name) { + Address save = addressRepository.save(address); + User user = userService.findByUsername(name); + Order order = new Order(); + List cart = new ArrayList<>(); + Map cartItems = shoppingCart.getCartItems(); + for (CartItem value : cartItems.values()) { + ProductDto product = value.getProduct(); + cart.add(product); + shoppingCart.deleteCartItem(product.getId()); + } + order.setStatus("new"); + order.setAddress(save); + order.setUserId(user); + order.setCart(cart); + order.setDate(LocalDate.now()); + orderRepository.save(order); + shoppingCart.getCartItems().clear(); + } + + @Override + public List getAllOrders(String name) { + return orderRepository.findOrdersByUserId_Username(name); + } + +} diff --git a/src/main/java/com/example/springmvc/mvcLayer/service/impl/ProductServiceImpl.java b/src/main/java/com/example/springmvc/mvcLayer/service/impl/ProductServiceImpl.java index a3d95d8..087ea97 100644 --- a/src/main/java/com/example/springmvc/mvcLayer/service/impl/ProductServiceImpl.java +++ b/src/main/java/com/example/springmvc/mvcLayer/service/impl/ProductServiceImpl.java @@ -1,10 +1,12 @@ package com.example.springmvc.mvcLayer.service.impl; -import com.example.springmvc.mvcLayer.converter.ProductConverter; +import com.example.springmvc.mvcLayer.domain.Category; import com.example.springmvc.mvcLayer.domain.Product; import com.example.springmvc.mvcLayer.domain.search.ProductSearchCondition; import com.example.springmvc.mvcLayer.domain.dto.ProductDto; +import com.example.springmvc.mvcLayer.repository.CategoryRepository; import com.example.springmvc.mvcLayer.repository.ProductRepository; +import com.example.springmvc.mvcLayer.service.CategoryService; import com.example.springmvc.mvcLayer.service.ProductService; import com.example.springmvc.mvcLayer.utils.FileUtils; import lombok.AllArgsConstructor; @@ -27,6 +29,9 @@ public class ProductServiceImpl implements ProductService { private final ProductRepository productRepository; + private final CategoryService categoryService; + private final CategoryRepository categoryRepository; + @Override @Transactional @@ -44,12 +49,18 @@ public Product saveProductAndImage(ProductDto productDto, MultipartFile image) { private Product convertProductDtoInProduct(ProductDto productDto) { Integer id = productDto.getId(); if (id != null) { - Product product = findProductById(id).get(); + Product product = dtoProductConvertToProduct(productDto); product.setId(productDto.getId()); - return ProductConverter.dtoProductConvertToProduct(productDto, product); + return product; } - Product product = new Product(); - return ProductConverter.dtoProductConvertToProduct(productDto, product); + return dtoProductConvertToProduct(productDto); + } + + private Product dtoProductConvertToProduct(ProductDto productDto) { + return Product.builder().title(productDto.getTitle()) + .price(productDto.getPrice()) + .categories(categoryService.findCategoryById(productDto.getCategoryDto())) + .build(); } @Override @@ -61,7 +72,15 @@ public Optional findProductById(Integer id) { @Transactional public ProductDto findProductDtoById(Integer id) { Optional productById = findProductById(id); - return ProductConverter.productConvertToDtoProduct(productById.get()); + return productConvertToDTOProduct(productById.get()); + } + + private ProductDto productConvertToDTOProduct(Product entity) { + return ProductDto.builder().id(entity.getId()) + .title(entity.getTitle()) + .price(entity.getPrice()) + .categoryDto(categoryService.getCategoryIdList(entity.getCategories())) + .build(); } @Override @@ -69,6 +88,14 @@ public void deleteProductById(Integer id) { productRepository.deleteById(id); } + @Override + @Transactional + public Page findProductsByCategoryId(Integer catId, ProductSearchCondition searchCondition) { + Optional byId = categoryRepository.findById(catId); + Pageable pageable = getPageable(searchCondition); + return productRepository.findProductsByCategories(pageable, byId.get()); + } + @Override public Page findAllBySearchConditional(ProductSearchCondition searchCondition) { Pageable pageRequest = getPageable(searchCondition); @@ -76,7 +103,7 @@ public Page findAllBySearchConditional(ProductSearchCondition searchCon } private Pageable getPageable(ProductSearchCondition searchCondition) { - return PageRequest.of(searchCondition.getPageNum()-1, + return PageRequest.of(searchCondition.getPageNum() - 1, searchCondition.getPageSize(), Sort.by(searchCondition.getSortDirection(), searchCondition.getSortField())); } @@ -91,7 +118,7 @@ public Page findProductsByTitleAndByMaxAndMinPriceBySearchConditional( maxPrice = Integer.MAX_VALUE; } Pageable pageRequest = getPageable(searchCondition); - return productRepository.findProductsByTitleContainingIgnoreCaseAndPriceBetween(title,minPrice,maxPrice,pageRequest); + return productRepository.findProductsByTitleContainingIgnoreCaseAndPriceBetween(title, minPrice, maxPrice, pageRequest); } @Override diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index 6c79ed7..a75c514 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -11,3 +11,4 @@ spring.flyway.url=jdbc:postgresql://localhost:5435/spring spring.flyway.schemas=public spring.flyway.user=postgres spring.flyway.password=postgrespass +#spring.jpa.open-in-view=false \ No newline at end of file diff --git a/src/main/resources/db/migration/V1_address_orders_create_rable.sql b/src/main/resources/db/migration/V1_address_orders_create_rable.sql new file mode 100644 index 0000000..062da5e --- /dev/null +++ b/src/main/resources/db/migration/V1_address_orders_create_rable.sql @@ -0,0 +1,43 @@ +create table address +( + id serial + constraint address_pk + primary key, + city text not null, + street text not null, + house integer not null, + apartment integer not null +); + +alter table address + owner to postgres; + +create table orders +( + id serial + constraint orders_pk + primary key, + status text not null, + address_id integer not null + constraint orders_address_id_fk + references address + on delete cascade, + user_id integer not null + constraint orders_users_id_fk + references users, + cart jsonb not null, + date date not null +); + +alter table orders + owner to postgres; + +create unique index orders_id_uindex + on orders (id); + +INSERT INTO public.address (id, city, street, house, apartment) VALUES (7, 'г. Тверь', 'ул. 2-я Серова', 33, 33); +INSERT INTO public.address (id, city, street, house, apartment) VALUES (8, 'hfhgdf', 'dg', 1212, 121); + +INSERT INTO public.orders (id, status, address_id, user_id, cart, date) VALUES (1, 'new', 7, 3, '[{"id": 9, "price": 123, "title": "Латук", "categoryDto": [1]}, {"id": 22, "price": 2324, "title": "Абрикос", "categoryDto": [2]}]', '2021-10-12'); +INSERT INTO public.orders (id, status, address_id, user_id, cart, date) VALUES (2, 'new', 8, 3, '[{"id": 22, "price": 2324, "title": "Абрикос", "categoryDto": [2]}, {"id": 6, "price": 180, "title": "Виноград", "categoryDto": [2]}]', '2021-10-12'); + diff --git a/src/main/resources/templates/cart/list.html b/src/main/resources/templates/cart/list.html index 3f48037..aceeaa4 100644 --- a/src/main/resources/templates/cart/list.html +++ b/src/main/resources/templates/cart/list.html @@ -47,6 +47,8 @@ Сумма: + Создать заказ + diff --git a/src/main/resources/templates/category/list.html b/src/main/resources/templates/category/list.html index 8522501..0b12cf0 100644 --- a/src/main/resources/templates/category/list.html +++ b/src/main/resources/templates/category/list.html @@ -9,16 +9,14 @@
    Header
    -
    Card title
    + К продуктам
    - -
    Footer
    diff --git a/src/main/resources/templates/filter/filter.html b/src/main/resources/templates/filter/filter.html deleted file mode 100644 index 78d361e..0000000 --- a/src/main/resources/templates/filter/filter.html +++ /dev/null @@ -1,56 +0,0 @@ - - - - - - filter - - - - - - \ No newline at end of file diff --git a/src/main/resources/templates/fragment/header.html b/src/main/resources/templates/fragment/header.html index 0b9f6b5..6d0e0c1 100644 --- a/src/main/resources/templates/fragment/header.html +++ b/src/main/resources/templates/fragment/header.html @@ -9,6 +9,7 @@
    diff --git a/src/main/resources/templates/order/list.html b/src/main/resources/templates/order/list.html new file mode 100644 index 0000000..036155b --- /dev/null +++ b/src/main/resources/templates/order/list.html @@ -0,0 +1,50 @@ + + + + + list order + + + +
    Header
    + +
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    #СтатусАдресДата заказаСписок покупок
    +
    +
    +
    + + \ No newline at end of file diff --git a/src/main/resources/templates/order/newOrder.html b/src/main/resources/templates/order/newOrder.html new file mode 100644 index 0000000..35f1c29 --- /dev/null +++ b/src/main/resources/templates/order/newOrder.html @@ -0,0 +1,82 @@ + + + + + Add order + + + +
    Header
    + +
    + +
    +
    + + + + + + + + + + + + + + + + +
    + + +
    +
    + + +
    +
    + + +
    +
    + + +
    + + + + + + + + + + + +
    + + + + + + + + + + + + + + +
    + +
    + +
    +
    + + + \ No newline at end of file diff --git a/src/main/resources/templates/product/form.html b/src/main/resources/templates/product/form.html index 2f47389..f28feb1 100644 --- a/src/main/resources/templates/product/form.html +++ b/src/main/resources/templates/product/form.html @@ -25,9 +25,9 @@

    - - +
    diff --git a/src/main/resources/templates/user/personalAccount.html b/src/main/resources/templates/user/personalAccount.html new file mode 100644 index 0000000..81cdec0 --- /dev/null +++ b/src/main/resources/templates/user/personalAccount.html @@ -0,0 +1,42 @@ + + + + + personal account + + + +
    Header
    +
    +
    +
    + +
    + +
    +
    + + + + + + + + + + + + + + + + +
    Имяemail
    +
    +
    +
    + + + + \ No newline at end of file diff --git a/src/main/resources/templates/user/registration.html b/src/main/resources/templates/user/registration.html index 30715f0..39671d9 100644 --- a/src/main/resources/templates/user/registration.html +++ b/src/main/resources/templates/user/registration.html @@ -7,8 +7,8 @@ integrity="sha384-KyZXEAg3QhqLMpG8r+8fhAXLRk2vvoC2f3B09zVXn8CA5QIVfZOJ3BCsw2P0p/We" crossorigin="anonymous"> +
    Header
    -
    Header

    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