From 8f36e58d8aec2d64ec9df2b9eac7fb3d23bfb30d Mon Sep 17 00:00:00 2001 From: pablo correia Date: Tue, 20 Jun 2023 22:00:57 -0300 Subject: [PATCH 01/11] =?UTF-8?q?feat:=20adicionado=20a=20nova=20pagina=20?= =?UTF-8?q?de=20edi=C3=A7=C3=A3o=20de=20endere=C3=A7o=20e=20tambem=20criad?= =?UTF-8?q?o=20a=20rota?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/MyAccountController.java | 32 ++++++ .../view/professional/account/my-address.jsp | 102 ++++++++++++++++++ .../view/professional/edit-account.jsp | 2 +- 3 files changed, 135 insertions(+), 1 deletion(-) create mode 100644 src/main/webapp/WEB-INF/view/professional/account/my-address.jsp diff --git a/src/main/java/br/edu/utfpr/servicebook/controller/MyAccountController.java b/src/main/java/br/edu/utfpr/servicebook/controller/MyAccountController.java index 1daf723b..de19f0cb 100644 --- a/src/main/java/br/edu/utfpr/servicebook/controller/MyAccountController.java +++ b/src/main/java/br/edu/utfpr/servicebook/controller/MyAccountController.java @@ -186,6 +186,38 @@ public ModelAndView showMyEmail(@PathVariable Long id) throws IOException { return mv; } +// teste rota endereço + /** + * Apresenta a tela de email do usuário. + * FIXME Depois de modificado, informar para o usuário fazer o login novamente. + * @param id + * @return + * @throws IOException + */ + @GetMapping("/meu-endereco/{id}") + @RolesAllowed({RoleType.USER, RoleType.COMPANY}) + public ModelAndView showMyAddress(@PathVariable Long id) throws IOException { + Optional oUser = this.userService.findById(id); + + if (!oUser.isPresent()) { + throw new AuthenticationCredentialsNotFoundException("Usuário não autenticado! Por favor, realize sua autenticação no sistema."); + } + + UserDTO userDTO = userMapper.toDto(oUser.get()); + + ModelAndView mv = new ModelAndView("professional/account/my-address"); + + CityMidDTO testeNovo = userDTO.getAddress().getCity(); + System.out.println(testeNovo); + CityDTO testeCity = new CityDTO(); +// System.out.println(userDTO.getAddress().getCity()); + mv.addObject("professional", userDTO); + mv.addObject("city", testeNovo); + + return mv; + } +// tente rota endereço + /** * FIXME Ao mudar o email, fazer logout para o usuário logar novamente, aí com o novo email * @param id diff --git a/src/main/webapp/WEB-INF/view/professional/account/my-address.jsp b/src/main/webapp/WEB-INF/view/professional/account/my-address.jsp new file mode 100644 index 00000000..a1655c3e --- /dev/null +++ b/src/main/webapp/WEB-INF/view/professional/account/my-address.jsp @@ -0,0 +1,102 @@ +<%@page contentType="text/html" pageEncoding="UTF-8" %> +<%@taglib prefix="t" tagdir="/WEB-INF/tags" %> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> + + + + +
+
+ +
+ + ${e.getDefaultMessage()}
+
+
+
+ +
+
+

+ Qual o seu endereço? +

+
+ Será útil para filtrar serviços por região e de acordo com a distância + para o local de realização do serviço. +
+
+
+
+ +
+
+
+ + + +
+
+
+
+ + +
+
+
+
+ + +
+
+
+
+ + +
+
+
+
+ + +
+
+
+
+ + +
+
+
+
+ +
+
+
+ +
+
+
+
+
+
+
+ +
+
+ + + + + \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/view/professional/edit-account.jsp b/src/main/webapp/WEB-INF/view/professional/edit-account.jsp index 152a6ec5..52cf0e54 100644 --- a/src/main/webapp/WEB-INF/view/professional/edit-account.jsp +++ b/src/main/webapp/WEB-INF/view/professional/edit-account.jsp @@ -40,7 +40,7 @@
- +

location_on

Meu endereço

