Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
95 changes: 92 additions & 3 deletions src/main/java/com/minsait/api/controller/ApiController.java
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
package com.minsait.api.controller;

import com.minsait.api.controller.dto.ClienteRequest;
import com.minsait.api.controller.dto.ClienteResponse;
import com.minsait.api.controller.dto.MessageResponse;
import com.minsait.api.controller.dto.*;
import com.minsait.api.repository.ClienteEntity;
import com.minsait.api.repository.ClienteRepository;
import com.minsait.api.repository.UsuarioEntity;
import com.minsait.api.repository.UsuarioRepository;
import com.minsait.api.util.ObjectMapperUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
Expand All @@ -18,6 +18,8 @@
import org.springframework.web.bind.annotation.*;

import java.time.LocalDateTime;
import java.util.Optional;
import java.util.concurrent.atomic.AtomicReference;

@Slf4j
@RestController
Expand Down Expand Up @@ -104,4 +106,91 @@ public ResponseEntity<ClienteResponse> findById(@PathVariable Long id){

return new ResponseEntity<>(clienteResponse, HttpStatus.OK);
}


@Autowired
private UsuarioRepository usuarioRepository;

@PreAuthorize("hasAuthority('LEITURA_USUARIO')")
@GetMapping("/usuario")
public ResponseEntity<Page<UsuarioResponse>> findAllUsuario(@RequestParam(required = false) String nome,
@RequestParam(required = false) String login,
@RequestParam(required = false) String email,
@RequestParam(required = false, defaultValue = "0") int page,
@RequestParam(required = false, defaultValue = "10") int pageSize) {
final var usuarioEntity = new UsuarioEntity();
usuarioEntity.setLogin(login);
usuarioEntity.setEmail(email);
Pageable pageable = PageRequest.of(page, pageSize);

final Page<UsuarioEntity> usuarioEntityListPage = usuarioRepository.findAll(usuarioEntity.usuarioEntitySpecification(), pageable);
final Page<UsuarioResponse> usuarioResponseList = ObjectMapperUtil.mapAll(usuarioEntityListPage, UsuarioResponse.class);
return ResponseEntity.ok(usuarioResponseList);
}

@PreAuthorize("hasAuthority('LEITURA_USUARIO')")
@GetMapping("/usuario/{id}")
public ResponseEntity<UsuarioResponse> findByIdUsuario(@PathVariable Long id){
final var usuarioEntity = usuarioRepository.findById(id);
UsuarioResponse usuarioResponse = new UsuarioResponse();

if (usuarioEntity.isPresent()){
usuarioResponse = ObjectMapperUtil.map(usuarioEntity.get(), UsuarioResponse.class);
}else{
return new ResponseEntity<>(usuarioResponse, HttpStatus.NOT_FOUND);
}

return new ResponseEntity<>(usuarioResponse, HttpStatus.OK);
}

@PreAuthorize("hasAuthority('ESCRITA_USUARIO')")
@PostMapping("/usuario")
public ResponseEntity<UsuarioResponse> insertUsuario(@RequestBody UsuarioRequest request){

final var usuarioEntity = ObjectMapperUtil.map(request, UsuarioEntity.class);
usuarioEntity.setSenhaAndEncode(request.getSenha());

final var usuarioInserted = usuarioRepository.save(usuarioEntity);
final var usuarioResponse = ObjectMapperUtil.map(usuarioInserted, UsuarioResponse.class);

return new ResponseEntity<>(usuarioResponse, HttpStatus.CREATED);
}


@PreAuthorize("hasAuthority('ESCRITA_USUARIO')")
@PutMapping("/usuario")
public ResponseEntity<UsuarioResponse> updateUsuario(@RequestBody UsuarioRequest request){
final var usuarioEntity = ObjectMapperUtil.map(request, UsuarioEntity.class);
final var usuarioEntityFound = usuarioRepository.findById(usuarioEntity.getId());

if (usuarioEntityFound.isEmpty()) {
return new ResponseEntity<>(new UsuarioResponse(), HttpStatus.NOT_FOUND);
}
final var usuarioUpdated = usuarioRepository.save(usuarioEntity);

final var usuarioResponse = ObjectMapperUtil.map(usuarioUpdated, UsuarioResponse.class);

return new ResponseEntity<>(usuarioResponse, HttpStatus.OK);
}

