From f654cb3d132fa0b82e379767fe5a9204536553ab Mon Sep 17 00:00:00 2001 From: Abraham Date: Sun, 11 Apr 2021 14:19:45 +0200 Subject: [PATCH] Registro de cliente completo y funcional --- .../springframework/cheapy/model/Client.java | 29 +- .../springframework/cheapy/model/Code.java | 39 +++ .../cheapy/repository/ClientRepository.java | 7 +- .../cheapy/repository/CodeRepository.java | 19 ++ .../cheapy/service/ClientService.java | 22 +- .../cheapy/system/SingUpController.java | 48 ++- src/main/resources/db/mysql/data.sql | 9 +- .../WEB-INF/jsp/singup/singUpClient.jsp | 317 ++++++++++++++++++ src/main/webapp/WEB-INF/tags/menu.tag | 6 +- 9 files changed, 483 insertions(+), 13 deletions(-) create mode 100644 src/main/java/org/springframework/cheapy/model/Code.java create mode 100644 src/main/java/org/springframework/cheapy/repository/CodeRepository.java create mode 100644 src/main/webapp/WEB-INF/jsp/singup/singUpClient.jsp diff --git a/src/main/java/org/springframework/cheapy/model/Client.java b/src/main/java/org/springframework/cheapy/model/Client.java index e3f939728..bbabee95c 100644 --- a/src/main/java/org/springframework/cheapy/model/Client.java +++ b/src/main/java/org/springframework/cheapy/model/Client.java @@ -5,6 +5,8 @@ import java.util.Set; import javax.persistence.CascadeType; import javax.persistence.Entity; +import javax.persistence.EnumType; +import javax.persistence.Enumerated; import javax.persistence.JoinColumn; import javax.persistence.OneToMany; import javax.persistence.OneToOne; @@ -30,6 +32,9 @@ public class Client extends BaseEntity { @NotEmpty private String address; + + @Enumerated(value = EnumType.STRING) + private Municipio municipio; // Hora de apertura del local @NotBlank @@ -47,8 +52,8 @@ public class Client extends BaseEntity { private String description; // Codigo de activacion de cuenta - @NotEmpty - private String code; +// @NotEmpty +// private String code; @NotEmpty private String food; @@ -56,6 +61,10 @@ public class Client extends BaseEntity { @OneToOne(cascade = CascadeType.ALL) @JoinColumn(name = "username", referencedColumnName = "username") private User usuar; + + @OneToOne(cascade = CascadeType.ALL) + @JoinColumn(name = "code", referencedColumnName = "code") + private Code cod; @OneToMany private List foodOffers; @@ -125,12 +134,20 @@ public class Client extends BaseEntity { this.description = description; } - public String getCode() { - return code; + public Municipio getMunicipio() { + return municipio; } - public void setCode(String code) { - this.code = code; + public void setMunicipio(Municipio municipio) { + this.municipio = municipio; + } + + public Code getCode() { + return cod; + } + + public void setCode(Code code) { + this.cod = code; } public String getFood() { diff --git a/src/main/java/org/springframework/cheapy/model/Code.java b/src/main/java/org/springframework/cheapy/model/Code.java new file mode 100644 index 000000000..a151abf8d --- /dev/null +++ b/src/main/java/org/springframework/cheapy/model/Code.java @@ -0,0 +1,39 @@ +package org.springframework.cheapy.model; + +import javax.persistence.Entity; +import javax.persistence.Id; +import javax.persistence.Table; +import javax.validation.constraints.NotNull; + +@Entity +@Table(name = "codes") +public class Code extends BaseEntity{ + + + /** + * + */ + private static final long serialVersionUID = 1L; + + @NotNull + String code; + + Boolean activo; + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public Boolean getActivo() { + return activo; + } + + public void setActivo(Boolean activo) { + this.activo = activo; + } + +} diff --git a/src/main/java/org/springframework/cheapy/repository/ClientRepository.java b/src/main/java/org/springframework/cheapy/repository/ClientRepository.java index 1e04f6f3a..82947d2c3 100644 --- a/src/main/java/org/springframework/cheapy/repository/ClientRepository.java +++ b/src/main/java/org/springframework/cheapy/repository/ClientRepository.java @@ -1,14 +1,19 @@ package org.springframework.cheapy.repository; import org.springframework.cheapy.model.Client; +import org.springframework.cheapy.model.Code; +import org.springframework.cheapy.model.Usuario; import org.springframework.data.jpa.repository.Query; import org.springframework.data.repository.CrudRepository; +import org.springframework.data.repository.Repository; import org.springframework.transaction.annotation.Transactional; -public interface ClientRepository extends CrudRepository { +public interface ClientRepository extends Repository { @Query("SELECT client FROM Client client WHERE username =:username") @Transactional(readOnly = true) Client findByUsername(String username); + void save(Client client); + } diff --git a/src/main/java/org/springframework/cheapy/repository/CodeRepository.java b/src/main/java/org/springframework/cheapy/repository/CodeRepository.java new file mode 100644 index 000000000..324b9f63a --- /dev/null +++ b/src/main/java/org/springframework/cheapy/repository/CodeRepository.java @@ -0,0 +1,19 @@ +package org.springframework.cheapy.repository; + +import org.springframework.cheapy.model.Client; +import org.springframework.cheapy.model.Code; +import org.springframework.cheapy.model.Usuario; +import org.springframework.data.jpa.repository.Query; +import org.springframework.data.repository.CrudRepository; +import org.springframework.data.repository.Repository; +import org.springframework.transaction.annotation.Transactional; + +public interface CodeRepository extends Repository { + + void save(Code code); + + @Query("SELECT code FROM Code code WHERE code.code =:code") + @Transactional(readOnly = true) + Code findCodeByCode(String code); + +} diff --git a/src/main/java/org/springframework/cheapy/service/ClientService.java b/src/main/java/org/springframework/cheapy/service/ClientService.java index d65649680..d1bf88e94 100644 --- a/src/main/java/org/springframework/cheapy/service/ClientService.java +++ b/src/main/java/org/springframework/cheapy/service/ClientService.java @@ -1,8 +1,13 @@ package org.springframework.cheapy.service; +import javax.validation.Valid; + import org.springframework.beans.factory.annotation.Autowired; import org.springframework.cheapy.model.Client; +import org.springframework.cheapy.model.Code; +import org.springframework.cheapy.model.Usuario; import org.springframework.cheapy.repository.ClientRepository; +import org.springframework.cheapy.repository.CodeRepository; import org.springframework.dao.DataAccessException; import org.springframework.security.core.Authentication; import org.springframework.security.core.context.SecurityContextHolder; @@ -13,10 +18,12 @@ import org.springframework.transaction.annotation.Transactional; public class ClientService { private ClientRepository clientRepository; + private CodeRepository codeRepository; @Autowired - public ClientService(final ClientRepository clientRepository) { + public ClientService(final ClientRepository clientRepository, CodeRepository codeRepository) { this.clientRepository = clientRepository; + this.codeRepository = codeRepository; } @Transactional @@ -25,5 +32,18 @@ public class ClientService { String username = authentication.getName(); return this.clientRepository.findByUsername(username); } + + public void saveClient(final Client client) throws DataAccessException { + this.clientRepository.save(client); + } + + public void saveCode(Code code) throws DataAccessException{ + this.codeRepository.save(code); + + } + + public Code findCodeByCode(String code) { + return this.codeRepository.findCodeByCode(code); + } } diff --git a/src/main/java/org/springframework/cheapy/system/SingUpController.java b/src/main/java/org/springframework/cheapy/system/SingUpController.java index 42e8168ae..6ddc319ca 100644 --- a/src/main/java/org/springframework/cheapy/system/SingUpController.java +++ b/src/main/java/org/springframework/cheapy/system/SingUpController.java @@ -7,6 +7,8 @@ import javax.validation.Valid; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.cheapy.model.Authorities; +import org.springframework.cheapy.model.Client; +import org.springframework.cheapy.model.Code; import org.springframework.cheapy.model.Municipio; import org.springframework.cheapy.model.Owner; import org.springframework.cheapy.model.User; @@ -56,7 +58,7 @@ public class SingUpController { } @GetMapping("/users/new") - public String initCreationForm(Map model) { + public String singUpUserForm(Map model) { Usuario usuario = new Usuario(); User user=new User(); @@ -69,7 +71,7 @@ public class SingUpController { } @PostMapping("/users/new") - public String processCreationForm(/*@Valid User user,*/ @Valid Usuario usuario, BindingResult result) { + public String singUpUserForm(/*@Valid User user,*/ @Valid Usuario usuario, BindingResult result) { Authorities auth=new Authorities(); User user= usuario.getUsuar(); user.setEnabled(true); @@ -90,6 +92,48 @@ public class SingUpController { } } + @GetMapping("/clients/new") + public String singUpClientForm(Map model) { + Client cliente = new Client(); + + User user=new User(); + + cliente.setUsuar(user); + model.put("municipio", Municipio.values()); + model.put("cliente", cliente); + //model.put("user", user); + return "singup/singUpClient"; + } + + @PostMapping("/clients/new") + public String singUpClientForm(/*@Valid User user,*/ @Valid Client cliente, BindingResult result) { + Authorities auth=new Authorities(); + System.out.println(cliente.getCode().getCode()); + String cod=cliente.getCode().getCode(); + Code code=this.clientService.findCodeByCode(cod); + User user= cliente.getUsuar(); + user.setEnabled(true); + cliente.setUsuar(user); + auth.setUsername(user.getUsername()); + auth.setAuthority("client"); + if (result.hasErrors()) { + return "singup/singUpClient"; + }else if(code.getActivo().equals(false)) { + return "error"; + }else { + //auth.setId(1); + //this.authoritiesService.saveAuthorities(auth); + code.setActivo(false); + this.clientService.saveCode(code); + cliente.setCode(code); + this.clientService.saveClient(cliente); + this.userService.saveUser(user); + this.authoritiesService.saveAuthorities(cliente.getUsuar().getUsername(), "client"); + + + return "redirect:/"; + } + } // @GetMapping("/owners/find") // public String initFindForm(Map model) { // model.put("owner", new Owner()); diff --git a/src/main/resources/db/mysql/data.sql b/src/main/resources/db/mysql/data.sql index 4e1c4b24a..8edb0af25 100644 --- a/src/main/resources/db/mysql/data.sql +++ b/src/main/resources/db/mysql/data.sql @@ -45,8 +45,13 @@ INSERT INTO usuarios (id, nombre, apellidos, direccion, municipio, email, userna INSERT INTO usuarios (id, nombre, apellidos, direccion, municipio, email, username) VALUES (3, 'Lolo', 'Lopez', 'C/Macarena', 'dosHermanas', 'Lolo@gmail.com','lolo'); INSERT INTO usuarios (id, nombre, apellidos, direccion, municipio, email, username) VALUES (4, 'Pepe', 'Lopez', 'C/Macarena', 'carmona', 'Pepe@gmail.com','pepe'); -INSERT INTO clients (id, name, email, address, init, finish, telephone, description, code, food, username) VALUES (1,'bar manoli','manoli@gmail.com','C/Betis','10:00','22:00','608726190', 'description 1', 'code1', 'ESPAÑOLA','manoli'); -INSERT INTO clients (id, name, email, address, init, finish, telephone, description, code, food, username) VALUES (2,'bar david','david@gmail.com','C/Sevilla','09:30','22:00','608726190', 'description 2', 'code2', 'americana','david'); +INSERT INTO codes (id,code,activo) VALUES (1,'code1',FALSE); +INSERT INTO codes (id,code,activo) VALUES (2,'code2',FALSE); +INSERT INTO codes (id,code,activo) VALUES (3,'code3',TRUE); +INSERT INTO codes (id,code,activo) VALUES (4,'code4',TRUE); + +INSERT INTO clients (id, name, email, address, municipio, init, finish, telephone, description, food, username, code) VALUES (1,'bar manoli','manoli@gmail.com','C/Betis', 'sevilla','10:00','22:00','608726190', 'description 1', 'ESPAÑOLA','manoli', 'code1'); +INSERT INTO clients (id, name, email, address, init, municipio, finish, telephone, description, food, username, code) VALUES (2,'bar david','david@gmail.com','C/Sevilla', 'dosHermanas','09:30','22:00','608726190', 'description 2', 'americana','david', 'code2'); INSERT INTO food_offers(start, end, code, status, client_id, food, discount) VALUES ('2021-08-14 12:00:00', '2021-08-15 12:00:00', 'FO-1', 'inactive', 1, 'macarrones', 15); INSERT INTO food_offers(start, end, code, status, client_id, food, discount) VALUES ('2021-08-15 12:00:00', '2021-08-16 12:00:00', 'FO-2', 'active', 1, 'macarrones con tomate', 10); diff --git a/src/main/webapp/WEB-INF/jsp/singup/singUpClient.jsp b/src/main/webapp/WEB-INF/jsp/singup/singUpClient.jsp new file mode 100644 index 000000000..2582bf34f --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/singup/singUpClient.jsp @@ -0,0 +1,317 @@ +<%@ page session="false" trimDirectiveWhitespaces="true" %> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %> +<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %> +<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %> +<%@ taglib prefix="cheapy" tagdir="/WEB-INF/tags" %> +<%@ taglib prefix="sec" uri="http://www.springframework.org/security/tags" %> + + + + + + + + +

+ +

+ +
+ + +
+ + +
+ + + + + + + + + + +
+
+ +
+ diff --git a/src/main/webapp/WEB-INF/tags/menu.tag b/src/main/webapp/WEB-INF/tags/menu.tag index 0b9f07cc3..80bb200fd 100644 --- a/src/main/webapp/WEB-INF/tags/menu.tag +++ b/src/main/webapp/WEB-INF/tags/menu.tag @@ -64,7 +64,11 @@ -
  • ">Registrarse
  • +
  • ">Registrarse Usuario
  • + +
    + +
  • ">Registrarse Cliente