diff --git a/src/main/java/com/orbitech/npvet/controller/UsuarioController.java b/src/main/java/com/orbitech/npvet/controller/UsuarioController.java index 03b00a8..d9916d9 100644 --- a/src/main/java/com/orbitech/npvet/controller/UsuarioController.java +++ b/src/main/java/com/orbitech/npvet/controller/UsuarioController.java @@ -1,5 +1,6 @@ package com.orbitech.npvet.controller; +import com.orbitech.npvet.dto.UsuarioCadastrarDTO; import com.orbitech.npvet.dto.UsuarioDTO; import com.orbitech.npvet.entity.Usuario; import com.orbitech.npvet.service.UsuarioService; @@ -30,7 +31,7 @@ public class UsuarioController { } @PostMapping("/post") @PreAuthorize("hasAnyAuthority('ADMINISTRADOR')") - public ResponseEntitycreate(@Validated @RequestBody UsuarioDTO usuarioDTO, @AuthenticationPrincipal Usuario usuarioAutenticado){ + public ResponseEntitycreate(@Validated @RequestBody UsuarioCadastrarDTO usuarioDTO, @AuthenticationPrincipal Usuario usuarioAutenticado){ return ResponseEntity.ok(service.create(usuarioDTO, usuarioAutenticado)); } @PutMapping("/update/{id}") diff --git a/src/main/java/com/orbitech/npvet/dto/UsuarioCadastrarDTO.java b/src/main/java/com/orbitech/npvet/dto/UsuarioCadastrarDTO.java new file mode 100644 index 0000000..bd00439 --- /dev/null +++ b/src/main/java/com/orbitech/npvet/dto/UsuarioCadastrarDTO.java @@ -0,0 +1,62 @@ +package com.orbitech.npvet.dto; + +import com.orbitech.npvet.entity.Role; +import jakarta.persistence.EnumType; +import jakarta.persistence.Enumerated; +import jakarta.validation.constraints.NotNull; +import jakarta.validation.constraints.Size; +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; +import org.hibernate.validator.constraints.br.CPF; + +import java.time.LocalDateTime; + +@Getter +@Setter +@AllArgsConstructor +@NoArgsConstructor +public class UsuarioCadastrarDTO { + private String id; + // @NotNull(message = "Você precisa preencher um nome.") + @Size(max = 100, message = "Quantidade de caracteres excedida.") + private String nome; + + // @NotNull(message = "Você precisa preencher um CPF.") + @CPF(message = "CPF inválido.") + private String cpf; + + @Enumerated(EnumType.STRING) + @NotNull(message = "Você precisar definir o tipo de Usuário entre: SECRETARIA, ADMINISTRADOR ou MEDICO.") + private Role role; + + @NotNull(message = "Você precisa definir um nome de usuário.") + @Size(max = 30, message = "Quantidade de caracteres excedida.") + private String username; + + + @NotNull(message = "Você precisa definir uma senha.") + @Size(max = 50, message = "Quantidade de caracteres excedida.") + private String password; + + private String token; + private LocalDateTime createdAt; + private LocalDateTime updatedAt; + private LocalDateTime deletedAt; + + public void roleStringSet(String role){ + this.role = Role.valueOf(role); + } + public String roleStringGet() { + return this.role.toString(); + } + + public void delete(){ + this.deletedAt = LocalDateTime.now(); + } + public void activate(){ + this.deletedAt = null; + } + +} diff --git a/src/main/java/com/orbitech/npvet/entity/Usuario.java b/src/main/java/com/orbitech/npvet/entity/Usuario.java index 9cf6369..4105556 100644 --- a/src/main/java/com/orbitech/npvet/entity/Usuario.java +++ b/src/main/java/com/orbitech/npvet/entity/Usuario.java @@ -25,7 +25,7 @@ public class Usuario extends AbstractEntity implements UserDetails { @Column(length = 100, name = "nome") private String nome; - @Column(unique = true, length = 11, name = "cpf") + @Column(unique = true, length = 15, name = "cpf") private String cpf; @Enumerated(EnumType.STRING) diff --git a/src/main/java/com/orbitech/npvet/service/UsuarioService.java b/src/main/java/com/orbitech/npvet/service/UsuarioService.java index c466c4e..87675ce 100644 --- a/src/main/java/com/orbitech/npvet/service/UsuarioService.java +++ b/src/main/java/com/orbitech/npvet/service/UsuarioService.java @@ -1,13 +1,16 @@ package com.orbitech.npvet.service; +import com.orbitech.npvet.dto.UsuarioCadastrarDTO; import com.orbitech.npvet.dto.UsuarioDTO; import com.orbitech.npvet.entity.Role; import com.orbitech.npvet.entity.Usuario; import com.orbitech.npvet.repository.UsuarioRepository; +import lombok.AllArgsConstructor; import lombok.extern.log4j.Log4j2; import lombok.extern.slf4j.Slf4j; import org.modelmapper.ModelMapper; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.crypto.password.PasswordEncoder; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.Assert; @@ -16,33 +19,55 @@ @Service @Slf4j +@AllArgsConstructor public class UsuarioService { @Autowired private UsuarioRepository repository; + private PasswordEncoder passwordEncoder; + private final ModelMapper mapper = new ModelMapper(); public UsuarioDTO toUsuarioDTO(Usuario usuarioEntidade){ return mapper.map(usuarioEntidade, UsuarioDTO.class); } + public UsuarioCadastrarDTO toUsuarioCadastrarDTO(Usuario usuarioEntidade){ + return mapper.map(usuarioEntidade, UsuarioCadastrarDTO.class); + } + public Usuario toUsuarioEntidade(UsuarioDTO usuarioDTO){ return mapper.map(usuarioDTO, Usuario.class); } + public Usuario toUsuarioEntidade(UsuarioCadastrarDTO usuarioDTO){ + return mapper.map(usuarioDTO, Usuario.class); + } + + public Usuario toUsuarioCadastrarEntidade(UsuarioCadastrarDTO usuarioDTO){ + return mapper.map(usuarioDTO, Usuario.class); + } + public UsuarioDTO getById(String id){ return toUsuarioDTO(repository.findById(id).orElse(null)); } + public UsuarioCadastrarDTO getByIdForDelete(String id){ + return toUsuarioCadastrarDTO(repository.findById(id).orElse(null)); + } + public List getAll() { return repository.findAll().stream().map(this::toUsuarioDTO).toList(); } @Transactional - public UsuarioDTO create(UsuarioDTO usuarioDTO, Usuario usuarioAutenticado) { + public UsuarioDTO create(UsuarioCadastrarDTO usuarioDTO, Usuario usuarioAutenticado) { Usuario usuarioByCpf = repository.findUsuarioByCpf(usuarioDTO.getCpf()); + String encodedPassword = passwordEncoder.encode(usuarioDTO.getPassword()); + usuarioDTO.setPassword(encodedPassword); + Assert.isTrue(usuarioByCpf == null, String.format("Usuário com o CPF: {%s} já existe!",usuarioDTO.getCpf())); - UsuarioDTO usuarioDT = toUsuarioDTO(repository.save(toUsuarioEntidade(usuarioDTO))); + UsuarioDTO usuarioDT = toUsuarioDTO(repository.save(toUsuarioCadastrarEntidade(usuarioDTO))); log.info("USUÁRIO:" + usuarioDT.getNome() + "NOME:" +usuarioDT.getNome()+ "USERNAME:" + usuarioDT.getUsername() + "CPF:" + usuarioDT.getCpf() + "| Criado por:" + usuarioAutenticado.getNome() + " "+ usuarioAutenticado.getId()); return usuarioDT; } @@ -106,7 +131,7 @@ public UsuarioDTO getUsuarioByCpf(String cpf){ @Transactional public UsuarioDTO delete(String id, Usuario usuarioAutenticado){ - UsuarioDTO userById = getById(id); + UsuarioCadastrarDTO userById = getByIdForDelete(id); userById.delete(); UsuarioDTO usuarioDT = toUsuarioDTO(repository.save(toUsuarioEntidade(userById))); log.info("USUÁRIO:" + usuarioDT.getNome() + "NOME:" +usuarioDT.getNome()+ "USERNAME:" + usuarioDT.getUsername() + "CPF:" + usuarioDT.getCpf() + "| Deletado por:" + usuarioAutenticado.getNome() + " "+ usuarioAutenticado.getId());