@PreAuthorize("hasAuthority('ESCRITA_USUARIO')")
@DeleteMapping("/usuario/{id}")
public ResponseEntity<MessageResponse> deleteUsuario(@PathVariable Long id){
final var usuarioEntityFound = usuarioRepository.findById(id);
if(usuarioEntityFound.isPresent()){
usuarioRepository.delete(usuarioEntityFound.get());
}else{
return new ResponseEntity<>(MessageResponse.builder()
.message("Usuario não encontrado!")
.date(LocalDateTime.now())
.error(false)
.build(), HttpStatus.NOT_FOUND);
}

return new ResponseEntity<>(MessageResponse.builder()
.message("OK")
.date(LocalDateTime.now())
.error(false)
.build(), HttpStatus.OK);
}
}
9 changes: 9 additions & 0 deletions src/main/java/com/minsait/api/controller/ApiSwagger.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
import com.minsait.api.controller.dto.ClienteRequest;
import com.minsait.api.controller.dto.ClienteResponse;
import com.minsait.api.controller.dto.MessageResponse;
import com.minsait.api.controller.dto.UsuarioResponse;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.responses.ApiResponse;
import io.swagger.v3.oas.annotations.tags.Tag;
Expand Down Expand Up @@ -63,4 +64,12 @@ public interface ApiSwagger {
}
)
public ResponseEntity<ClienteResponse> findById(Long id);

@Operation(summary = "Busca todos os registros", responses = {
@ApiResponse(responseCode = "200", description = "Dados do registro retornados com sucesso"),
@ApiResponse(responseCode = "400", description = "Parâmetros inválidos"),
@ApiResponse(responseCode = "500", description = "Erro interno"),
@ApiResponse(responseCode = "403", description = "Acesso negado"), })
public ResponseEntity<Page<UsuarioResponse>> findAllUsuario(String nome, String login, String email, int page,
int pageSize);
}
20 changes: 10 additions & 10 deletions src/main/java/com/minsait/api/controller/AuthController.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