From 5c2e5035182fe7211729b394f3c9d29ce04cf499 Mon Sep 17 00:00:00 2001 From: pablo correia Date: Tue, 20 Jun 2023 23:24:54 -0300 Subject: [PATCH 02/11] feat: feito mais alguns ajustes no metodo da rota para editar o endereco do usuario --- .../controller/MyAccountController.java | 49 ++++++++++++++++--- .../view/professional/account/my-address.jsp | 6 +-- 2 files changed, 45 insertions(+), 10 deletions(-) diff --git a/src/main/java/br/edu/utfpr/servicebook/controller/MyAccountController.java b/src/main/java/br/edu/utfpr/servicebook/controller/MyAccountController.java index de19f0cb..105d4d8c 100644 --- a/src/main/java/br/edu/utfpr/servicebook/controller/MyAccountController.java +++ b/src/main/java/br/edu/utfpr/servicebook/controller/MyAccountController.java @@ -1,10 +1,7 @@ package br.edu.utfpr.servicebook.controller; import br.edu.utfpr.servicebook.model.dto.*; -import br.edu.utfpr.servicebook.model.entity.City; -import br.edu.utfpr.servicebook.model.entity.Individual; -import br.edu.utfpr.servicebook.model.entity.User; -import br.edu.utfpr.servicebook.model.entity.UserCode; +import br.edu.utfpr.servicebook.model.entity.*; import br.edu.utfpr.servicebook.model.mapper.*; import br.edu.utfpr.servicebook.security.IAuthentication; import br.edu.utfpr.servicebook.security.RoleType; @@ -209,13 +206,51 @@ public ModelAndView showMyAddress(@PathVariable Long id) throws IOException { CityMidDTO testeNovo = userDTO.getAddress().getCity(); System.out.println(testeNovo); - CityDTO testeCity = new CityDTO(); -// System.out.println(userDTO.getAddress().getCity()); + Optional cities = this.cityService.findById(testeNovo.getId()); + City cityUser = cities.get(); mv.addObject("professional", userDTO); - mv.addObject("city", testeNovo); + mv.addObject("city", cityUser); return mv; } + + + /** + * @param id + * @param request + * @param redirectAttributes + * @return + * @throws IOException + */ + @PostMapping("/salvar-endereco/{id}") + @RolesAllowed({RoleType.USER, RoleType.COMPANY}) + public String saveAddress( + @PathVariable Long id, + HttpServletRequest request, + RedirectAttributes redirectAttributes) + throws IOException { + System.out.println("realmente um teste aqui"); + Optional oUser = this.userService.findById(id); + User user = oUser.get(); + Optional cities = this.cityService.findById(user.getAddress().getCity().getId()); + City cityUser = cities.get(); +// CityMidDTO cityUser = cityMapper.toMidDto(cities.get()); + + Address addressEdit = new Address(); + AddressFullDTO addressEditFullDTO = new AddressFullDTO(); + addressEdit.setNeighborhood(request.getParameter("neighborhood")); + addressEdit.setStreet(request.getParameter("number")); + addressEdit.setNumber(request.getParameter("street")); + addressEdit.setPostalCode(request.getParameter("postalCode")); + addressEdit.setCity(cityUser); + this.userService.save(user); + + redirectAttributes.addFlashAttribute("msg", "Email salvo com sucesso!"); + + //return "redirect:/logout"; + return "redirect:/minha-conta/meu-endereco/{id}"; + } + // tente rota endereço /** diff --git a/src/main/webapp/WEB-INF/view/professional/account/my-address.jsp b/src/main/webapp/WEB-INF/view/professional/account/my-address.jsp index a1655c3e..84d379a0 100644 --- a/src/main/webapp/WEB-INF/view/professional/account/my-address.jsp +++ b/src/main/webapp/WEB-INF/view/professional/account/my-address.jsp @@ -24,7 +24,7 @@ Será útil para filtrar serviços por região e de acordo com a distância para o local de realização do serviço. -
+
@@ -61,13 +61,13 @@
- +
-
From 16e06a3f166684dee1aa4a3aacf8555c03336a12 Mon Sep 17 00:00:00 2001 From: pablo correia Date: Thu, 22 Jun 2023 00:28:55 -0300 Subject: [PATCH 03/11] feat: adicionado novo arquivo addressService e colocado a logica todo nessa nova classe --- .../controller/MyAccountController.java | 33 +++++++----- .../servicebook/service/AddressService.java | 52 +++++++++++++++++++ .../view/professional/account/my-address.jsp | 2 +- 3 files changed, 72 insertions(+), 15 deletions(-) create mode 100644 src/main/java/br/edu/utfpr/servicebook/service/AddressService.java diff --git a/src/main/java/br/edu/utfpr/servicebook/controller/MyAccountController.java b/src/main/java/br/edu/utfpr/servicebook/controller/MyAccountController.java index 105d4d8c..306458cc 100644 --- a/src/main/java/br/edu/utfpr/servicebook/controller/MyAccountController.java +++ b/src/main/java/br/edu/utfpr/servicebook/controller/MyAccountController.java @@ -69,6 +69,9 @@ public class MyAccountController { @Autowired private TemplateUtil templateUtil; + @Autowired + private AddressService addressService; + @GetMapping public String home(HttpServletRequest request) { return "redirect:/minha-conta/cliente"; @@ -229,21 +232,23 @@ public String saveAddress( HttpServletRequest request, RedirectAttributes redirectAttributes) throws IOException { - System.out.println("realmente um teste aqui"); +// System.out.println("realmente um teste aqui"); Optional oUser = this.userService.findById(id); - User user = oUser.get(); - Optional cities = this.cityService.findById(user.getAddress().getCity().getId()); - City cityUser = cities.get(); -// CityMidDTO cityUser = cityMapper.toMidDto(cities.get()); - - Address addressEdit = new Address(); - AddressFullDTO addressEditFullDTO = new AddressFullDTO(); - addressEdit.setNeighborhood(request.getParameter("neighborhood")); - addressEdit.setStreet(request.getParameter("number")); - addressEdit.setNumber(request.getParameter("street")); - addressEdit.setPostalCode(request.getParameter("postalCode")); - addressEdit.setCity(cityUser); - this.userService.save(user); +// User user = oUser.get(); +// Optional cities = this.cityService.findById(user.getAddress().getCity().getId()); +// City cityUser = cities.get(); +//// CityMidDTO cityUser = cityMapper.toMidDto(cities.get()); +// +// Address addressEdit = new Address(); +// AddressFullDTO addressEditFullDTO = new AddressFullDTO(); +// addressEdit.setNeighborhood(request.getParameter("neighborhood")); +// addressEdit.setStreet(request.getParameter("street")); +// addressEdit.setNumber(request.getParameter("number")); +// addressEdit.setPostalCode(request.getParameter("postalCode")); +// addressEdit.setCity(cityUser); +// user.setAddress(addressEdit); +// this.userService.save(user); + this.addressService.editAddress(id, request); redirectAttributes.addFlashAttribute("msg", "Email salvo com sucesso!"); diff --git a/src/main/java/br/edu/utfpr/servicebook/service/AddressService.java b/src/main/java/br/edu/utfpr/servicebook/service/AddressService.java new file mode 100644 index 00000000..24716462 --- /dev/null +++ b/src/main/java/br/edu/utfpr/servicebook/service/AddressService.java @@ -0,0 +1,52 @@ +package br.edu.utfpr.servicebook.service; + + +import br.edu.utfpr.servicebook.model.entity.*; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import javax.servlet.http.HttpServletRequest; +import java.util.Optional; + +@Service +public class AddressService { + + @Autowired + private UserService userService; + + @Autowired + private CityService cityService; + + public Boolean compareAddres(Address address, Address addressUser) { + if (address.getNumber().equals(addressUser.getNumber()) + && address.getPostalCode().equals(addressUser.getPostalCode()) + && address.getStreet().equals(addressUser.getStreet()) && + address.getNeighborhood().equals(addressUser.getNeighborhood()) + && address.getCity().getName().equals(addressUser.getCity().getName())) { + return true; + } else { + return false; + } + } + + public void editAddress(Long id, HttpServletRequest request) { + Optional oUser = this.userService.findById(id); + User user = oUser.get(); + Optional cities = this.cityService.findById(user.getAddress().getCity().getId()); + City cityUser = cities.get(); +// CityMidDTO cityUser = cityMapper.toMidDto(cities.get()); + + Address addressEdit = new Address(); + addressEdit.setNeighborhood(request.getParameter("neighborhood")); + addressEdit.setStreet(request.getParameter("street")); + addressEdit.setNumber(request.getParameter("number")); + addressEdit.setPostalCode(request.getParameter("postalCode").replaceAll("-", "")); + addressEdit.setCity(cityUser); + + if (!compareAddres(addressEdit, user.getAddress())) { + user.setAddress(addressEdit); + this.userService.save(user); + } + } + +} diff --git a/src/main/webapp/WEB-INF/view/professional/account/my-address.jsp b/src/main/webapp/WEB-INF/view/professional/account/my-address.jsp index 84d379a0..0b0c5ca0 100644 --- a/src/main/webapp/WEB-INF/view/professional/account/my-address.jsp +++ b/src/main/webapp/WEB-INF/view/professional/account/my-address.jsp @@ -24,7 +24,7 @@ Será útil para filtrar serviços por região e de acordo com a distância para o local de realização do serviço. - +
From e62bfad61316b20826840a849a612f4fbbba8fd8 Mon Sep 17 00:00:00 2001 From: pablo correia Date: Thu, 22 Jun 2023 00:43:12 -0300 Subject: [PATCH 04/11] =?UTF-8?q?feat:=20adicionado=20a=20mensagem=20flash?= =?UTF-8?q?=20ao=20html=20e=20tamb=C3=A9m=20reformulado=20o=20metodo=20da?= =?UTF-8?q?=20rota?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/MyAccountController.java | 19 +--------- .../servicebook/service/AddressService.java | 35 ++++++++++--------- .../view/professional/account/my-address.jsp | 10 ++++++ 3 files changed, 30 insertions(+), 34 deletions(-) diff --git a/src/main/java/br/edu/utfpr/servicebook/controller/MyAccountController.java b/src/main/java/br/edu/utfpr/servicebook/controller/MyAccountController.java index 306458cc..1e742329 100644 --- a/src/main/java/br/edu/utfpr/servicebook/controller/MyAccountController.java +++ b/src/main/java/br/edu/utfpr/servicebook/controller/MyAccountController.java @@ -232,27 +232,10 @@ public String saveAddress( HttpServletRequest request, RedirectAttributes redirectAttributes) throws IOException { -// System.out.println("realmente um teste aqui"); - Optional oUser = this.userService.findById(id); -// User user = oUser.get(); -// Optional cities = this.cityService.findById(user.getAddress().getCity().getId()); -// City cityUser = cities.get(); -//// CityMidDTO cityUser = cityMapper.toMidDto(cities.get()); -// -// Address addressEdit = new Address(); -// AddressFullDTO addressEditFullDTO = new AddressFullDTO(); -// addressEdit.setNeighborhood(request.getParameter("neighborhood")); -// addressEdit.setStreet(request.getParameter("street")); -// addressEdit.setNumber(request.getParameter("number")); -// addressEdit.setPostalCode(request.getParameter("postalCode")); -// addressEdit.setCity(cityUser); -// user.setAddress(addressEdit); -// this.userService.save(user); this.addressService.editAddress(id, request); - redirectAttributes.addFlashAttribute("msg", "Email salvo com sucesso!"); + redirectAttributes.addFlashAttribute("msg", "Endereço editado com sucesso"); - //return "redirect:/logout"; return "redirect:/minha-conta/meu-endereco/{id}"; } diff --git a/src/main/java/br/edu/utfpr/servicebook/service/AddressService.java b/src/main/java/br/edu/utfpr/servicebook/service/AddressService.java index 24716462..b92b672c 100644 --- a/src/main/java/br/edu/utfpr/servicebook/service/AddressService.java +++ b/src/main/java/br/edu/utfpr/servicebook/service/AddressService.java @@ -30,23 +30,26 @@ public Boolean compareAddres(Address address, Address addressUser) { } public void editAddress(Long id, HttpServletRequest request) { - Optional oUser = this.userService.findById(id); - User user = oUser.get(); - Optional cities = this.cityService.findById(user.getAddress().getCity().getId()); - City cityUser = cities.get(); -// CityMidDTO cityUser = cityMapper.toMidDto(cities.get()); - - Address addressEdit = new Address(); - addressEdit.setNeighborhood(request.getParameter("neighborhood")); - addressEdit.setStreet(request.getParameter("street")); - addressEdit.setNumber(request.getParameter("number")); - addressEdit.setPostalCode(request.getParameter("postalCode").replaceAll("-", "")); - addressEdit.setCity(cityUser); - - if (!compareAddres(addressEdit, user.getAddress())) { - user.setAddress(addressEdit); - this.userService.save(user); + try { + Optional oUser = this.userService.findById(id); + User user = oUser.get(); + Optional cities = this.cityService.findById(user.getAddress().getCity().getId()); + City cityUser = cities.get(); + Address addressEdit = new Address(); + addressEdit.setNeighborhood(request.getParameter("neighborhood")); + addressEdit.setStreet(request.getParameter("street")); + addressEdit.setNumber(request.getParameter("number")); + addressEdit.setPostalCode(request.getParameter("postalCode").replaceAll("-", "")); + addressEdit.setCity(cityUser); + + if (!compareAddres(addressEdit, user.getAddress())) { + user.setAddress(addressEdit); + this.userService.save(user); + } + } catch (Exception exception) { + System.out.println(exception.getMessage()); } + } } diff --git a/src/main/webapp/WEB-INF/view/professional/account/my-address.jsp b/src/main/webapp/WEB-INF/view/professional/account/my-address.jsp index 0b0c5ca0..8bf33ec6 100644 --- a/src/main/webapp/WEB-INF/view/professional/account/my-address.jsp +++ b/src/main/webapp/WEB-INF/view/professional/account/my-address.jsp @@ -7,6 +7,16 @@
+ +
+
+
+ ${msg} +
+
+
+
+
From 665a2a7ad87814e86a6718de154baff0b9f1359d Mon Sep 17 00:00:00 2001 From: pablo correia Date: Thu, 22 Jun 2023 00:45:45 -0300 Subject: [PATCH 05/11] refactor: ajustes --- .../utfpr/servicebook/controller/MyAccountController.java | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/src/main/java/br/edu/utfpr/servicebook/controller/MyAccountController.java b/src/main/java/br/edu/utfpr/servicebook/controller/MyAccountController.java index 1e742329..b62df30d 100644 --- a/src/main/java/br/edu/utfpr/servicebook/controller/MyAccountController.java +++ b/src/main/java/br/edu/utfpr/servicebook/controller/MyAccountController.java @@ -206,10 +206,9 @@ public ModelAndView showMyAddress(@PathVariable Long id) throws IOException { UserDTO userDTO = userMapper.toDto(oUser.get()); ModelAndView mv = new ModelAndView("professional/account/my-address"); - - CityMidDTO testeNovo = userDTO.getAddress().getCity(); - System.out.println(testeNovo); - Optional cities = this.cityService.findById(testeNovo.getId()); + CityMidDTO cityMidDTO = userDTO.getAddress().getCity(); + System.out.println(cityMidDTO); + Optional cities = this.cityService.findById(cityMidDTO.getId()); City cityUser = cities.get(); mv.addObject("professional", userDTO); mv.addObject("city", cityUser); From deba64bd6153f2fd22c1886a0bf3eadcf53281d5 Mon Sep 17 00:00:00 2001 From: pablo correia Date: Thu, 22 Jun 2023 00:51:32 -0300 Subject: [PATCH 06/11] ajustes --- .../br/edu/utfpr/servicebook/controller/MyAccountController.java | 1 - 1 file changed, 1 deletion(-) diff --git a/src/main/java/br/edu/utfpr/servicebook/controller/MyAccountController.java b/src/main/java/br/edu/utfpr/servicebook/controller/MyAccountController.java index b62df30d..1300b262 100644 --- a/src/main/java/br/edu/utfpr/servicebook/controller/MyAccountController.java +++ b/src/main/java/br/edu/utfpr/servicebook/controller/MyAccountController.java @@ -189,7 +189,6 @@ public ModelAndView showMyEmail(@PathVariable Long id) throws IOException { // teste rota endereço /** * Apresenta a tela de email do usuário. - * FIXME Depois de modificado, informar para o usuário fazer o login novamente. * @param id * @return * @throws IOException From 250968015a757b119c78c4fbf7a3741f66cbfde0 Mon Sep 17 00:00:00 2001 From: pablo correia Date: Mon, 26 Jun 2023 21:03:50 -0300 Subject: [PATCH 07/11] =?UTF-8?q?refactor:=20concluido=20os=20ajustes=20pe?= =?UTF-8?q?didos=20no=20review,=20entre=20eles=20est=C3=A3o=20a=20mudan?= =?UTF-8?q?=C3=A7a=20do=20getParameter=20para=20capturar=20os=20valores=20?= =?UTF-8?q?do=20formulario=20usando=20o=20dto=20e=20mais=20alguns=20ajuste?= =?UTF-8?q?s=20como=20remo=C3=A7=C3=A3o=20de=20comentarios=20etc.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/MyAccountController.java | 16 +++++--- .../servicebook/service/AddressService.java | 39 ++++++++++++------- 2 files changed, 35 insertions(+), 20 deletions(-) diff --git a/src/main/java/br/edu/utfpr/servicebook/controller/MyAccountController.java b/src/main/java/br/edu/utfpr/servicebook/controller/MyAccountController.java index 1300b262..ff6dce92 100644 --- a/src/main/java/br/edu/utfpr/servicebook/controller/MyAccountController.java +++ b/src/main/java/br/edu/utfpr/servicebook/controller/MyAccountController.java @@ -8,6 +8,7 @@ import br.edu.utfpr.servicebook.service.*; import br.edu.utfpr.servicebook.util.UserTemplateInfo; import br.edu.utfpr.servicebook.util.TemplateUtil; +import br.edu.utfpr.servicebook.util.UserWizardUtil; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -23,6 +24,7 @@ import javax.annotation.security.RolesAllowed; import javax.persistence.EntityNotFoundException; import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpSession; import java.io.IOException; import java.util.Optional; @@ -72,6 +74,9 @@ public class MyAccountController { @Autowired private AddressService addressService; + @Autowired + private UserWizardUtil userWizardUtil; + @GetMapping public String home(HttpServletRequest request) { return "redirect:/minha-conta/cliente"; @@ -227,20 +232,21 @@ public ModelAndView showMyAddress(@PathVariable Long id) throws IOException { @RolesAllowed({RoleType.USER, RoleType.COMPANY}) public String saveAddress( @PathVariable Long id, + HttpSession httpSession, HttpServletRequest request, - RedirectAttributes redirectAttributes) + RedirectAttributes redirectAttributes, + @Validated(AddressDTO.RequestUserAddressInfoGroupValidation.class) AddressDTO dto, + BindingResult errors) throws IOException { - this.addressService.editAddress(id, request); + + this.addressService.editAddress(id, dto, errors, httpSession); redirectAttributes.addFlashAttribute("msg", "Endereço editado com sucesso"); return "redirect:/minha-conta/meu-endereco/{id}"; } -// tente rota endereço - /** - * FIXME Ao mudar o email, fazer logout para o usuário logar novamente, aí com o novo email * @param id * @param request * @param redirectAttributes diff --git a/src/main/java/br/edu/utfpr/servicebook/service/AddressService.java b/src/main/java/br/edu/utfpr/servicebook/service/AddressService.java index b92b672c..c2d98148 100644 --- a/src/main/java/br/edu/utfpr/servicebook/service/AddressService.java +++ b/src/main/java/br/edu/utfpr/servicebook/service/AddressService.java @@ -1,11 +1,17 @@ package br.edu.utfpr.servicebook.service; +import br.edu.utfpr.servicebook.model.dto.*; import br.edu.utfpr.servicebook.model.entity.*; +import br.edu.utfpr.servicebook.model.mapper.CityMapper; +import br.edu.utfpr.servicebook.model.mapper.IndividualMapper; +import br.edu.utfpr.servicebook.model.mapper.UserMapper; +import br.edu.utfpr.servicebook.util.UserWizardUtil; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import org.springframework.validation.BindingResult; -import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpSession; import java.util.Optional; @Service @@ -29,23 +35,26 @@ public Boolean compareAddres(Address address, Address addressUser) { } } - public void editAddress(Long id, HttpServletRequest request) { + public void editAddress(Long id, AddressDTO dto, BindingResult errors, HttpSession httpSession) { try { + Optional oCity = cityService.findByName(dto.getCity()); + + if (!oCity.isPresent()) { + errors.rejectValue("city", "error.dto", "Cidade não cadastrada! Por favor, insira uma cidade cadastrada."); + } + + City cityMidDTO = oCity.get(); + + Address addressFullDTO = new Address(); Optional oUser = this.userService.findById(id); User user = oUser.get(); - Optional cities = this.cityService.findById(user.getAddress().getCity().getId()); - City cityUser = cities.get(); - Address addressEdit = new Address(); - addressEdit.setNeighborhood(request.getParameter("neighborhood")); - addressEdit.setStreet(request.getParameter("street")); - addressEdit.setNumber(request.getParameter("number")); - addressEdit.setPostalCode(request.getParameter("postalCode").replaceAll("-", "")); - addressEdit.setCity(cityUser); - - if (!compareAddres(addressEdit, user.getAddress())) { - user.setAddress(addressEdit); - this.userService.save(user); - } + user.getAddress().setStreet(dto.getStreet().trim()); + user.getAddress().setNumber(dto.getNumber().trim()); + user.getAddress().setPostalCode(dto.getPostalCode().trim()); + user.getAddress().setNeighborhood(dto.getNeighborhood().trim()); + user.getAddress().setCity(cityMidDTO); + this.userService.save(user); + } catch (Exception exception) { System.out.println(exception.getMessage()); } From f418f2fa6a2086e888b6062a3cfc42c24e1bf697 Mon Sep 17 00:00:00 2001 From: pablo correia Date: Wed, 28 Jun 2023 22:29:54 -0300 Subject: [PATCH 08/11] refactor: fiz os ajuste que foram pedidos menos o uso do mapper que deixei comentado pois esta com um erro que deixei um comentario no codigo --- .../controller/MyAccountController.java | 45 +++++++++++-- .../model/mapper/AddressMapper.java | 35 ++++++++++ .../servicebook/service/AddressService.java | 64 ------------------- .../view/professional/account/my-address.jsp | 12 ++-- 4 files changed, 82 insertions(+), 74 deletions(-) create mode 100644 src/main/java/br/edu/utfpr/servicebook/model/mapper/AddressMapper.java delete mode 100644 src/main/java/br/edu/utfpr/servicebook/service/AddressService.java diff --git a/src/main/java/br/edu/utfpr/servicebook/controller/MyAccountController.java b/src/main/java/br/edu/utfpr/servicebook/controller/MyAccountController.java index ff6dce92..01bb26ae 100644 --- a/src/main/java/br/edu/utfpr/servicebook/controller/MyAccountController.java +++ b/src/main/java/br/edu/utfpr/servicebook/controller/MyAccountController.java @@ -72,10 +72,10 @@ public class MyAccountController { private TemplateUtil templateUtil; @Autowired - private AddressService addressService; + private UserWizardUtil userWizardUtil; @Autowired - private UserWizardUtil userWizardUtil; + private AddressMapper addressMapper; @GetMapping public String home(HttpServletRequest request) { @@ -235,13 +235,46 @@ public String saveAddress( HttpSession httpSession, HttpServletRequest request, RedirectAttributes redirectAttributes, - @Validated(AddressDTO.RequestUserAddressInfoGroupValidation.class) AddressDTO dto, + @Validated AddressDTO dto, BindingResult errors) throws IOException { - this.addressService.editAddress(id, dto, errors, httpSession); - - redirectAttributes.addFlashAttribute("msg", "Endereço editado com sucesso"); + Optional oUser = (userService.findByEmail(authentication.getEmail())); + ModelAndView mv = new ModelAndView("professional/account/my-address"); + try { + if (!oUser.isPresent()) { + throw new AuthenticationCredentialsNotFoundException("Usuário não autenticado! Por favor, realize sua autenticação no sistema."); + } + if (oUser.get().getId() == id) { + Optional oCity = cityService.findByName(dto.getCity()); + + if (!oCity.isPresent()) { + errors.rejectValue("city", "error.dto", "Cidade não cadastrada! Por favor, insira uma cidade cadastrada."); + redirectAttributes.addFlashAttribute("errors", errors.getAllErrors()); + return "redirect:/minha-conta/meu-endereco/{id}"; + } + + City cityMidDTO = oCity.get(); + User user = oUser.get(); +// user.setAddress(addressMapper.toUpdate(dto, user.getAddress().getId(), cityMidDTO)); + // TENTEI FAZER USANDO O MAPPER DO ADDRESS QUE CRIEI MAS NÃO FUNCIONA POIS + // O ID ACABA FICANDO NULL TANTO DA CIDADE QUANTO O DO PROPRIO ADDRES AI TENTEI FAZER UM AJUSTE MAS MESMO ASSIM ACABO COM UM ERRO DE + //detached entity passed to persist entao deixei da forma abaixo que estava funcionando + user.getAddress().setCity(cityMidDTO); + user.getAddress().setStreet(dto.getStreet().trim()); + user.getAddress().setNumber(dto.getNumber().trim()); + user.getAddress().setPostalCode(dto.getPostalCode().trim()); + user.getAddress().setNeighborhood(dto.getNeighborhood().trim()); + this.userService.save(user); + redirectAttributes.addFlashAttribute("msg", "Endereço editado com sucesso"); + } else { + throw new AuthenticationCredentialsNotFoundException("Usuario não corresponde com o id"); + } + } catch (Exception exception) { + errors.rejectValue(null, "not-found", "Erro ao editar endereço: " + exception.getMessage()); + redirectAttributes.addFlashAttribute("errors", errors.getAllErrors()); + return "redirect:/minha-conta/meu-endereco/{id}"; + } return "redirect:/minha-conta/meu-endereco/{id}"; } diff --git a/src/main/java/br/edu/utfpr/servicebook/model/mapper/AddressMapper.java b/src/main/java/br/edu/utfpr/servicebook/model/mapper/AddressMapper.java new file mode 100644 index 00000000..5bc54ee9 --- /dev/null +++ b/src/main/java/br/edu/utfpr/servicebook/model/mapper/AddressMapper.java @@ -0,0 +1,35 @@ +package br.edu.utfpr.servicebook.model.mapper; + +import br.edu.utfpr.servicebook.model.dto.AddressDTO; +import br.edu.utfpr.servicebook.model.dto.UserDTO; +import br.edu.utfpr.servicebook.model.entity.Address; +import br.edu.utfpr.servicebook.model.entity.City; +import br.edu.utfpr.servicebook.model.entity.User; +import org.modelmapper.ModelMapper; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +@Component +public class AddressMapper { + + @Autowired + private ModelMapper mapper; + + public AddressDTO toDto(Address entity) { + AddressDTO dto = mapper.map(entity, AddressDTO.class); + return dto; + } + + public Address toEntity(AddressDTO dto) { + Address entity = mapper.map(dto, Address.class); + return entity; + } + + public Address toUpdate(AddressDTO dto, Long id, City city) { + Address entity = mapper.map(dto, Address.class); + entity.setId(id); + entity.setCity(city); + return entity; + } + +} diff --git a/src/main/java/br/edu/utfpr/servicebook/service/AddressService.java b/src/main/java/br/edu/utfpr/servicebook/service/AddressService.java deleted file mode 100644 index c2d98148..00000000 --- a/src/main/java/br/edu/utfpr/servicebook/service/AddressService.java +++ /dev/null @@ -1,64 +0,0 @@ -package br.edu.utfpr.servicebook.service; - - -import br.edu.utfpr.servicebook.model.dto.*; -import br.edu.utfpr.servicebook.model.entity.*; -import br.edu.utfpr.servicebook.model.mapper.CityMapper; -import br.edu.utfpr.servicebook.model.mapper.IndividualMapper; -import br.edu.utfpr.servicebook.model.mapper.UserMapper; -import br.edu.utfpr.servicebook.util.UserWizardUtil; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; -import org.springframework.validation.BindingResult; - -import javax.servlet.http.HttpSession; -import java.util.Optional; - -@Service -public class AddressService { - - @Autowired - private UserService userService; - - @Autowired - private CityService cityService; - - public Boolean compareAddres(Address address, Address addressUser) { - if (address.getNumber().equals(addressUser.getNumber()) - && address.getPostalCode().equals(addressUser.getPostalCode()) - && address.getStreet().equals(addressUser.getStreet()) && - address.getNeighborhood().equals(addressUser.getNeighborhood()) - && address.getCity().getName().equals(addressUser.getCity().getName())) { - return true; - } else { - return false; - } - } - - public void editAddress(Long id, AddressDTO dto, BindingResult errors, HttpSession httpSession) { - try { - Optional oCity = cityService.findByName(dto.getCity()); - - if (!oCity.isPresent()) { - errors.rejectValue("city", "error.dto", "Cidade não cadastrada! Por favor, insira uma cidade cadastrada."); - } - - City cityMidDTO = oCity.get(); - - Address addressFullDTO = new Address(); - Optional oUser = this.userService.findById(id); - User user = oUser.get(); - user.getAddress().setStreet(dto.getStreet().trim()); - user.getAddress().setNumber(dto.getNumber().trim()); - user.getAddress().setPostalCode(dto.getPostalCode().trim()); - user.getAddress().setNeighborhood(dto.getNeighborhood().trim()); - user.getAddress().setCity(cityMidDTO); - this.userService.save(user); - - } catch (Exception exception) { - System.out.println(exception.getMessage()); - } - - } - -} diff --git a/src/main/webapp/WEB-INF/view/professional/account/my-address.jsp b/src/main/webapp/WEB-INF/view/professional/account/my-address.jsp index 8bf33ec6..f16d264e 100644 --- a/src/main/webapp/WEB-INF/view/professional/account/my-address.jsp +++ b/src/main/webapp/WEB-INF/view/professional/account/my-address.jsp @@ -18,10 +18,14 @@ -
- - ${e.getDefaultMessage()}
-
+
+
+
+ + ${e.getDefaultMessage()}
+
+
+
From f499876fde25af0257fc1c241158ce8a3f909c3e Mon Sep 17 00:00:00 2001 From: pablo correia Date: Sun, 2 Jul 2023 21:27:19 -0300 Subject: [PATCH 09/11] =?UTF-8?q?refactor:=20ajustei=20a=20tela=20de=20edi?= =?UTF-8?q?=C3=A7=C3=A3o=20de=20cadastro=20para=20adicionar=20o=20bot?= =?UTF-8?q?=C3=A3o=20editar=20e=20o=20disabled=20nos=20campos,=20tamb?= =?UTF-8?q?=C3=A9m=20arrumei=20algumas=20coisas=20refatora=C3=A7=C3=B5es?= =?UTF-8?q?=20no=20codigo=20do=20controller=20envolvendo=20verifica=C3=A7?= =?UTF-8?q?=C3=B5es=20e=20tamb=C3=A9m=20mantive=20o=20comentario=20e=20o?= =?UTF-8?q?=20mapper=20j=C3=A1=20que=20continuam=20sem=20funcionar=20mesmo?= =?UTF-8?q?=20usando=20o=20PatchMapping?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/MyAccountController.java | 79 ++++++++++++------- .../view/professional/account/my-address.jsp | 61 +++++++++----- 2 files changed, 92 insertions(+), 48 deletions(-) diff --git a/src/main/java/br/edu/utfpr/servicebook/controller/MyAccountController.java b/src/main/java/br/edu/utfpr/servicebook/controller/MyAccountController.java index 01bb26ae..bf538ea9 100644 --- a/src/main/java/br/edu/utfpr/servicebook/controller/MyAccountController.java +++ b/src/main/java/br/edu/utfpr/servicebook/controller/MyAccountController.java @@ -26,7 +26,9 @@ import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpSession; import java.io.IOException; +import java.util.List; import java.util.Optional; +import java.util.stream.Collectors; @RequestMapping("/minha-conta") @Controller @@ -76,6 +78,10 @@ public class MyAccountController { @Autowired private AddressMapper addressMapper; + @Autowired + private StateService stateService; + @Autowired + private StateMapper stateMapper; @GetMapping public String home(HttpServletRequest request) { @@ -202,20 +208,33 @@ public ModelAndView showMyEmail(@PathVariable Long id) throws IOException { @RolesAllowed({RoleType.USER, RoleType.COMPANY}) public ModelAndView showMyAddress(@PathVariable Long id) throws IOException { Optional oUser = this.userService.findById(id); - + Optional oUserAuthenticated = this.userService.findByEmail(authentication.getEmail()); + User userAuthenticated = oUserAuthenticated.get(); + State userState = userAuthenticated.getAddress().getCity().getState(); + City userCity = userAuthenticated.getAddress().getCity(); if (!oUser.isPresent()) { throw new AuthenticationCredentialsNotFoundException("Usuário não autenticado! Por favor, realize sua autenticação no sistema."); } + if (id != userAuthenticated.getId()) { + throw new AuthenticationCredentialsNotFoundException("Você não tem permissão para atualizar essas informações"); + } + UserDTO userDTO = userMapper.toDto(oUser.get()); ModelAndView mv = new ModelAndView("professional/account/my-address"); CityMidDTO cityMidDTO = userDTO.getAddress().getCity(); - System.out.println(cityMidDTO); - Optional cities = this.cityService.findById(cityMidDTO.getId()); - City cityUser = cities.get(); + List cities = this.cityService.findAll(); + List states = this.stateService.findAll(); + //remove o estado e a cidade do usuario e adiciona no inicio para que apareça em primeiro no select + states.remove(userState); + states.add(0, userState); + cities.remove(userCity); + cities.add(0, userCity); + mv.addObject("professional", userDTO); - mv.addObject("city", cityUser); + mv.addObject("cities", cities); + mv.addObject("states", states); return mv; } @@ -228,7 +247,7 @@ public ModelAndView showMyAddress(@PathVariable Long id) throws IOException { * @return * @throws IOException */ - @PostMapping("/salvar-endereco/{id}") + @PatchMapping("/salvar-endereco/{id}") @RolesAllowed({RoleType.USER, RoleType.COMPANY}) public String saveAddress( @PathVariable Long id, @@ -241,35 +260,37 @@ public String saveAddress( Optional oUser = (userService.findByEmail(authentication.getEmail())); ModelAndView mv = new ModelAndView("professional/account/my-address"); + Optional oUserAuthenticated = this.userService.findByEmail(authentication.getEmail()); + User userAuthenticated = oUserAuthenticated.get(); try { if (!oUser.isPresent()) { throw new AuthenticationCredentialsNotFoundException("Usuário não autenticado! Por favor, realize sua autenticação no sistema."); } - if (oUser.get().getId() == id) { - Optional oCity = cityService.findByName(dto.getCity()); - - if (!oCity.isPresent()) { - errors.rejectValue("city", "error.dto", "Cidade não cadastrada! Por favor, insira uma cidade cadastrada."); - redirectAttributes.addFlashAttribute("errors", errors.getAllErrors()); - return "redirect:/minha-conta/meu-endereco/{id}"; - } - - City cityMidDTO = oCity.get(); - User user = oUser.get(); -// user.setAddress(addressMapper.toUpdate(dto, user.getAddress().getId(), cityMidDTO)); - // TENTEI FAZER USANDO O MAPPER DO ADDRESS QUE CRIEI MAS NÃO FUNCIONA POIS - // O ID ACABA FICANDO NULL TANTO DA CIDADE QUANTO O DO PROPRIO ADDRES AI TENTEI FAZER UM AJUSTE MAS MESMO ASSIM ACABO COM UM ERRO DE - //detached entity passed to persist entao deixei da forma abaixo que estava funcionando - user.getAddress().setCity(cityMidDTO); - user.getAddress().setStreet(dto.getStreet().trim()); - user.getAddress().setNumber(dto.getNumber().trim()); - user.getAddress().setPostalCode(dto.getPostalCode().trim()); - user.getAddress().setNeighborhood(dto.getNeighborhood().trim()); - this.userService.save(user); - redirectAttributes.addFlashAttribute("msg", "Endereço editado com sucesso"); - } else { + if (id != userAuthenticated.getId()) { throw new AuthenticationCredentialsNotFoundException("Usuario não corresponde com o id"); } + + Optional oCity = cityService.findByName(dto.getCity()); + + if (!oCity.isPresent()) { + errors.rejectValue("city", "error.dto", "Cidade não cadastrada! Por favor, insira uma cidade cadastrada."); + redirectAttributes.addFlashAttribute("errors", errors.getAllErrors()); + return "redirect:/minha-conta/meu-endereco/{id}"; + } + + City cityMidDTO = oCity.get(); + User user = oUser.get(); +// user.setAddress(addressMapper.toUpdate(dto, user.getAddress().getId(), cityMidDTO)); + // TENTEI FAZER USANDO O MAPPER DO ADDRESS QUE CRIEI MAS NÃO FUNCIONA POIS + // O ID ACABA FICANDO NULL TANTO DA CIDADE QUANTO O DO PROPRIO ADDRES AI TENTEI FAZER UM AJUSTE MAS MESMO ASSIM ACABO COM UM ERRO DE + //detached entity passed to persist entao deixei da forma abaixo que estava funcionando + user.getAddress().setCity(cityMidDTO); + user.getAddress().setStreet(dto.getStreet().trim()); + user.getAddress().setNumber(dto.getNumber().trim()); + user.getAddress().setPostalCode(dto.getPostalCode().trim()); + user.getAddress().setNeighborhood(dto.getNeighborhood().trim()); + this.userService.save(user); + redirectAttributes.addFlashAttribute("msg", "Endereço editado com sucesso"); } catch (Exception exception) { errors.rejectValue(null, "not-found", "Erro ao editar endereço: " + exception.getMessage()); redirectAttributes.addFlashAttribute("errors", errors.getAllErrors()); diff --git a/src/main/webapp/WEB-INF/view/professional/account/my-address.jsp b/src/main/webapp/WEB-INF/view/professional/account/my-address.jsp index f16d264e..830d86b3 100644 --- a/src/main/webapp/WEB-INF/view/professional/account/my-address.jsp +++ b/src/main/webapp/WEB-INF/view/professional/account/my-address.jsp @@ -2,7 +2,7 @@ <%@taglib prefix="t" tagdir="/WEB-INF/tags" %> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> - +
@@ -38,7 +38,8 @@ Será útil para filtrar serviços por região e de acordo com a distância para o local de realização do serviço. - + +
@@ -47,44 +48,55 @@
- - + +
+ class="validate" disabled>
- +
+ class="validate" disabled required>
-
- - -
+ +
+ + +
+
-
- - -
+ +
+ + +
+
@@ -96,7 +108,8 @@
- + +
@@ -112,5 +125,15 @@ \ No newline at end of file From 9fb1e0369270fe700436f414f794b48f1a208a52 Mon Sep 17 00:00:00 2001 From: Roni Fabio Banaszewski Date: Tue, 4 Jul 2023 13:37:43 -0300 Subject: [PATCH 10/11] refactor: ajustes gerais --- .../controller/MyAccountController.java | 122 ++++++++++-------- .../controller/UserRegisterController.java | 8 +- .../servicebook/model/dto/AddressDTO.java | 14 +- .../servicebook/model/dto/AddressFullDTO.java | 6 +- .../model/dto/AddressUpdateDTO.java | 34 +++++ .../servicebook/model/dto/StateMinDTO.java | 1 + .../model/repository/CityRepository.java | 3 + .../servicebook/service/CityService.java | 8 ++ .../view/professional/account/my-address.jsp | 61 +++++---- .../scripts/cep-user-registration.js | 15 ++- 10 files changed, 169 insertions(+), 103 deletions(-) create mode 100644 src/main/java/br/edu/utfpr/servicebook/model/dto/AddressUpdateDTO.java diff --git a/src/main/java/br/edu/utfpr/servicebook/controller/MyAccountController.java b/src/main/java/br/edu/utfpr/servicebook/controller/MyAccountController.java index bf538ea9..8fd405c9 100644 --- a/src/main/java/br/edu/utfpr/servicebook/controller/MyAccountController.java +++ b/src/main/java/br/edu/utfpr/servicebook/controller/MyAccountController.java @@ -14,6 +14,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.authentication.AuthenticationCredentialsNotFoundException; import org.springframework.stereotype.Controller; +import org.springframework.ui.Model; import org.springframework.validation.BindingResult; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; @@ -197,99 +198,112 @@ public ModelAndView showMyEmail(@PathVariable Long id) throws IOException { return mv; } -// teste rota endereço + //edita endereço + /** - * Apresenta a tela de email do usuário. + * Apresenta a tela de endereço do usuário. * @param id * @return * @throws IOException */ @GetMapping("/meu-endereco/{id}") @RolesAllowed({RoleType.USER, RoleType.COMPANY}) - public ModelAndView showMyAddress(@PathVariable Long id) throws IOException { + public String showMyAddress(@PathVariable Long id, Model model) throws IOException { + Optional oUser = this.userService.findById(id); - Optional oUserAuthenticated = this.userService.findByEmail(authentication.getEmail()); - User userAuthenticated = oUserAuthenticated.get(); - State userState = userAuthenticated.getAddress().getCity().getState(); - City userCity = userAuthenticated.getAddress().getCity(); + if (!oUser.isPresent()) { + throw new EntityNotFoundException("Usuário não encontrado pelo id informado."); + } + + Optional oUserAuthenticated = this.userService.findByEmail(authentication.getEmail()); + if(!oUserAuthenticated.isPresent()){ throw new AuthenticationCredentialsNotFoundException("Usuário não autenticado! Por favor, realize sua autenticação no sistema."); } + User userAuthenticated = oUserAuthenticated.get(); + + //verifica se o usuario autenticado é o mesmo que está tentando atualizar as informações if (id != userAuthenticated.getId()) { throw new AuthenticationCredentialsNotFoundException("Você não tem permissão para atualizar essas informações"); } + Address address = userAuthenticated.getAddress(); + City city = address.getCity(); + State state = city.getState(); + UserDTO userDTO = userMapper.toDto(oUser.get()); - ModelAndView mv = new ModelAndView("professional/account/my-address"); - CityMidDTO cityMidDTO = userDTO.getAddress().getCity(); List cities = this.cityService.findAll(); List states = this.stateService.findAll(); - //remove o estado e a cidade do usuario e adiciona no inicio para que apareça em primeiro no select - states.remove(userState); - states.add(0, userState); - cities.remove(userCity); - cities.add(0, userCity); - mv.addObject("professional", userDTO); - mv.addObject("cities", cities); - mv.addObject("states", states); + model.addAttribute("professional", userDTO); + model.addAttribute("cities", cities); + model.addAttribute("states", states); - return mv; + return "professional/account/my-address"; } /** * @param id - * @param request * @param redirectAttributes * @return * @throws IOException */ - @PatchMapping("/salvar-endereco/{id}") + @PatchMapping("/meu-endereco/{id}") @RolesAllowed({RoleType.USER, RoleType.COMPANY}) public String saveAddress( @PathVariable Long id, - HttpSession httpSession, - HttpServletRequest request, - RedirectAttributes redirectAttributes, - @Validated AddressDTO dto, - BindingResult errors) + @Validated AddressUpdateDTO dto, + BindingResult errors, + RedirectAttributes redirectAttributes) throws IOException { - Optional oUser = (userService.findByEmail(authentication.getEmail())); - ModelAndView mv = new ModelAndView("professional/account/my-address"); + Optional oUser = this.userService.findById(id); + + if (!oUser.isPresent()) { + throw new EntityNotFoundException("Usuário não encontrado pelo id informado."); + } + Optional oUserAuthenticated = this.userService.findByEmail(authentication.getEmail()); + if(!oUserAuthenticated.isPresent()){ + throw new AuthenticationCredentialsNotFoundException("Usuário não autenticado! Por favor, realize sua autenticação no sistema."); + } + User userAuthenticated = oUserAuthenticated.get(); + + //verifica se o usuario autenticado é o mesmo que está tentando atualizar as informações + if (id != userAuthenticated.getId()) { + throw new AuthenticationCredentialsNotFoundException("Você não tem permissão para atualizar essas informações"); + } + + //verifica se o estado está cadastrado + if(!stateService.findById(dto.getState()).isPresent()){ + errors.rejectValue("state", "error.dto", "Estado não cadastrado! Por favor, insira um estado cadastrado."); + redirectAttributes.addFlashAttribute("errors", errors.getAllErrors()); + return "redirect:/minha-conta/meu-endereco/{id}"; + } + + //verifica se a cidade existe para o estado informado + if(!cityService.findByIdAndState_Id(dto.getCity(), dto.getState()).isPresent()){ + errors.rejectValue("city", "error.dto", "Cidade não cadastrada para o estado informado! Por favor, insira uma cidade cadastrada."); + redirectAttributes.addFlashAttribute("errors", errors.getAllErrors()); + return "redirect:/minha-conta/meu-endereco/{id}"; + } + try { - if (!oUser.isPresent()) { - throw new AuthenticationCredentialsNotFoundException("Usuário não autenticado! Por favor, realize sua autenticação no sistema."); - } - if (id != userAuthenticated.getId()) { - throw new AuthenticationCredentialsNotFoundException("Usuario não corresponde com o id"); - } - - Optional oCity = cityService.findByName(dto.getCity()); - - if (!oCity.isPresent()) { - errors.rejectValue("city", "error.dto", "Cidade não cadastrada! Por favor, insira uma cidade cadastrada."); - redirectAttributes.addFlashAttribute("errors", errors.getAllErrors()); - return "redirect:/minha-conta/meu-endereco/{id}"; - } - - City cityMidDTO = oCity.get(); - User user = oUser.get(); -// user.setAddress(addressMapper.toUpdate(dto, user.getAddress().getId(), cityMidDTO)); - // TENTEI FAZER USANDO O MAPPER DO ADDRESS QUE CRIEI MAS NÃO FUNCIONA POIS - // O ID ACABA FICANDO NULL TANTO DA CIDADE QUANTO O DO PROPRIO ADDRES AI TENTEI FAZER UM AJUSTE MAS MESMO ASSIM ACABO COM UM ERRO DE - //detached entity passed to persist entao deixei da forma abaixo que estava funcionando - user.getAddress().setCity(cityMidDTO); - user.getAddress().setStreet(dto.getStreet().trim()); - user.getAddress().setNumber(dto.getNumber().trim()); - user.getAddress().setPostalCode(dto.getPostalCode().trim()); - user.getAddress().setNeighborhood(dto.getNeighborhood().trim()); - this.userService.save(user); + //atualiza o endereço do usuário + Address address = userAuthenticated.getAddress(); + address.setCity(cityService.findById(dto.getCity()).get()); + address.setStreet(dto.getStreet().trim()); + address.setNumber(dto.getNumber().trim()); + address.setPostalCode(dto.getPostalCode().trim()); + address.setNeighborhood(dto.getNeighborhood().trim()); + + userAuthenticated.setAddress(address); + + this.userService.save(userAuthenticated); redirectAttributes.addFlashAttribute("msg", "Endereço editado com sucesso"); } catch (Exception exception) { errors.rejectValue(null, "not-found", "Erro ao editar endereço: " + exception.getMessage()); diff --git a/src/main/java/br/edu/utfpr/servicebook/controller/UserRegisterController.java b/src/main/java/br/edu/utfpr/servicebook/controller/UserRegisterController.java index c806442b..9e3f2654 100644 --- a/src/main/java/br/edu/utfpr/servicebook/controller/UserRegisterController.java +++ b/src/main/java/br/edu/utfpr/servicebook/controller/UserRegisterController.java @@ -604,7 +604,7 @@ public String saveUserNameAndCNPJ( @PermitAll public String saveUserAddress( HttpSession httpSession, - @Validated(AddressDTO.RequestUserAddressInfoGroupValidation.class) AddressDTO dto, + @Validated AddressDTO dto, BindingResult errors, RedirectAttributes redirectAttributes, Model model @@ -686,8 +686,7 @@ public String saveUser( IndividualDTO.RequestUserEmailInfoGroupValidation.class, IndividualDTO.RequestUserPasswordInfoGroupValidation.class, IndividualDTO.RequestUserPhoneInfoGroupValidation.class, - IndividualDTO.RequestUserNameAndCNPJInfoGroupValidation.class, - AddressDTO.RequestUserAddressInfoGroupValidation.class + IndividualDTO.RequestUserNameAndCNPJInfoGroupValidation.class }); if (errors.hasErrors()) { @@ -705,8 +704,7 @@ public String saveUser( IndividualDTO.RequestUserEmailInfoGroupValidation.class, IndividualDTO.RequestUserPasswordInfoGroupValidation.class, IndividualDTO.RequestUserPhoneInfoGroupValidation.class, - IndividualDTO.RequestUserNameAndCPFInfoGroupValidation.class, - AddressDTO.RequestUserAddressInfoGroupValidation.class + IndividualDTO.RequestUserNameAndCPFInfoGroupValidation.class }); if (errors.hasErrors()) { diff --git a/src/main/java/br/edu/utfpr/servicebook/model/dto/AddressDTO.java b/src/main/java/br/edu/utfpr/servicebook/model/dto/AddressDTO.java index 6b2ec868..85a2aa07 100644 --- a/src/main/java/br/edu/utfpr/servicebook/model/dto/AddressDTO.java +++ b/src/main/java/br/edu/utfpr/servicebook/model/dto/AddressDTO.java @@ -12,26 +12,22 @@ @AllArgsConstructor public class AddressDTO implements Serializable { - @NotBlank(message = "Rua inválida! Por favor, insira a rua do endereço.", groups = AddressDTO.RequestUserAddressInfoGroupValidation.class) + @NotBlank(message = "Rua inválida! Por favor, insira a rua do endereço.") private String street; - @NotBlank(message = "Número inválido! Por favor, insira o número do endereço.", groups = AddressDTO.RequestUserAddressInfoGroupValidation.class) private String number; - @NotBlank(message = "CEP inválido! Por favor, insira o CEP do endereço.", groups = AddressDTO.RequestUserAddressInfoGroupValidation.class) + @NotBlank(message = "CEP inválido! Por favor, insira o CEP do endereço.") private String postalCode; - @NotBlank(message = "Bairro inválido! Por favor, insira o bairro do endereço.", groups = AddressDTO.RequestUserAddressInfoGroupValidation.class) + @NotBlank(message = "Bairro inválido! Por favor, insira o bairro do endereço.") private String neighborhood; - @NotBlank(message = "Cidade Inválida! Por favor, insira a cidade do endereço.", groups = AddressDTO.RequestUserAddressInfoGroupValidation.class) + @NotBlank(message = "Cidade Inválida! Por favor, insira a cidade do endereço.") private String city; - @NotBlank(message = "Estado inválido! Por favor, insira o estado do endereço.", groups = AddressDTO.RequestUserAddressInfoGroupValidation.class) + @NotBlank(message = "Estado inválido! Por favor, insira o estado do endereço.") private String state; - public interface RequestUserAddressInfoGroupValidation { - - } } diff --git a/src/main/java/br/edu/utfpr/servicebook/model/dto/AddressFullDTO.java b/src/main/java/br/edu/utfpr/servicebook/model/dto/AddressFullDTO.java index bb150d20..b2709221 100644 --- a/src/main/java/br/edu/utfpr/servicebook/model/dto/AddressFullDTO.java +++ b/src/main/java/br/edu/utfpr/servicebook/model/dto/AddressFullDTO.java @@ -4,17 +4,21 @@ import lombok.Data; import lombok.NoArgsConstructor; +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; import java.io.Serializable; @Data @NoArgsConstructor @AllArgsConstructor public class AddressFullDTO implements Serializable { - + @NotBlank(message = "Por favor, insira o nome da rua.") private String street; private String number; + @NotBlank(message = "Por favor, insira o CEP.") private String postalCode; private String neighborhood; + @NotNull(message = "Por favor, selecione uma cidade.") private CityMidDTO city; } diff --git a/src/main/java/br/edu/utfpr/servicebook/model/dto/AddressUpdateDTO.java b/src/main/java/br/edu/utfpr/servicebook/model/dto/AddressUpdateDTO.java new file mode 100644 index 00000000..99a75ea0 --- /dev/null +++ b/src/main/java/br/edu/utfpr/servicebook/model/dto/AddressUpdateDTO.java @@ -0,0 +1,34 @@ +package br.edu.utfpr.servicebook.model.dto; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; +import java.io.Serializable; + +@Data +@NoArgsConstructor +@AllArgsConstructor +public class AddressUpdateDTO implements Serializable { + + @NotBlank(message = "Rua inválida! Por favor, insira a rua do endereço.") + private String street; + + private String number; + + @NotBlank(message = "CEP inválido! Por favor, insira o CEP do endereço.") + private String postalCode; + + @NotBlank(message = "Bairro inválido! Por favor, insira o bairro do endereço.") + private String neighborhood; + + @NotNull(message = "Cidade Inválida! Por favor, insira a cidade do endereço.") + private Long city; + + @NotNull(message = "Estado inválido! Por favor, insira o estado do endereço.") + private Long state; + + +} diff --git a/src/main/java/br/edu/utfpr/servicebook/model/dto/StateMinDTO.java b/src/main/java/br/edu/utfpr/servicebook/model/dto/StateMinDTO.java index c64a889a..27eeab2c 100644 --- a/src/main/java/br/edu/utfpr/servicebook/model/dto/StateMinDTO.java +++ b/src/main/java/br/edu/utfpr/servicebook/model/dto/StateMinDTO.java @@ -11,6 +11,7 @@ @AllArgsConstructor public class StateMinDTO implements Serializable { + private Long id; private String uf; } diff --git a/src/main/java/br/edu/utfpr/servicebook/model/repository/CityRepository.java b/src/main/java/br/edu/utfpr/servicebook/model/repository/CityRepository.java index 937bbfa2..c9ebab9c 100644 --- a/src/main/java/br/edu/utfpr/servicebook/model/repository/CityRepository.java +++ b/src/main/java/br/edu/utfpr/servicebook/model/repository/CityRepository.java @@ -14,4 +14,7 @@ public interface CityRepository extends JpaRepository { Optional findByName(String name); + Optional findByIdAndState(Long id, State state); + Optional findByIdAndState_Id(Long cityId, Long stateId); + } diff --git a/src/main/java/br/edu/utfpr/servicebook/service/CityService.java b/src/main/java/br/edu/utfpr/servicebook/service/CityService.java index 4a7103fc..6d6485fc 100644 --- a/src/main/java/br/edu/utfpr/servicebook/service/CityService.java +++ b/src/main/java/br/edu/utfpr/servicebook/service/CityService.java @@ -40,6 +40,14 @@ public Optional findByNameAndState(String name, State state){ return this.cityRepository.findByNameAndState(name, state); } + public Optional findByIdAndState(Long id, State state){ + return this.cityRepository.findByIdAndState(id, state); + } + + public Optional findByIdAndState_Id(Long cityId, Long stateId){ + return this.cityRepository.findByIdAndState_Id(cityId, stateId); + } + public Optional findByName(String name){ return this.cityRepository.findByName(name); } diff --git a/src/main/webapp/WEB-INF/view/professional/account/my-address.jsp b/src/main/webapp/WEB-INF/view/professional/account/my-address.jsp index 830d86b3..f527ec69 100644 --- a/src/main/webapp/WEB-INF/view/professional/account/my-address.jsp +++ b/src/main/webapp/WEB-INF/view/professional/account/my-address.jsp @@ -34,18 +34,14 @@

Qual o seu endereço?

-
+
Será útil para filtrar serviços por região e de acordo com a distância para o local de realização do serviço.
-
+ +
-
- -
+
+
+ +
+
+
- + - + + + + + + + @@ -89,28 +98,26 @@
- + - + + + + + + + - +
-
- -
-
-
- - -
+
+ +
@@ -129,11 +136,11 @@ $('#postal-code').mask('00000-000'); $('#edit-button').click(function () { $('#addres-form input').prop('disabled', false); - // deixei comentado pois não esta funcionando no select - // $('#addres-form select').prop('disabled', false); - console.log($('select')) + $('#addres-form select').prop('disabled', false); + $('#addres-form .btn-flat').prop('disabled', false); $(this).hide(); $('#save-button').show(); + $('select').formSelect(); }) }) \ No newline at end of file diff --git a/src/main/webapp/assets/resources/scripts/cep-user-registration.js b/src/main/webapp/assets/resources/scripts/cep-user-registration.js index 266cf770..d56c9af6 100644 --- a/src/main/webapp/assets/resources/scripts/cep-user-registration.js +++ b/src/main/webapp/assets/resources/scripts/cep-user-registration.js @@ -1,8 +1,8 @@ $(document).ready(function () { - $('#postalCode').focus(); + $('#postal-code').focus(); function clearFormAddress() { - $('#postalCode').val(''); + $('#postal-code').val(''); $('#neighborhood').val(''); $('#street').val(''); $('#number').val(''); @@ -11,7 +11,7 @@ $(document).ready(function () { } $('#btn-search-cep').click(function () { - let cep = $('#postalCode').val().replace(/\D/g, ''); + let cep = $('#postal-code').val().replace(/\D/g, ''); if (cep != '') { let cepRegex = /^[0-9]{8}$/; @@ -19,7 +19,7 @@ $(document).ready(function () { if (cepRegex.test(cep)) { $.getJSON('https://viacep.com.br/ws/' + cep + '/json/?callback=?', function (data) { if (!('erro' in data)) { - $('#postalCode').removeClass('invalid'); + $('#postal-code').removeClass('invalid'); $('#error-cep').html(''); $('#neighborhood').val(data.bairro).focus(); @@ -28,20 +28,21 @@ $(document).ready(function () { $('#state').val(data.uf).focus(); $('#number').focus(); } else { - $('#postalCode').addClass('invalid'); + $('#postal-code').addClass('invalid'); $('#errorPostalCode').removeClass('hide'); $('#errorPostalCode').html('CEP não encontrado!'); clearFormAddress(); } + $('select').formSelect(); }); } else { - $('#postalCode').addClass('invalid'); + $('#postal-code').addClass('invalid'); $('#errorPostalCode').removeClass('hide'); $('#errorPostalCode').html('CEP inválido!'); clearFormAddress(); } } else { - $('#postalCode').addClass('invalid'); + $('#postal-code').addClass('invalid'); $('#errorPostalCode').removeClass('hide'); $('#errorPostalCode').html('CEP inválido!'); clearFormAddress(); From 92cdbb101521af5fbc5ebb062e905600bff53fda Mon Sep 17 00:00:00 2001 From: pablo correia Date: Wed, 5 Jul 2023 23:24:19 -0300 Subject: [PATCH 11/11] =?UTF-8?q?refactor:=20implementei=20os=20ajustes=20?= =?UTF-8?q?que=20foram=20pedidos,=20a=20valida=C3=A7=C3=A3o=20do=20js,=20c?= =?UTF-8?q?riei=20uma=20nova=20rotapost=20=20que=20retorna=20ResponseEntit?= =?UTF-8?q?y?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/MyAccountController.java | 19 ++++++++++++ .../view/professional/account/my-address.jsp | 16 ++++++++++ .../scripts/cep-user-registration.js | 29 +++++++++++++++++++ 3 files changed, 64 insertions(+) diff --git a/src/main/java/br/edu/utfpr/servicebook/controller/MyAccountController.java b/src/main/java/br/edu/utfpr/servicebook/controller/MyAccountController.java index 8fd405c9..3fdeb3c2 100644 --- a/src/main/java/br/edu/utfpr/servicebook/controller/MyAccountController.java +++ b/src/main/java/br/edu/utfpr/servicebook/controller/MyAccountController.java @@ -9,9 +9,12 @@ import br.edu.utfpr.servicebook.util.UserTemplateInfo; import br.edu.utfpr.servicebook.util.TemplateUtil; import br.edu.utfpr.servicebook.util.UserWizardUtil; +import org.apache.coyote.Response; +import org.cloudinary.json.JSONObject; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.ResponseEntity; import org.springframework.security.authentication.AuthenticationCredentialsNotFoundException; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; @@ -314,6 +317,22 @@ public String saveAddress( return "redirect:/minha-conta/meu-endereco/{id}"; } + @PostMapping("/meu-endereco/{id}") + @RolesAllowed({RoleType.USER, RoleType.ADMIN}) + @ResponseBody + public ResponseEntity getExpertiseData(@PathVariable("id") Long userId, @RequestBody String data,BindingResult errors, + RedirectAttributes redirectAttributes) { + Response response = new Response(); + Optional oUser = this.userService.findById(userId); + JSONObject jsonObject = new JSONObject(data); + if(!cityService.findByName(jsonObject.getString("localidade")).isPresent()){ + response.setMessage("Cidade não cadastrada! Por favor, insira uma cidade cadastrada."); + return ResponseEntity.status(401).body(response.getMessage()); + } + response.setMessage("Cidade cadastrada no sistema!!"); + return ResponseEntity.status(200).body(response.getMessage()); + } + /** * @param id * @param request diff --git a/src/main/webapp/WEB-INF/view/professional/account/my-address.jsp b/src/main/webapp/WEB-INF/view/professional/account/my-address.jsp index f527ec69..083b4ca0 100644 --- a/src/main/webapp/WEB-INF/view/professional/account/my-address.jsp +++ b/src/main/webapp/WEB-INF/view/professional/account/my-address.jsp @@ -29,6 +29,22 @@
+ + + +

diff --git a/src/main/webapp/assets/resources/scripts/cep-user-registration.js b/src/main/webapp/assets/resources/scripts/cep-user-registration.js index d56c9af6..e210a830 100644 --- a/src/main/webapp/assets/resources/scripts/cep-user-registration.js +++ b/src/main/webapp/assets/resources/scripts/cep-user-registration.js @@ -11,6 +11,7 @@ $(document).ready(function () { } $('#btn-search-cep').click(function () { + debugger let cep = $('#postal-code').val().replace(/\D/g, ''); if (cep != '') { @@ -27,6 +28,7 @@ $(document).ready(function () { $('#city').val(data.localidade).focus(); $('#state').val(data.uf).focus(); $('#number').focus(); + validaCity(data); } else { $('#postal-code').addClass('invalid'); $('#errorPostalCode').removeClass('hide'); @@ -48,4 +50,31 @@ $(document).ready(function () { clearFormAddress(); } }); + + function validaCity(data) { + var inputElement = document.querySelector('input[name="id"]'); + var professionalId = inputElement.value; + const apiUrl = `minha-conta/meu-endereco/${professionalId}` + $.ajax({ + url: apiUrl, + type: 'POST', + dataType: 'json', + contentType: 'application/json', + data: JSON.stringify(data), + success: function(response) { + console.log(response); + }, + error: function(error) { + console.error('Ocorreu um erro:', error); + if (error.status != 200) { + $("#errorCity").text(error.responseText) + $("#containerError").css("display", "block"); + } else { + $("#sucessCity").text(error.responseText) + $("#containerSucess").css("display", "block"); + } + } + }); + + } });