From 7bcf28a8f92bca9e6ba72cb8f14daa1ae4564801 Mon Sep 17 00:00:00 2001 From: Gabriel Pereira da Silva Date: Tue, 21 Feb 2023 01:47:42 -0300 Subject: [PATCH 1/8] #1- Criando entidade Usuario, atualizando GenericDAO e criando Classe de criptografia pra senha. --- .../java/com/stefanini/dao/GenericDAO.java | 3 +- .../java/com/stefanini/model/Usuario.java | 178 ++++++++++++++++++ .../resources/HelloWorldResource.java | 16 -- .../java/com/stefanini/util/Base64Util.java | 13 ++ .../util/CheckPasswordValidator.java | 6 + 5 files changed, 199 insertions(+), 17 deletions(-) create mode 100644 src/main/java/com/stefanini/model/Usuario.java delete mode 100644 src/main/java/com/stefanini/resources/HelloWorldResource.java create mode 100644 src/main/java/com/stefanini/util/Base64Util.java create mode 100644 src/main/java/com/stefanini/util/CheckPasswordValidator.java diff --git a/src/main/java/com/stefanini/dao/GenericDAO.java b/src/main/java/com/stefanini/dao/GenericDAO.java index d68fc9a..9c50b27 100644 --- a/src/main/java/com/stefanini/dao/GenericDAO.java +++ b/src/main/java/com/stefanini/dao/GenericDAO.java @@ -22,8 +22,9 @@ public GenericDAO() { } @Transactional - public void save(T t){ + public T save(T t){ em.persist(t); + return t; } public T findById(I id){ diff --git a/src/main/java/com/stefanini/model/Usuario.java b/src/main/java/com/stefanini/model/Usuario.java new file mode 100644 index 0000000..5dc9e3d --- /dev/null +++ b/src/main/java/com/stefanini/model/Usuario.java @@ -0,0 +1,178 @@ +package com.stefanini.model; + +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.util.Objects; + +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.GenerationType; +import javax.persistence.Id; +import javax.persistence.PrePersist; +import javax.persistence.Table; +import javax.validation.constraints.Email; +import javax.validation.constraints.Max; +import javax.validation.constraints.Min; +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; +import javax.validation.constraints.Pattern; +import javax.validation.constraints.Size; + +import com.stefanini.util.CheckPasswordValidator; + + +@Entity +@Table(name = "tb_usuario") +public class Usuario { + + public Usuario(){ + + } + + public Usuario(String nome, String login, String email, String senha, LocalDate dataNascimento) { + this.nome = nome; + this.login = login; + this.email = email; + this.senha = senha; + this.dataNascimento = dataNascimento; + } + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + + @Max(50) + @NotBlank + @Column(nullable = false) + private String nome; + + @Size(min = 5,max = 20) + @NotBlank + @Column(nullable = false,unique = true) + private String login; + + @Min(10) + @NotBlank + @Email + @Column(nullable = false) + private String email; + + @Size(min = 4,max = 10) + @NotBlank + @Pattern(regexp = CheckPasswordValidator.PASSWORD_VALIDATOR) + @Column(nullable = false) + private String senha; + + @Column + private LocalDate dataNascimento; + + @NotNull + @Column + private LocalDateTime dataCriacao; + + @Column + private LocalDateTime dataAtualizacao; + + @PrePersist + public void prePersist() { + if(!Objects.nonNull(dataCriacao)){ + dataCriacao = LocalDateTime.now(); + } + dataAtualizacao = LocalDateTime.now(); + } + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getNome() { + return nome; + } + + public void setNome(String nome) { + this.nome = nome; + } + + public String getLogin() { + return login; + } + + public void setLogin(String login) { + this.login = login; + } + + public String getEmail() { + return email; + } + + public void setEmail(String email) { + this.email = email; + } + + public String getSenha() { + return senha; + } + + public void setSenha(String senha) { + this.senha = senha; + } + + public LocalDate getDataNascimento() { + return dataNascimento; + } + + public void setDataNascimento(LocalDate dataNascimento) { + this.dataNascimento = dataNascimento; + } + + public LocalDateTime getDataCriacao() { + return dataCriacao; + } + + public void setDataCriacao(LocalDateTime dataCriacao) { + this.dataCriacao = dataCriacao; + } + + public LocalDateTime getDataAtualizacao() { + return dataAtualizacao; + } + + public void setDataAtualizacao(LocalDateTime dataAtualizacao) { + this.dataAtualizacao = dataAtualizacao; + } + + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + ((id == null) ? 0 : id.hashCode()); + return result; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (getClass() != obj.getClass()) + return false; + Usuario other = (Usuario) obj; + if (id == null) { + if (other.id != null) + return false; + } else if (!id.equals(other.id)) + return false; + return true; + } + + + + + +} diff --git a/src/main/java/com/stefanini/resources/HelloWorldResource.java b/src/main/java/com/stefanini/resources/HelloWorldResource.java deleted file mode 100644 index 8eda644..0000000 --- a/src/main/java/com/stefanini/resources/HelloWorldResource.java +++ /dev/null @@ -1,16 +0,0 @@ -package com.stefanini.resources; - -import javax.ws.rs.GET; -import javax.ws.rs.Path; -import javax.ws.rs.Produces; - -@Path("/hello-world") -public class HelloWorldResource { - - @GET - @Produces("text/plain") - public String hello() { - return "Hello, World!"; - } - -} diff --git a/src/main/java/com/stefanini/util/Base64Util.java b/src/main/java/com/stefanini/util/Base64Util.java new file mode 100644 index 0000000..b76352e --- /dev/null +++ b/src/main/java/com/stefanini/util/Base64Util.java @@ -0,0 +1,13 @@ +package com.stefanini.util; + +import java.util.Base64; + +public class Base64Util { + public static String encode(byte[] bytes){ + return Base64.getEncoder().encodeToString(bytes); + } + + public static String decode(String string){ + return new String(Base64.getDecoder().decode(string)); + } +} diff --git a/src/main/java/com/stefanini/util/CheckPasswordValidator.java b/src/main/java/com/stefanini/util/CheckPasswordValidator.java new file mode 100644 index 0000000..62d345e --- /dev/null +++ b/src/main/java/com/stefanini/util/CheckPasswordValidator.java @@ -0,0 +1,6 @@ +package com.stefanini.util; + +public class CheckPasswordValidator{ + public static final String PASSWORD_VALIDATOR = "^(?=.*[a-z])(?=.*[A-Z])(?=.*\\d)” + “(?=.*[-+_!@#$%^&*., ?]).+$"; + +} \ No newline at end of file From 87ffd50e63d412202d194586f3c495f1a1445707 Mon Sep 17 00:00:00 2001 From: Gabriel Pereira da Silva Date: Tue, 21 Feb 2023 18:39:49 -0300 Subject: [PATCH 2/8] =?UTF-8?q?#1-=20Corrigindo=20model=20do=20Usuario,=20?= =?UTF-8?q?criando=20Repository,=20Service,=20Resource,=20mapeando=20Exce?= =?UTF-8?q?=C3=A7=C3=B5es=20do=20UsuarioResource,=20corrigindo=20regex=20d?= =?UTF-8?q?o=20Base64Util=20e=20finalizando=20CRUD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/stefanini/dto/UsuarioCompletoDto.java | 102 ++++++++++++++++++ .../java/com/stefanini/dto/UsuarioDto.java | 87 +++++++++++++++ .../UsuarioIdNaoExisteException.java | 15 +++ .../exception/UsuarioIdNaoExisteMapper.java | 16 +++ .../UsuarioLoginJaExisteException.java | 15 +++ .../exception/UsuarioLoginJaExisteMapper.java | 16 +++ .../java/com/stefanini/model/Usuario.java | 44 +++++--- .../repository/UsuarioRepository.java | 22 ++++ .../stefanini/resources/UsuarioResource.java | 57 ++++++++++ .../com/stefanini/service/UsuarioService.java | 72 +++++++++++++ .../java/com/stefanini/util/Base64Util.java | 4 +- .../util/CheckPasswordValidator.java | 2 +- 12 files changed, 434 insertions(+), 18 deletions(-) create mode 100644 src/main/java/com/stefanini/dto/UsuarioCompletoDto.java create mode 100644 src/main/java/com/stefanini/dto/UsuarioDto.java create mode 100644 src/main/java/com/stefanini/exception/UsuarioIdNaoExisteException.java create mode 100644 src/main/java/com/stefanini/exception/UsuarioIdNaoExisteMapper.java create mode 100644 src/main/java/com/stefanini/exception/UsuarioLoginJaExisteException.java create mode 100644 src/main/java/com/stefanini/exception/UsuarioLoginJaExisteMapper.java create mode 100644 src/main/java/com/stefanini/repository/UsuarioRepository.java create mode 100644 src/main/java/com/stefanini/resources/UsuarioResource.java create mode 100644 src/main/java/com/stefanini/service/UsuarioService.java diff --git a/src/main/java/com/stefanini/dto/UsuarioCompletoDto.java b/src/main/java/com/stefanini/dto/UsuarioCompletoDto.java new file mode 100644 index 0000000..58aa5e3 --- /dev/null +++ b/src/main/java/com/stefanini/dto/UsuarioCompletoDto.java @@ -0,0 +1,102 @@ +package com.stefanini.dto; + +import java.time.LocalDate; + +import javax.validation.constraints.Email; +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.Pattern; +import javax.validation.constraints.Size; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.stefanini.model.Usuario; +import com.stefanini.util.CheckPasswordValidator; + +public class UsuarioCompletoDto { + + public UsuarioCompletoDto(){ + + } + + public UsuarioCompletoDto(Usuario usuario){ + this.id = usuario.getId(); + this.nome = usuario.getNome(); + this.login = usuario.getLogin(); + this.senha = usuario.getSenha(); + this.email = usuario.getEmail(); + this.dataNascimento = usuario.getDataNascimento(); + } + + private Long id; + + @Size(max = 50) + @NotBlank + private String nome; + + @Size(min = 5,max = 20) + @NotBlank + private String login; + + @Size(min = 4,max = 10) + @NotBlank + @Pattern(regexp = CheckPasswordValidator.PASSWORD_VALIDATOR) + private String senha; + + @Size(min = 10) + @NotBlank + @Email + private String email; + + @JsonFormat(pattern = "dd/MM/yyyy") + private LocalDate dataNascimento; + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getNome() { + return nome; + } + + public void setNome(String nome) { + this.nome = nome; + } + + public String getLogin() { + return login; + } + + public void setLogin(String login) { + this.login = login; + } + + public String getEmail() { + return email; + } + + public void setEmail(String email) { + this.email = email; + } + + public String getSenha() { + return senha; + } + + public void setSenha(String senha) { + this.senha = senha; + } + + public LocalDate getDataNascimento() { + return dataNascimento; + } + + public void setDataNascimento(LocalDate dataNascimento) { + this.dataNascimento = dataNascimento; + } + + + +} diff --git a/src/main/java/com/stefanini/dto/UsuarioDto.java b/src/main/java/com/stefanini/dto/UsuarioDto.java new file mode 100644 index 0000000..8b0971d --- /dev/null +++ b/src/main/java/com/stefanini/dto/UsuarioDto.java @@ -0,0 +1,87 @@ +package com.stefanini.dto; + +import java.time.LocalDate; + +import javax.validation.constraints.Email; +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.Size; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.stefanini.model.Usuario; + +public class UsuarioDto { + + public UsuarioDto(){ + + } + + public UsuarioDto(Usuario usuario){ + this.id = usuario.getId(); + this.nome = usuario.getNome(); + this.login = usuario.getLogin(); + this.email = usuario.getEmail(); + this.dataNascimento = usuario.getDataNascimento(); + } + + private Long id; + + @Size(max = 50) + @NotBlank + private String nome; + + @Size(min = 5,max = 20) + @NotBlank + private String login; + + + @Size(min = 10) + @NotBlank + @Email + private String email; + + @JsonFormat(pattern = "dd/MM/yyyy") + private LocalDate dataNascimento; + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getNome() { + return nome; + } + + public void setNome(String nome) { + this.nome = nome; + } + + public String getLogin() { + return login; + } + + public void setLogin(String login) { + this.login = login; + } + + public String getEmail() { + return email; + } + + public void setEmail(String email) { + this.email = email; + } + + public LocalDate getDataNascimento() { + return dataNascimento; + } + + public void setDataNascimento(LocalDate dataNascimento) { + this.dataNascimento = dataNascimento; + } + + + +} diff --git a/src/main/java/com/stefanini/exception/UsuarioIdNaoExisteException.java b/src/main/java/com/stefanini/exception/UsuarioIdNaoExisteException.java new file mode 100644 index 0000000..ee8335f --- /dev/null +++ b/src/main/java/com/stefanini/exception/UsuarioIdNaoExisteException.java @@ -0,0 +1,15 @@ +package com.stefanini.exception; + +import javax.ws.rs.WebApplicationException; + +public class UsuarioIdNaoExisteException extends WebApplicationException { + public UsuarioIdNaoExisteException() { + super(); + } + public UsuarioIdNaoExisteException(String msg) { + super(msg); + } + public UsuarioIdNaoExisteException(String msg, WebApplicationException e) { + super(msg, e); + } +} diff --git a/src/main/java/com/stefanini/exception/UsuarioIdNaoExisteMapper.java b/src/main/java/com/stefanini/exception/UsuarioIdNaoExisteMapper.java new file mode 100644 index 0000000..73b3762 --- /dev/null +++ b/src/main/java/com/stefanini/exception/UsuarioIdNaoExisteMapper.java @@ -0,0 +1,16 @@ +package com.stefanini.exception; + +import javax.ws.rs.core.Response; +import javax.ws.rs.core.Response.Status; +import javax.ws.rs.ext.ExceptionMapper; +import javax.ws.rs.ext.Provider; + +@Provider +public class UsuarioIdNaoExisteMapper implements ExceptionMapper { + + @Override + public Response toResponse(UsuarioIdNaoExisteException exception) { + return Response.status(Status.BAD_REQUEST).entity(exception.getMessage()).build(); + } + +} diff --git a/src/main/java/com/stefanini/exception/UsuarioLoginJaExisteException.java b/src/main/java/com/stefanini/exception/UsuarioLoginJaExisteException.java new file mode 100644 index 0000000..71f8d70 --- /dev/null +++ b/src/main/java/com/stefanini/exception/UsuarioLoginJaExisteException.java @@ -0,0 +1,15 @@ +package com.stefanini.exception; + +import javax.ws.rs.WebApplicationException; + +public class UsuarioLoginJaExisteException extends WebApplicationException { + public UsuarioLoginJaExisteException() { + super(); + } + public UsuarioLoginJaExisteException(String msg) { + super(msg); + } + public UsuarioLoginJaExisteException(String msg, WebApplicationException e) { + super(msg, e); + } +} diff --git a/src/main/java/com/stefanini/exception/UsuarioLoginJaExisteMapper.java b/src/main/java/com/stefanini/exception/UsuarioLoginJaExisteMapper.java new file mode 100644 index 0000000..6bb771e --- /dev/null +++ b/src/main/java/com/stefanini/exception/UsuarioLoginJaExisteMapper.java @@ -0,0 +1,16 @@ +package com.stefanini.exception; + +import javax.ws.rs.core.Response; +import javax.ws.rs.core.Response.Status; +import javax.ws.rs.ext.ExceptionMapper; +import javax.ws.rs.ext.Provider; + +@Provider +public class UsuarioLoginJaExisteMapper implements ExceptionMapper { + + @Override + public Response toResponse(UsuarioLoginJaExisteException exception) { + return Response.status(Status.BAD_REQUEST).entity(exception.getMessage()).build(); + } + +} diff --git a/src/main/java/com/stefanini/model/Usuario.java b/src/main/java/com/stefanini/model/Usuario.java index 5dc9e3d..bbad9bf 100644 --- a/src/main/java/com/stefanini/model/Usuario.java +++ b/src/main/java/com/stefanini/model/Usuario.java @@ -10,16 +10,15 @@ import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.PrePersist; +import javax.persistence.PreUpdate; import javax.persistence.Table; import javax.validation.constraints.Email; -import javax.validation.constraints.Max; -import javax.validation.constraints.Min; import javax.validation.constraints.NotBlank; import javax.validation.constraints.NotNull; -import javax.validation.constraints.Pattern; import javax.validation.constraints.Size; -import com.stefanini.util.CheckPasswordValidator; +import com.stefanini.dto.UsuarioCompletoDto; +import com.stefanini.dto.UsuarioDto; @Entity @@ -38,11 +37,29 @@ public Usuario(String nome, String login, String email, String senha, LocalDate this.dataNascimento = dataNascimento; } + public Usuario(UsuarioCompletoDto usuarioCompletoDto){ + this.id = usuarioCompletoDto.getId(); + this.nome = usuarioCompletoDto.getNome(); + this.login = usuarioCompletoDto.getLogin(); + this.email = usuarioCompletoDto.getEmail(); + this.senha = usuarioCompletoDto.getSenha(); + this.dataNascimento = usuarioCompletoDto.getDataNascimento(); + } + + + public Usuario(UsuarioDto usuarioDto){ + this.id = usuarioDto.getId(); + this.nome = usuarioDto.getNome(); + this.login = usuarioDto.getLogin(); + this.email = usuarioDto.getEmail(); + this.dataNascimento = usuarioDto.getDataNascimento(); + } + @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; - @Max(50) + @Size(max = 50) @NotBlank @Column(nullable = false) private String nome; @@ -52,15 +69,13 @@ public Usuario(String nome, String login, String email, String senha, LocalDate @Column(nullable = false,unique = true) private String login; - @Min(10) + @Size(min = 10) @NotBlank @Email @Column(nullable = false) private String email; - @Size(min = 4,max = 10) @NotBlank - @Pattern(regexp = CheckPasswordValidator.PASSWORD_VALIDATOR) @Column(nullable = false) private String senha; @@ -76,9 +91,12 @@ public Usuario(String nome, String login, String email, String senha, LocalDate @PrePersist public void prePersist() { - if(!Objects.nonNull(dataCriacao)){ - dataCriacao = LocalDateTime.now(); - } + dataCriacao = LocalDateTime.now(); + dataAtualizacao = LocalDateTime.now(); + } + + @PreUpdate + public void preUpdate() { dataAtualizacao = LocalDateTime.now(); } @@ -171,8 +189,4 @@ public boolean equals(Object obj) { return true; } - - - - } diff --git a/src/main/java/com/stefanini/repository/UsuarioRepository.java b/src/main/java/com/stefanini/repository/UsuarioRepository.java new file mode 100644 index 0000000..2496cf7 --- /dev/null +++ b/src/main/java/com/stefanini/repository/UsuarioRepository.java @@ -0,0 +1,22 @@ +package com.stefanini.repository; + +import javax.enterprise.context.ApplicationScoped; +import javax.persistence.NoResultException; + +import com.stefanini.dao.GenericDAO; +import com.stefanini.model.Usuario; + +@ApplicationScoped +public class UsuarioRepository extends GenericDAO { + + public Usuario findByLogin(String login) { + try{ + return this.createQuery("SELECT u from Usuario u where u.login = :login") + .setParameter("login", login) + .getSingleResult(); + } catch(NoResultException e){ + return null; + } + + } +} diff --git a/src/main/java/com/stefanini/resources/UsuarioResource.java b/src/main/java/com/stefanini/resources/UsuarioResource.java new file mode 100644 index 0000000..e658a60 --- /dev/null +++ b/src/main/java/com/stefanini/resources/UsuarioResource.java @@ -0,0 +1,57 @@ +package com.stefanini.resources; + +import javax.inject.Inject; +import javax.validation.Valid; +import javax.ws.rs.Consumes; +import javax.ws.rs.POST; +import javax.ws.rs.PUT; +import javax.ws.rs.GET; +import javax.ws.rs.DELETE; +import javax.ws.rs.Produces; +import javax.ws.rs.Path; +import javax.ws.rs.PathParam; +import javax.ws.rs.core.MediaType; +import javax.ws.rs.core.Response; +import javax.ws.rs.core.Response.Status; + +import com.stefanini.dto.UsuarioCompletoDto; +import com.stefanini.exception.UsuarioIdNaoExisteException; +import com.stefanini.exception.UsuarioLoginJaExisteException; +import com.stefanini.service.UsuarioService; +@Produces(MediaType.APPLICATION_JSON) +@Consumes(MediaType.APPLICATION_JSON) +@Path("usuario") +public class UsuarioResource { + + @Inject + private UsuarioService usuarioService; + + @POST + public Response save(@Valid UsuarioCompletoDto usuario) throws UsuarioLoginJaExisteException{ + return Response.status(Status.CREATED).entity(usuarioService.save(usuario)).build(); + } + + @PUT + public Response update(@Valid UsuarioCompletoDto usuario) throws UsuarioLoginJaExisteException,UsuarioIdNaoExisteException{ + return Response.status(Status.CREATED).entity(usuarioService.update(usuario)).build(); + } + + @GET + public Response listAll(){ + return Response.status(Status.OK).entity(usuarioService.listAll()).build(); + } + + @GET + @Path("/{id}") + public Response findById(@PathParam(value = "id") Long id){ + return Response.status(Status.OK).entity(usuarioService.findById(id)).build(); + } + + @DELETE + @Path("/{id}") + public Response delete(@PathParam(value = "id") Long id){ + usuarioService.delete(id); + return Response.ok().build(); + } + +} diff --git a/src/main/java/com/stefanini/service/UsuarioService.java b/src/main/java/com/stefanini/service/UsuarioService.java new file mode 100644 index 0000000..e781c06 --- /dev/null +++ b/src/main/java/com/stefanini/service/UsuarioService.java @@ -0,0 +1,72 @@ +package com.stefanini.service; + +import java.util.List; +import java.util.Objects; +import java.util.stream.Collectors; + +import javax.enterprise.context.ApplicationScoped; +import javax.inject.Inject; + +import com.stefanini.dto.UsuarioCompletoDto; +import com.stefanini.dto.UsuarioDto; +import com.stefanini.exception.UsuarioIdNaoExisteException; +import com.stefanini.exception.UsuarioLoginJaExisteException; +import com.stefanini.model.Usuario; +import com.stefanini.repository.UsuarioRepository; +import com.stefanini.util.Base64Util; + +@ApplicationScoped +public class UsuarioService { + + @Inject + private UsuarioRepository usuarioRepository; + + public List listAll() { + return usuarioRepository.listAll().stream().map(u -> new UsuarioDto(u)).collect(Collectors.toList()); + } + + public UsuarioDto findById(Long id) { + Usuario usuario = usuarioRepository.findById(id); + if(!Objects.nonNull(usuario)){ + throw new UsuarioIdNaoExisteException("O id informado não existe!"); + } + return new UsuarioDto(usuario); + } + + public UsuarioDto save(UsuarioCompletoDto usuarioCompletoDto) throws UsuarioLoginJaExisteException{ + if(temLoginUsuario(usuarioCompletoDto.getLogin())){ + throw new UsuarioLoginJaExisteException("O login informado ja existe!"); + } + + Usuario novoUsuario = new Usuario(usuarioCompletoDto); + novoUsuario.setSenha(Base64Util.encode(novoUsuario.getSenha())); + return new UsuarioDto(usuarioRepository.save(novoUsuario)); + } + + public void delete(Long id) { + usuarioRepository.delete(id); + } + + public UsuarioDto update(UsuarioCompletoDto usuarioCompletoDto) throws UsuarioLoginJaExisteException,UsuarioIdNaoExisteException { + if(temLoginUsuario(usuarioCompletoDto.getLogin())){ + throw new UsuarioLoginJaExisteException("O login informado ja existe!"); + } + Usuario usuarioPreUpdate = usuarioRepository.findById(usuarioCompletoDto.getId()); + if(!Objects.nonNull(usuarioPreUpdate)){ + throw new UsuarioIdNaoExisteException("O id informado não existe!"); + } + + Usuario editaUsuario = new Usuario(usuarioCompletoDto); + editaUsuario.setSenha(Base64Util.encode(editaUsuario.getSenha())); + editaUsuario.setDataCriacao(usuarioPreUpdate.getDataCriacao()); + return new UsuarioDto(usuarioRepository.update(editaUsuario)); + } + + private boolean temLoginUsuario(String login){ + return Objects.nonNull(usuarioRepository.findByLogin(login)); + } + + private boolean temIdUsuario(Long id){ + return Objects.nonNull(usuarioRepository.findById(id)); + } +} diff --git a/src/main/java/com/stefanini/util/Base64Util.java b/src/main/java/com/stefanini/util/Base64Util.java index b76352e..3b6de98 100644 --- a/src/main/java/com/stefanini/util/Base64Util.java +++ b/src/main/java/com/stefanini/util/Base64Util.java @@ -3,8 +3,8 @@ import java.util.Base64; public class Base64Util { - public static String encode(byte[] bytes){ - return Base64.getEncoder().encodeToString(bytes); + public static String encode(String string){ + return Base64.getEncoder().encodeToString(string.getBytes()); } public static String decode(String string){ diff --git a/src/main/java/com/stefanini/util/CheckPasswordValidator.java b/src/main/java/com/stefanini/util/CheckPasswordValidator.java index 62d345e..11511ea 100644 --- a/src/main/java/com/stefanini/util/CheckPasswordValidator.java +++ b/src/main/java/com/stefanini/util/CheckPasswordValidator.java @@ -1,6 +1,6 @@ package com.stefanini.util; public class CheckPasswordValidator{ - public static final String PASSWORD_VALIDATOR = "^(?=.*[a-z])(?=.*[A-Z])(?=.*\\d)” + “(?=.*[-+_!@#$%^&*., ?]).+$"; + public static final String PASSWORD_VALIDATOR = "^(?=.*[a-z])(?=.*[A-Z])(?=.*\\d)" + "(?=.*[-+_!@#$%^&*., ?]).+$"; } \ No newline at end of file From 0b4b91f106b6f399a70df45cc716c99dd4f963d9 Mon Sep 17 00:00:00 2001 From: Gabriel Pereira da Silva Date: Tue, 21 Feb 2023 20:53:14 -0300 Subject: [PATCH 3/8] #2- Criando Endpoint pra pegar usuarios aniversariantes do mes,corrigindo delete e populando carga inicial --- .../exception/MesNaoExisteException.java | 15 +++++++++++++++ .../exception/MesNaoExisteMapper.java | 16 ++++++++++++++++ src/main/java/com/stefanini/model/Usuario.java | 2 -- .../repository/UsuarioRepository.java | 8 ++++++++ .../stefanini/resources/UsuarioResource.java | 14 ++++++++++---- .../com/stefanini/service/UsuarioService.java | 18 +++++++++++++++++- src/main/resources/db/carga-inicial.sql | 8 ++++++++ 7 files changed, 74 insertions(+), 7 deletions(-) create mode 100644 src/main/java/com/stefanini/exception/MesNaoExisteException.java create mode 100644 src/main/java/com/stefanini/exception/MesNaoExisteMapper.java diff --git a/src/main/java/com/stefanini/exception/MesNaoExisteException.java b/src/main/java/com/stefanini/exception/MesNaoExisteException.java new file mode 100644 index 0000000..4a0ff78 --- /dev/null +++ b/src/main/java/com/stefanini/exception/MesNaoExisteException.java @@ -0,0 +1,15 @@ +package com.stefanini.exception; + +import javax.ws.rs.WebApplicationException; + +public class MesNaoExisteException extends WebApplicationException { + public MesNaoExisteException() { + super(); + } + public MesNaoExisteException(String msg) { + super(msg); + } + public MesNaoExisteException(String msg, WebApplicationException e) { + super(msg, e); + } +} diff --git a/src/main/java/com/stefanini/exception/MesNaoExisteMapper.java b/src/main/java/com/stefanini/exception/MesNaoExisteMapper.java new file mode 100644 index 0000000..cd30e6e --- /dev/null +++ b/src/main/java/com/stefanini/exception/MesNaoExisteMapper.java @@ -0,0 +1,16 @@ +package com.stefanini.exception; + +import javax.ws.rs.core.Response; +import javax.ws.rs.core.Response.Status; +import javax.ws.rs.ext.ExceptionMapper; +import javax.ws.rs.ext.Provider; + +@Provider +public class MesNaoExisteMapper implements ExceptionMapper { + + @Override + public Response toResponse(MesNaoExisteException exception) { + return Response.status(Status.BAD_REQUEST).entity(exception.getMessage()).build(); + } + +} diff --git a/src/main/java/com/stefanini/model/Usuario.java b/src/main/java/com/stefanini/model/Usuario.java index bbad9bf..833912c 100644 --- a/src/main/java/com/stefanini/model/Usuario.java +++ b/src/main/java/com/stefanini/model/Usuario.java @@ -2,8 +2,6 @@ import java.time.LocalDate; import java.time.LocalDateTime; -import java.util.Objects; - import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue; diff --git a/src/main/java/com/stefanini/repository/UsuarioRepository.java b/src/main/java/com/stefanini/repository/UsuarioRepository.java index 2496cf7..ab81955 100644 --- a/src/main/java/com/stefanini/repository/UsuarioRepository.java +++ b/src/main/java/com/stefanini/repository/UsuarioRepository.java @@ -1,5 +1,7 @@ package com.stefanini.repository; +import java.util.List; + import javax.enterprise.context.ApplicationScoped; import javax.persistence.NoResultException; @@ -17,6 +19,12 @@ public Usuario findByLogin(String login) { } catch(NoResultException e){ return null; } + } + public List listAllBirthdaysUsersFromMonth(int month){ + return this.createQuery("SELECT u from Usuario u where month(u.dataNascimento) = :month") + .setParameter("month", month) + .getResultList(); } + } diff --git a/src/main/java/com/stefanini/resources/UsuarioResource.java b/src/main/java/com/stefanini/resources/UsuarioResource.java index e658a60..1b05944 100644 --- a/src/main/java/com/stefanini/resources/UsuarioResource.java +++ b/src/main/java/com/stefanini/resources/UsuarioResource.java @@ -15,6 +15,7 @@ import javax.ws.rs.core.Response.Status; import com.stefanini.dto.UsuarioCompletoDto; +import com.stefanini.exception.MesNaoExisteException; import com.stefanini.exception.UsuarioIdNaoExisteException; import com.stefanini.exception.UsuarioLoginJaExisteException; import com.stefanini.service.UsuarioService; @@ -43,15 +44,20 @@ public Response listAll(){ @GET @Path("/{id}") - public Response findById(@PathParam(value = "id") Long id){ + public Response findById(@PathParam(value = "id") Long id) throws UsuarioIdNaoExisteException{ return Response.status(Status.OK).entity(usuarioService.findById(id)).build(); } @DELETE @Path("/{id}") - public Response delete(@PathParam(value = "id") Long id){ + public Response delete(@PathParam(value = "id") Long id) throws UsuarioIdNaoExisteException{ usuarioService.delete(id); - return Response.ok().build(); + return Response.noContent().build(); + } + + @GET + @Path("/aniversariantes/{mes}") + public Response listAllBirthdaysUsersFromMonth(@PathParam(value = "mes") int mes) throws MesNaoExisteException{ + return Response.status(Status.OK).entity(usuarioService.listAllBirthdaysUsersFromMonth(mes)).build(); } - } diff --git a/src/main/java/com/stefanini/service/UsuarioService.java b/src/main/java/com/stefanini/service/UsuarioService.java index e781c06..00a7764 100644 --- a/src/main/java/com/stefanini/service/UsuarioService.java +++ b/src/main/java/com/stefanini/service/UsuarioService.java @@ -9,6 +9,7 @@ import com.stefanini.dto.UsuarioCompletoDto; import com.stefanini.dto.UsuarioDto; +import com.stefanini.exception.MesNaoExisteException; import com.stefanini.exception.UsuarioIdNaoExisteException; import com.stefanini.exception.UsuarioLoginJaExisteException; import com.stefanini.model.Usuario; @@ -43,7 +44,10 @@ public UsuarioDto save(UsuarioCompletoDto usuarioCompletoDto) throws UsuarioLogi return new UsuarioDto(usuarioRepository.save(novoUsuario)); } - public void delete(Long id) { + public void delete(Long id) throws UsuarioIdNaoExisteException { + if(temIdUsuario(id)){ + throw new UsuarioIdNaoExisteException("O id informado não existe!"); + } usuarioRepository.delete(id); } @@ -62,6 +66,14 @@ public UsuarioDto update(UsuarioCompletoDto usuarioCompletoDto) throws UsuarioLo return new UsuarioDto(usuarioRepository.update(editaUsuario)); } + + public List listAllBirthdaysUsersFromMonth(int month) throws MesNaoExisteException{ + if(!mesExiste(month)){ + throw new MesNaoExisteException("O mês informado não existe!"); + } + return usuarioRepository.listAllBirthdaysUsersFromMonth(month).stream().map(u -> new UsuarioDto(u)).collect(Collectors.toList()); + } + private boolean temLoginUsuario(String login){ return Objects.nonNull(usuarioRepository.findByLogin(login)); } @@ -69,4 +81,8 @@ private boolean temLoginUsuario(String login){ private boolean temIdUsuario(Long id){ return Objects.nonNull(usuarioRepository.findById(id)); } + + private boolean mesExiste(int mes){ + return mes >= 1 && mes <= 12; + } } diff --git a/src/main/resources/db/carga-inicial.sql b/src/main/resources/db/carga-inicial.sql index e69de29..baf23ec 100644 --- a/src/main/resources/db/carga-inicial.sql +++ b/src/main/resources/db/carga-inicial.sql @@ -0,0 +1,8 @@ +INSERT INTO `curso_rest`.`tb_usuario` +(`dataAtualizacao`,`dataCriacao`,`dataNascimento`,`email`,`login`,`nome`,`senha`) +VALUES +('2023-02-21 20:27:08.585225', '2023-02-21 20:27:08.585225', '2011-07-01', 'gabrielpsilva@gmail.com', 'gabrielpsilvaAaBb', 'GabrielA', 'JFNlMTIz'), +('2023-02-21 20:28:08.732232', '2023-02-21 20:28:08.732232', '2011-07-01', 'gabrielpsilva@gmail.com', 'gabrielSetembro', 'GabrielA', 'JFNlMTIz'), +('2023-02-21 20:28:18.177241', '2023-02-21 20:28:18.177241', '2011-07-01', 'gabrielpsilva@gmail.com', 'gabrielSetembro2', 'GabrielA', 'JFNlMTIz'), +('2023-02-21 20:28:28.741270', '2023-02-21 20:28:28.741270', '2011-04-01', 'gabrielpsilva@gmail.com', 'gabrielAbril', 'GabrielA', 'JFNlMTIz'), +('2023-02-21 20:28:46.306683', '2023-02-21 20:28:46.306683', '2011-06-01', 'gabrielpsilva@gmail.com', 'gabrielJunho', 'GabrielA', 'JFNlMTIz'); \ No newline at end of file From 02bb07828ffe060bfbd4f6693e6cc48fc238a870 Mon Sep 17 00:00:00 2001 From: Gabriel Pereira da Silva Date: Tue, 21 Feb 2023 21:50:55 -0300 Subject: [PATCH 4/8] #3- Criando Endpoint pra pegar provedores de email dos usuarios --- .../stefanini/repository/UsuarioRepository.java | 2 -- .../com/stefanini/resources/UsuarioResource.java | 6 ++++++ .../com/stefanini/service/UsuarioService.java | 15 +++++++++++++++ src/main/resources/db/carga-inicial.sql | 6 +++--- 4 files changed, 24 insertions(+), 5 deletions(-) diff --git a/src/main/java/com/stefanini/repository/UsuarioRepository.java b/src/main/java/com/stefanini/repository/UsuarioRepository.java index ab81955..8317428 100644 --- a/src/main/java/com/stefanini/repository/UsuarioRepository.java +++ b/src/main/java/com/stefanini/repository/UsuarioRepository.java @@ -1,10 +1,8 @@ package com.stefanini.repository; import java.util.List; - import javax.enterprise.context.ApplicationScoped; import javax.persistence.NoResultException; - import com.stefanini.dao.GenericDAO; import com.stefanini.model.Usuario; diff --git a/src/main/java/com/stefanini/resources/UsuarioResource.java b/src/main/java/com/stefanini/resources/UsuarioResource.java index 1b05944..cb73f41 100644 --- a/src/main/java/com/stefanini/resources/UsuarioResource.java +++ b/src/main/java/com/stefanini/resources/UsuarioResource.java @@ -60,4 +60,10 @@ public Response delete(@PathParam(value = "id") Long id) throws UsuarioIdNaoExis public Response listAllBirthdaysUsersFromMonth(@PathParam(value = "mes") int mes) throws MesNaoExisteException{ return Response.status(Status.OK).entity(usuarioService.listAllBirthdaysUsersFromMonth(mes)).build(); } + + @GET + @Path("/provedores-emails") + public Response listAllUsersEmailProviders() { + return Response.status(Status.OK).entity(usuarioService.listAllUsersEmailProviders()).build(); + } } diff --git a/src/main/java/com/stefanini/service/UsuarioService.java b/src/main/java/com/stefanini/service/UsuarioService.java index 00a7764..00e60e8 100644 --- a/src/main/java/com/stefanini/service/UsuarioService.java +++ b/src/main/java/com/stefanini/service/UsuarioService.java @@ -1,7 +1,10 @@ package com.stefanini.service; +import java.util.HashSet; +import java.util.ArrayList; import java.util.List; import java.util.Objects; +import java.util.Set; import java.util.stream.Collectors; import javax.enterprise.context.ApplicationScoped; @@ -74,6 +77,18 @@ public List listAllBirthdaysUsersFromMonth(int month) throws MesNaoE return usuarioRepository.listAllBirthdaysUsersFromMonth(month).stream().map(u -> new UsuarioDto(u)).collect(Collectors.toList()); } + public List listAllUsersEmailProviders(){ + List emails = this.listAll().stream().map(u -> u.getEmail()).collect(Collectors.toList()); + Set providers = new HashSet(); + emails.stream().forEach(e -> { + int position = e.indexOf("@"); + String provider = e.substring(position); + providers.add(provider); + + }); + return new ArrayList(providers); + } + private boolean temLoginUsuario(String login){ return Objects.nonNull(usuarioRepository.findByLogin(login)); } diff --git a/src/main/resources/db/carga-inicial.sql b/src/main/resources/db/carga-inicial.sql index baf23ec..7574c3b 100644 --- a/src/main/resources/db/carga-inicial.sql +++ b/src/main/resources/db/carga-inicial.sql @@ -2,7 +2,7 @@ INSERT INTO `curso_rest`.`tb_usuario` (`dataAtualizacao`,`dataCriacao`,`dataNascimento`,`email`,`login`,`nome`,`senha`) VALUES ('2023-02-21 20:27:08.585225', '2023-02-21 20:27:08.585225', '2011-07-01', 'gabrielpsilva@gmail.com', 'gabrielpsilvaAaBb', 'GabrielA', 'JFNlMTIz'), -('2023-02-21 20:28:08.732232', '2023-02-21 20:28:08.732232', '2011-07-01', 'gabrielpsilva@gmail.com', 'gabrielSetembro', 'GabrielA', 'JFNlMTIz'), -('2023-02-21 20:28:18.177241', '2023-02-21 20:28:18.177241', '2011-07-01', 'gabrielpsilva@gmail.com', 'gabrielSetembro2', 'GabrielA', 'JFNlMTIz'), -('2023-02-21 20:28:28.741270', '2023-02-21 20:28:28.741270', '2011-04-01', 'gabrielpsilva@gmail.com', 'gabrielAbril', 'GabrielA', 'JFNlMTIz'), +('2023-02-21 20:28:08.732232', '2023-02-21 20:28:08.732232', '2011-07-01', 'gabrielpsilva@yahoo.com', 'gabrielSetembro', 'GabrielA', 'JFNlMTIz'), +('2023-02-21 20:28:18.177241', '2023-02-21 20:28:18.177241', '2011-07-01', 'gabrielpsilva@outlook.com', 'gabrielSetembro2', 'GabrielA', 'JFNlMTIz'), +('2023-02-21 20:28:28.741270', '2023-02-21 20:28:28.741270', '2011-04-01', 'gabrielpsilva@outlook.com', 'gabrielAbril', 'GabrielA', 'JFNlMTIz'), ('2023-02-21 20:28:46.306683', '2023-02-21 20:28:46.306683', '2011-06-01', 'gabrielpsilva@gmail.com', 'gabrielJunho', 'GabrielA', 'JFNlMTIz'); \ No newline at end of file From 0f988788fc998d67a8b19e633991cca4bf38cd09 Mon Sep 17 00:00:00 2001 From: Gabriel Pereira da Silva Date: Wed, 22 Feb 2023 01:56:06 -0300 Subject: [PATCH 5/8] =?UTF-8?q?#4-=20Criando=20Endpoint=20pra=20pegar=20us?= =?UTF-8?q?uario=20pela=20letra=20inicial=20do=20nome,=20ajustando=20mensa?= =?UTF-8?q?gem=20da=20ValidantionException,criando=20exce=C3=A7=C3=A3o=20n?= =?UTF-8?q?ova=20TextoComMaisDeUmaLetra=20e=20ajustando=20carga=20inicial?= =?UTF-8?q?=20para=20mostrar=20os=20endpoints=20implementados?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/stefanini/dto/UsuarioCompletoDto.java | 2 +- .../java/com/stefanini/dto/UsuarioDto.java | 4 +-- .../TextoComMaisDeUmaLetraException.java | 15 ++++++++++ .../TextoComMaisDeUmaLetraMapper.java | 16 +++++++++++ .../stefanini/exception/ValidationMapper.java | 17 +++++++++++ .../java/com/stefanini/model/Usuario.java | 1 - .../repository/UsuarioRepository.java | 6 ++++ .../stefanini/resources/UsuarioResource.java | 7 +++++ .../com/stefanini/service/UsuarioService.java | 28 +++++++++++++++++-- .../util/CheckPasswordValidator.java | 1 + src/main/resources/db/carga-inicial.sql | 10 +++---- 11 files changed, 94 insertions(+), 13 deletions(-) create mode 100644 src/main/java/com/stefanini/exception/TextoComMaisDeUmaLetraException.java create mode 100644 src/main/java/com/stefanini/exception/TextoComMaisDeUmaLetraMapper.java create mode 100644 src/main/java/com/stefanini/exception/ValidationMapper.java diff --git a/src/main/java/com/stefanini/dto/UsuarioCompletoDto.java b/src/main/java/com/stefanini/dto/UsuarioCompletoDto.java index 58aa5e3..d7c8eea 100644 --- a/src/main/java/com/stefanini/dto/UsuarioCompletoDto.java +++ b/src/main/java/com/stefanini/dto/UsuarioCompletoDto.java @@ -38,7 +38,7 @@ public UsuarioCompletoDto(Usuario usuario){ @Size(min = 4,max = 10) @NotBlank - @Pattern(regexp = CheckPasswordValidator.PASSWORD_VALIDATOR) + @Pattern(regexp = CheckPasswordValidator.PASSWORD_VALIDATOR,message = CheckPasswordValidator.SENHA_FORA_DO_PADRAO) private String senha; @Size(min = 10) diff --git a/src/main/java/com/stefanini/dto/UsuarioDto.java b/src/main/java/com/stefanini/dto/UsuarioDto.java index 8b0971d..960071d 100644 --- a/src/main/java/com/stefanini/dto/UsuarioDto.java +++ b/src/main/java/com/stefanini/dto/UsuarioDto.java @@ -1,11 +1,9 @@ package com.stefanini.dto; import java.time.LocalDate; - import javax.validation.constraints.Email; import javax.validation.constraints.NotBlank; import javax.validation.constraints.Size; - import com.fasterxml.jackson.annotation.JsonFormat; import com.stefanini.model.Usuario; @@ -79,7 +77,7 @@ public LocalDate getDataNascimento() { } public void setDataNascimento(LocalDate dataNascimento) { - this.dataNascimento = dataNascimento; + this.dataNascimento = dataNascimento; } diff --git a/src/main/java/com/stefanini/exception/TextoComMaisDeUmaLetraException.java b/src/main/java/com/stefanini/exception/TextoComMaisDeUmaLetraException.java new file mode 100644 index 0000000..874762b --- /dev/null +++ b/src/main/java/com/stefanini/exception/TextoComMaisDeUmaLetraException.java @@ -0,0 +1,15 @@ +package com.stefanini.exception; + +import javax.ws.rs.WebApplicationException; + +public class TextoComMaisDeUmaLetraException extends WebApplicationException { + public TextoComMaisDeUmaLetraException() { + super(); + } + public TextoComMaisDeUmaLetraException(String msg) { + super(msg); + } + public TextoComMaisDeUmaLetraException(String msg, WebApplicationException e) { + super(msg, e); + } +} diff --git a/src/main/java/com/stefanini/exception/TextoComMaisDeUmaLetraMapper.java b/src/main/java/com/stefanini/exception/TextoComMaisDeUmaLetraMapper.java new file mode 100644 index 0000000..163878a --- /dev/null +++ b/src/main/java/com/stefanini/exception/TextoComMaisDeUmaLetraMapper.java @@ -0,0 +1,16 @@ +package com.stefanini.exception; + +import javax.ws.rs.core.Response; +import javax.ws.rs.core.Response.Status; +import javax.ws.rs.ext.ExceptionMapper; +import javax.ws.rs.ext.Provider; + +@Provider +public class TextoComMaisDeUmaLetraMapper implements ExceptionMapper { + + @Override + public Response toResponse(TextoComMaisDeUmaLetraException exception) { + return Response.status(Status.BAD_REQUEST).entity(exception.getMessage()).build(); + } + +} diff --git a/src/main/java/com/stefanini/exception/ValidationMapper.java b/src/main/java/com/stefanini/exception/ValidationMapper.java new file mode 100644 index 0000000..e1f66fd --- /dev/null +++ b/src/main/java/com/stefanini/exception/ValidationMapper.java @@ -0,0 +1,17 @@ +package com.stefanini.exception; + +import javax.validation.ValidationException; +import javax.ws.rs.core.Response; +import javax.ws.rs.core.Response.Status; +import javax.ws.rs.ext.ExceptionMapper; +import javax.ws.rs.ext.Provider; + +@Provider +public class ValidationMapper implements ExceptionMapper { + + @Override + public Response toResponse(ValidationException exception) { + return Response.status(Status.BAD_REQUEST).entity(exception.getMessage()).build(); + } + +} diff --git a/src/main/java/com/stefanini/model/Usuario.java b/src/main/java/com/stefanini/model/Usuario.java index 833912c..ceed9d5 100644 --- a/src/main/java/com/stefanini/model/Usuario.java +++ b/src/main/java/com/stefanini/model/Usuario.java @@ -18,7 +18,6 @@ import com.stefanini.dto.UsuarioCompletoDto; import com.stefanini.dto.UsuarioDto; - @Entity @Table(name = "tb_usuario") public class Usuario { diff --git a/src/main/java/com/stefanini/repository/UsuarioRepository.java b/src/main/java/com/stefanini/repository/UsuarioRepository.java index 8317428..da178ec 100644 --- a/src/main/java/com/stefanini/repository/UsuarioRepository.java +++ b/src/main/java/com/stefanini/repository/UsuarioRepository.java @@ -25,4 +25,10 @@ public List listAllBirthdaysUsersFromMonth(int month){ .getResultList(); } + public List listAllUsersNameStartsWith(String startsWith){ + return this.createQuery("SELECT u from Usuario u where LOWER(u.nome) like LOWER(:pattern)") + .setParameter("pattern", startsWith+"%") + .getResultList(); + } + } diff --git a/src/main/java/com/stefanini/resources/UsuarioResource.java b/src/main/java/com/stefanini/resources/UsuarioResource.java index cb73f41..5c22fb8 100644 --- a/src/main/java/com/stefanini/resources/UsuarioResource.java +++ b/src/main/java/com/stefanini/resources/UsuarioResource.java @@ -16,6 +16,7 @@ import com.stefanini.dto.UsuarioCompletoDto; import com.stefanini.exception.MesNaoExisteException; +import com.stefanini.exception.TextoComMaisDeUmaLetraException; import com.stefanini.exception.UsuarioIdNaoExisteException; import com.stefanini.exception.UsuarioLoginJaExisteException; import com.stefanini.service.UsuarioService; @@ -66,4 +67,10 @@ public Response listAllBirthdaysUsersFromMonth(@PathParam(value = "mes") int mes public Response listAllUsersEmailProviders() { return Response.status(Status.OK).entity(usuarioService.listAllUsersEmailProviders()).build(); } + + @GET + @Path("/comeca-com/{letra}") + public Response listAllUsersNameStartsWith(@PathParam(value = "letra") String letra) throws TextoComMaisDeUmaLetraException{ + return Response.status(Status.OK).entity(usuarioService.listAllUsersNameStartsWith(letra)).build(); + } } diff --git a/src/main/java/com/stefanini/service/UsuarioService.java b/src/main/java/com/stefanini/service/UsuarioService.java index 00e60e8..59f1a5c 100644 --- a/src/main/java/com/stefanini/service/UsuarioService.java +++ b/src/main/java/com/stefanini/service/UsuarioService.java @@ -13,6 +13,7 @@ import com.stefanini.dto.UsuarioCompletoDto; import com.stefanini.dto.UsuarioDto; import com.stefanini.exception.MesNaoExisteException; +import com.stefanini.exception.TextoComMaisDeUmaLetraException; import com.stefanini.exception.UsuarioIdNaoExisteException; import com.stefanini.exception.UsuarioLoginJaExisteException; import com.stefanini.model.Usuario; @@ -26,7 +27,10 @@ public class UsuarioService { private UsuarioRepository usuarioRepository; public List listAll() { - return usuarioRepository.listAll().stream().map(u -> new UsuarioDto(u)).collect(Collectors.toList()); + return usuarioRepository.listAll() + .stream() + .map(u -> new UsuarioDto(u)) + .collect(Collectors.toList()); } public UsuarioDto findById(Long id) { @@ -48,7 +52,7 @@ public UsuarioDto save(UsuarioCompletoDto usuarioCompletoDto) throws UsuarioLogi } public void delete(Long id) throws UsuarioIdNaoExisteException { - if(temIdUsuario(id)){ + if(!temIdUsuario(id)){ throw new UsuarioIdNaoExisteException("O id informado não existe!"); } usuarioRepository.delete(id); @@ -74,7 +78,10 @@ public List listAllBirthdaysUsersFromMonth(int month) throws MesNaoE if(!mesExiste(month)){ throw new MesNaoExisteException("O mês informado não existe!"); } - return usuarioRepository.listAllBirthdaysUsersFromMonth(month).stream().map(u -> new UsuarioDto(u)).collect(Collectors.toList()); + return usuarioRepository.listAllBirthdaysUsersFromMonth(month) + .stream() + .map(u -> new UsuarioDto(u)) + .collect(Collectors.toList()); } public List listAllUsersEmailProviders(){ @@ -89,6 +96,17 @@ public List listAllUsersEmailProviders(){ return new ArrayList(providers); } + public List listAllUsersNameStartsWith(String startsWith) throws TextoComMaisDeUmaLetraException{ + if(!temApenasUmCaractere(startsWith)){ + throw new TextoComMaisDeUmaLetraException("O texto enviado possui mais de um caractere!"); + } + + return usuarioRepository.listAllUsersNameStartsWith(startsWith) + .stream() + .map(u -> new UsuarioDto(u)) + .collect(Collectors.toList()); + } + private boolean temLoginUsuario(String login){ return Objects.nonNull(usuarioRepository.findByLogin(login)); } @@ -97,6 +115,10 @@ private boolean temIdUsuario(Long id){ return Objects.nonNull(usuarioRepository.findById(id)); } + private boolean temApenasUmCaractere(String string){ + return string.length() == 1 ; + } + private boolean mesExiste(int mes){ return mes >= 1 && mes <= 12; } diff --git a/src/main/java/com/stefanini/util/CheckPasswordValidator.java b/src/main/java/com/stefanini/util/CheckPasswordValidator.java index 11511ea..f915230 100644 --- a/src/main/java/com/stefanini/util/CheckPasswordValidator.java +++ b/src/main/java/com/stefanini/util/CheckPasswordValidator.java @@ -2,5 +2,6 @@ public class CheckPasswordValidator{ public static final String PASSWORD_VALIDATOR = "^(?=.*[a-z])(?=.*[A-Z])(?=.*\\d)" + "(?=.*[-+_!@#$%^&*., ?]).+$"; + public static final String SENHA_FORA_DO_PADRAO = "A senha deve possuir: um caractere maiuscula, um caractere minusculo, uma caractere especial e um caractere numérico"; } \ No newline at end of file diff --git a/src/main/resources/db/carga-inicial.sql b/src/main/resources/db/carga-inicial.sql index 7574c3b..bff4ed1 100644 --- a/src/main/resources/db/carga-inicial.sql +++ b/src/main/resources/db/carga-inicial.sql @@ -1,8 +1,8 @@ INSERT INTO `curso_rest`.`tb_usuario` (`dataAtualizacao`,`dataCriacao`,`dataNascimento`,`email`,`login`,`nome`,`senha`) VALUES -('2023-02-21 20:27:08.585225', '2023-02-21 20:27:08.585225', '2011-07-01', 'gabrielpsilva@gmail.com', 'gabrielpsilvaAaBb', 'GabrielA', 'JFNlMTIz'), -('2023-02-21 20:28:08.732232', '2023-02-21 20:28:08.732232', '2011-07-01', 'gabrielpsilva@yahoo.com', 'gabrielSetembro', 'GabrielA', 'JFNlMTIz'), -('2023-02-21 20:28:18.177241', '2023-02-21 20:28:18.177241', '2011-07-01', 'gabrielpsilva@outlook.com', 'gabrielSetembro2', 'GabrielA', 'JFNlMTIz'), -('2023-02-21 20:28:28.741270', '2023-02-21 20:28:28.741270', '2011-04-01', 'gabrielpsilva@outlook.com', 'gabrielAbril', 'GabrielA', 'JFNlMTIz'), -('2023-02-21 20:28:46.306683', '2023-02-21 20:28:46.306683', '2011-06-01', 'gabrielpsilva@gmail.com', 'gabrielJunho', 'GabrielA', 'JFNlMTIz'); \ No newline at end of file +('2023-02-21 20:27:08.585225', '2023-02-21 20:27:08.585225', '2011-07-01', 'gabrielpsilva@gmail.com', 'gabrielpsilvaAaBb', 'Gabriel', 'JFNlMTIz'), +('2023-02-21 20:28:08.732232', '2023-02-21 20:28:08.732232', '2011-07-01', 'nathalya@yahoo.com', 'nathalyaSetembro', 'Nathalya', 'JFNlMTIz'), +('2023-02-21 20:28:18.177241', '2023-02-21 20:28:18.177241', '2011-07-01', 'pikachu@outlook.com', 'pikachuSetembro', 'Pikachu', 'JFNlMTIz'), +('2023-02-21 20:28:28.741270', '2023-02-21 20:28:28.741270', '2011-04-01', 'garfield@outlook.com', 'garfieldAbril', 'Garfield', 'JFNlMTIz'), +('2023-02-21 20:28:46.306683', '2023-02-21 20:28:46.306683', '2011-06-01', 'nina@gmail.com', 'ninaJunho', 'Nina', 'JFNlMTIz'); \ No newline at end of file From 0e45ab2e3c971d198e223459b5a80bb17c143260 Mon Sep 17 00:00:00 2001 From: Gabriel Pereira da Silva Date: Wed, 22 Feb 2023 02:31:12 -0300 Subject: [PATCH 6/8] Update README.md --- README.md | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/README.md b/README.md index da232f4..1d2779b 100644 --- a/README.md +++ b/README.md @@ -47,3 +47,16 @@ Use o seguinte comando para iniciar o servidor:
Opcionais: - Docker([guia](https://docs.docker.com/)) + +## Endpoints criados + +| Verbo | Endpoint | Ação | +|--------|-------------------------------|----------------------------------------------------------------| +| GET | usuario | Pegar todos os usuários cadastrados | +| POST | usuario | Criar um usuário | +| PUT | usuario | Atualizar um usuário | +| DELETE | ussuario/{id} | Apagar um usuário | +| GET | usuario/aniversariantes/{mes} | Pegar todos os usuários que fazem aniversário no {mes} passado | +| GET | usuario/comeca-com/{letra} | Pegar todos os usuários que tem nome que inicia com a {letra} | +| GET | usuario/provedores-emails | Pegar todos os provedores de email dos usuários cadastrados | +| GET | usuario/{id} | Pegar um usuário pelo {id} passado | From daa6a5194e5cf64ca8a4c46cedb5be06b4d90001 Mon Sep 17 00:00:00 2001 From: Gabriel Pereira da Silva Date: Fri, 24 Feb 2023 19:51:52 -0300 Subject: [PATCH 7/8] bug fix --- .../com/stefanini/dto/UsuarioCompletoDto.java | 25 +++++++++++++++++++ .../com/stefanini/service/UsuarioService.java | 9 ++++--- 2 files changed, 31 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/stefanini/dto/UsuarioCompletoDto.java b/src/main/java/com/stefanini/dto/UsuarioCompletoDto.java index d7c8eea..1c37cc4 100644 --- a/src/main/java/com/stefanini/dto/UsuarioCompletoDto.java +++ b/src/main/java/com/stefanini/dto/UsuarioCompletoDto.java @@ -97,6 +97,31 @@ public void setDataNascimento(LocalDate dataNascimento) { this.dataNascimento = dataNascimento; } + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + ((id == null) ? 0 : id.hashCode()); + return result; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (getClass() != obj.getClass()) + return false; + UsuarioCompletoDto other = (UsuarioCompletoDto) obj; + if (id == null) { + if (other.id != null) + return false; + } else if (!id.equals(other.id)) + return false; + return true; + } + } diff --git a/src/main/java/com/stefanini/service/UsuarioService.java b/src/main/java/com/stefanini/service/UsuarioService.java index 59f1a5c..659e540 100644 --- a/src/main/java/com/stefanini/service/UsuarioService.java +++ b/src/main/java/com/stefanini/service/UsuarioService.java @@ -33,12 +33,14 @@ public List listAll() { .collect(Collectors.toList()); } - public UsuarioDto findById(Long id) { + public UsuarioCompletoDto findById(Long id) { Usuario usuario = usuarioRepository.findById(id); if(!Objects.nonNull(usuario)){ throw new UsuarioIdNaoExisteException("O id informado não existe!"); } - return new UsuarioDto(usuario); + UsuarioCompletoDto usuarioCompletoDto = new UsuarioCompletoDto(usuario); + usuarioCompletoDto.setSenha(Base64Util.decode(usuarioCompletoDto.getSenha())); + return usuarioCompletoDto; } public UsuarioDto save(UsuarioCompletoDto usuarioCompletoDto) throws UsuarioLoginJaExisteException{ @@ -59,7 +61,8 @@ public void delete(Long id) throws UsuarioIdNaoExisteException { } public UsuarioDto update(UsuarioCompletoDto usuarioCompletoDto) throws UsuarioLoginJaExisteException,UsuarioIdNaoExisteException { - if(temLoginUsuario(usuarioCompletoDto.getLogin())){ + Usuario usuarioLogin = usuarioRepository.findByLogin(usuarioCompletoDto.getLogin()); + if(usuarioCompletoDto.getId().equals(usuarioLogin.getId()) && usuarioCompletoDto.getLogin().equals(usuarioLogin.getLogin())){ throw new UsuarioLoginJaExisteException("O login informado ja existe!"); } Usuario usuarioPreUpdate = usuarioRepository.findById(usuarioCompletoDto.getId()); From 7319bfeec384f1502ae411ff3edca869174947c4 Mon Sep 17 00:00:00 2001 From: Gabriel Pereira da Silva Date: Fri, 24 Feb 2023 19:57:16 -0300 Subject: [PATCH 8/8] bug fix --- src/main/java/com/stefanini/service/UsuarioService.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/stefanini/service/UsuarioService.java b/src/main/java/com/stefanini/service/UsuarioService.java index 659e540..4ff78a8 100644 --- a/src/main/java/com/stefanini/service/UsuarioService.java +++ b/src/main/java/com/stefanini/service/UsuarioService.java @@ -62,7 +62,7 @@ public void delete(Long id) throws UsuarioIdNaoExisteException { public UsuarioDto update(UsuarioCompletoDto usuarioCompletoDto) throws UsuarioLoginJaExisteException,UsuarioIdNaoExisteException { Usuario usuarioLogin = usuarioRepository.findByLogin(usuarioCompletoDto.getLogin()); - if(usuarioCompletoDto.getId().equals(usuarioLogin.getId()) && usuarioCompletoDto.getLogin().equals(usuarioLogin.getLogin())){ + if(!usuarioCompletoDto.getId().equals(usuarioLogin.getId()) && usuarioCompletoDto.getLogin().equals(usuarioLogin.getLogin())){ throw new UsuarioLoginJaExisteException("O login informado ja existe!"); } Usuario usuarioPreUpdate = usuarioRepository.findById(usuarioCompletoDto.getId());