import com.minsait.api.controller.dto.GetTokenRequest;
import com.minsait.api.controller.dto.GetTokenResponse;
import com.minsait.api.repository.UsuarioEntity;
import com.minsait.api.repository.UsuarioRepository;
import com.minsait.api.sicurity.util.JWTUtil;
import org.springframework.beans.factory.annotation.Autowired;
Expand Down Expand Up @@ -29,17 +30,16 @@ public class AuthController {
JWTUtil jwtUtil;

@PostMapping("/get-token")
public ResponseEntity<GetTokenResponse> getToken(@RequestBody GetTokenRequest request){
if(request.getPassword().equals("12345") && request.getUserName().equals("root")){
public ResponseEntity<GetTokenResponse> getToken(@RequestBody GetTokenRequest request) {
BCryptPasswordEncoder encoder = new BCryptPasswordEncoder();
UsuarioEntity usuario = usuarioRepository.findByLogin(request.getUserName());

if (usuario != null && encoder.matches(request.getPassword(), usuario.getSenha())) {
final ArrayList<String> permissions = new ArrayList<>();
permissions.add("LEITURA_CLIENTE");
permissions.add("ESCRITA_CLIENTE");

final var token =jwtUtil.generateToken("admin", permissions, 5);
return new ResponseEntity<>(GetTokenResponse.builder()
.accessToken(token)
.build(), HttpStatus.OK);
}else{

final var token = jwtUtil.generateToken(usuario.getLogin(), permissions, 5);
return new ResponseEntity<>(GetTokenResponse.builder().accessToken(token).build(), HttpStatus.OK);
} else {
return new ResponseEntity<>(GetTokenResponse.builder().build(), HttpStatus.UNAUTHORIZED);
}
}
Expand Down
35 changes: 35 additions & 0 deletions src/main/java/com/minsait/api/repository/UsuarioEntity.java
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.data.jpa.domain.Specification;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;

import javax.persistence.*;
import javax.persistence.criteria.Predicate;
Expand Down Expand Up @@ -37,4 +38,38 @@ public class UsuarioEntity {

@Column(name = "PERMISSOES")
private String permissoes;


public void setSenhaAndEncode(String senha) {
if (senha != null) {
BCryptPasswordEncoder senhaAndEncoder = new BCryptPasswordEncoder();
senha = senhaAndEncoder.encode(senha);
}

this.senha = senha;
}

public Specification<UsuarioEntity> usuarioEntitySpecification() {
return (root, query, criteriaBuilder) -> {

List<Predicate> predicates = new ArrayList<>();

if (this.getNome() != null) {
predicates.add(criteriaBuilder.like(criteriaBuilder.lower(root.get("nome")),
"%" + this.getNome().trim().toLowerCase() + "%"));
}

if (this.getLogin() != null) {
predicates.add(criteriaBuilder.like(criteriaBuilder.lower(root.get("login")),
"%" + this.getLogin().trim().toLowerCase() + "%"));
}

if (this.getEmail() != null) {
predicates.add(criteriaBuilder.like(criteriaBuilder.lower(root.get("email")),
"%" + this.getEmail().trim().toLowerCase() + "%"));
}

return criteriaBuilder.and(predicates.toArray(new Predicate[0]));
};
}
}
6 changes: 5 additions & 1 deletion src/main/resources/db/migration/V1_0__create_tables.sql
Original file line number Diff line number Diff line change
Expand Up @@ -33,4 +33,8 @@ INSERT INTO API.CLIENTE (ID_CLIENTE, NOME, ENDERECO, EMAIL, TELEFONE) VALUES (AP
INSERT INTO API.CLIENTE (ID_CLIENTE, NOME, ENDERECO, EMAIL, TELEFONE) VALUES (API.SQ_ID_CLIENTE.nextval,'Jão','Rua H, 343','jose14@outlook.com','53 988098432');
INSERT INTO API.CLIENTE (ID_CLIENTE, NOME, ENDERECO, EMAIL, TELEFONE) VALUES (API.SQ_ID_CLIENTE.nextval,'Manolo','Rua M, 342','jose14@outlook.com','53 98098234');
INSERT INTO API.CLIENTE (ID_CLIENTE, NOME, ENDERECO, EMAIL, TELEFONE) VALUES (API.SQ_ID_CLIENTE.nextval,'Wlisses','Rua N, 341','jose14@outlook.com','53 98098234');
INSERT INTO API.CLIENTE (ID_CLIENTE, NOME, ENDERECO, EMAIL, TELEFONE) VALUES (API.SQ_ID_CLIENTE.nextval,'Leonardo','Rua O, 320','jose14@outlook.com','53 980928347');
INSERT INTO API.CLIENTE (ID_CLIENTE, NOME, ENDERECO, EMAIL, TELEFONE) VALUES (API.SQ_ID_CLIENTE.nextval,'Leonardo','Rua O, 320','jose14@outlook.com','53 980928347');


INSERT INTO API.USUARIO (ID_USUARIO, NOME, LOGIN, SENHA, EMAIL, PERMISSOES) VALUES (API.SQ_ID_USUARIO.nextval,'root','root', '789456123','root@gmail.com','LEITURA_USUARIO,ESCRITA_USUARIO,LEITURA_CLIENTE,ESCRITA_CLIENTE');
INSERT INTO API.USUARIO (ID_USUARIO, NOME, LOGIN, SENHA, EMAIL, PERMISSOES) VALUES (API.SQ_ID_USUARIO.nextval,'hoffmann','hoffmann', '7894561230','hoffmann@gmail.com','LEITURA_USUARIO,LEITURA_CLIENTE');