Skip to content

Commit 777ed7a

Browse files
Refatorando para simplificar o projeto: - refatorado nome das entidades (Sistema é a entidade que lança gastos e Usuário é o cliente que faz as outras coisas) - refatorado lançamento de gastos
1 parent 45b9213 commit 777ed7a

21 files changed

+202
-188
lines changed

testeSantanderWay/src/main/java/br/com/testesantanderway/config/security/AutenticacaoService.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package br.com.testesantanderway.config.security;
22

3-
import br.com.testesantanderway.modelo.Cliente;
3+
import br.com.testesantanderway.modelo.Sistema;
44
import br.com.testesantanderway.repository.ClienteRepository;
55
import org.springframework.beans.factory.annotation.Autowired;
66
import org.springframework.security.core.userdetails.UserDetails;
@@ -18,7 +18,7 @@ public class AutenticacaoService implements UserDetailsService {
1818

1919
@Override
2020
public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
21-
Optional<Cliente> clientePorEmail = repository.findByEmail(username);
21+
Optional<Sistema> clientePorEmail = repository.findByEmail(username);
2222

2323
if (clientePorEmail.isPresent()){
2424
return clientePorEmail.get();

testeSantanderWay/src/main/java/br/com/testesantanderway/config/security/AutenticacaoViaTokenFilter.java

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package br.com.testesantanderway.config.security;
22

3-
import br.com.testesantanderway.modelo.Cliente;
3+
import br.com.testesantanderway.modelo.Sistema;
44
import br.com.testesantanderway.repository.ClienteRepository;
55
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
66
import org.springframework.security.core.context.SecurityContextHolder;
@@ -12,6 +12,9 @@
1212
import java.io.IOException;
1313

1414
public class AutenticacaoViaTokenFilter extends OncePerRequestFilter {
15+
16+
private static final String BEARER = "Bearer ";
17+
1518
private ServicoDeToken tokenService;
1619
private ClienteRepository repository;
1720

@@ -23,7 +26,7 @@ public AutenticacaoViaTokenFilter(ServicoDeToken tokenService, ClienteRepository
2326
@Override
2427
protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response,
2528
FilterChain filterChain) throws ServletException, IOException {
26-
String token = recuperarToken(request);
29+
String token = AutenticacaoViaTokenFilter.recuperarToken(request);
2730
boolean valido = tokenService.isTokenValido(token);
2831
if (valido){
2932
autenticarCliente(token);
@@ -33,19 +36,19 @@ protected void doFilterInternal(HttpServletRequest request, HttpServletResponse
3336
}
3437

3538
private void autenticarCliente(String token) {
36-
String idCliente = tokenService.getIdCliente(token);
37-
Cliente cliente = repository.findById(idCliente).get();
38-
UsernamePasswordAuthenticationToken authentication = new UsernamePasswordAuthenticationToken(cliente,
39-
null, cliente.getAuthorities());
39+
String idCliente = tokenService.getCodigo(token);
40+
Sistema sistema = repository.findById(idCliente).get();
41+
UsernamePasswordAuthenticationToken authentication = new UsernamePasswordAuthenticationToken(sistema,
42+
null, sistema.getAuthorities());
4043
SecurityContextHolder.getContext().setAuthentication(authentication);
4144
}
4245

43-
private String recuperarToken(HttpServletRequest request) {
46+
public static String recuperarToken(HttpServletRequest request) {
4447
String token = request.getHeader("Authorization");
45-
if (token == null || token.isEmpty() || !token.startsWith("Bearer ")){
48+
if (token == null || token.isEmpty() || !token.startsWith(BEARER)){
4649
return null;
4750
}
4851

49-
return token.substring(7, token.length());
52+
return token.substring(BEARER.length());
5053
}
5154
}

testeSantanderWay/src/main/java/br/com/testesantanderway/config/security/ServicoDeToken.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package br.com.testesantanderway.config.security;
22

3-
import br.com.testesantanderway.modelo.Cliente;
3+
import br.com.testesantanderway.modelo.Sistema;
44
import io.jsonwebtoken.Claims;
55
import io.jsonwebtoken.Jwts;
66
import io.jsonwebtoken.SignatureAlgorithm;
@@ -18,13 +18,13 @@ public class ServicoDeToken {
1818
private String secret;
1919

2020
public String gerarToken(Authentication authentication) {
21-
Cliente clienteLogado = (Cliente) authentication.getPrincipal();
21+
Sistema sistemaLogado = (Sistema) authentication.getPrincipal();
2222
Date hoje = new Date();
2323
Date dataExpiracao = new Date(hoje.getTime() + Long.parseLong(expiracao));
2424

2525
return Jwts.builder()
2626
.setIssuer("Api teste way")
27-
.setSubject(clienteLogado.getCodigoCliente())
27+
.setSubject(sistemaLogado.getCodigo())
2828
.setIssuedAt(hoje)
2929
.setExpiration(dataExpiracao)
3030
.signWith(SignatureAlgorithm.HS256, secret).compact();
@@ -40,7 +40,7 @@ public boolean isTokenValido(String token){
4040
}
4141
}
4242

43-
public String getIdCliente(String token){
43+
public String getCodigo(String token){
4444
Claims claims = Jwts.parser().setSigningKey(this.secret).parseClaimsJws(token).getBody();
4545
return claims.getSubject();
4646
}

testeSantanderWay/src/main/java/br/com/testesantanderway/controller/ClienteController.java

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
import br.com.testesantanderway.controller.form.ClienteForm;
55
import br.com.testesantanderway.dto.ClienteDTO;
66
import br.com.testesantanderway.dto.DetalheClienteDTO;
7-
import br.com.testesantanderway.modelo.Cliente;
7+
import br.com.testesantanderway.modelo.Sistema;
88
import br.com.testesantanderway.repository.ClienteRepository;
99
import org.springframework.beans.factory.annotation.Autowired;
1010
import org.springframework.cache.annotation.CacheEvict;
@@ -35,11 +35,11 @@ public Page<ClienteDTO> dadosLoginCliente(@RequestParam(required = false) String
3535
direction = Sort.Direction.ASC) Pageable paginacao) {
3636

3737
if (nomeCliente == null || nomeCliente.isEmpty()) {
38-
Page<Cliente> clientes = clienteRepository.findAll(paginacao);
38+
Page<Sistema> clientes = clienteRepository.findAll(paginacao);
3939

4040
return ClienteDTO.converter(clientes);
4141
} else {
42-
Page<Cliente> clientes = clienteRepository.findByNomeCliente(nomeCliente, paginacao);
42+
Page<Sistema> clientes = clienteRepository.findByNomeCliente(nomeCliente, paginacao);
4343

4444
return ClienteDTO.converter(clientes);
4545
}
@@ -48,16 +48,16 @@ public Page<ClienteDTO> dadosLoginCliente(@RequestParam(required = false) String
4848
@PostMapping
4949
public ResponseEntity<ClienteDTO> cadastrarCliente(@RequestBody @Valid ClienteForm form, UriComponentsBuilder uriBuilder) {
5050
form.setSenha(new BCryptPasswordEncoder().encode(form.getSenha()));
51-
Cliente clientesCadastro = form.converter();
51+
Sistema clientesCadastro = form.converter();
5252
clienteRepository.save(clientesCadastro);
53-
URI uri = uriBuilder.path("/{id}").buildAndExpand(clientesCadastro.getCodigoCliente()).toUri();
53+
URI uri = uriBuilder.path("/{id}").buildAndExpand(clientesCadastro.getCodigo()).toUri();
5454

5555
return ResponseEntity.created(uri).body(new ClienteDTO(clientesCadastro));
5656
}
5757

5858
@GetMapping("/{id}")
5959
public ResponseEntity<DetalheClienteDTO> detalhe(@PathVariable String id) {
60-
Optional<Cliente> cliente = clienteRepository.findById(id);
60+
Optional<Sistema> cliente = clienteRepository.findById(id);
6161
if (cliente.isPresent()) {
6262
return ResponseEntity.ok(new DetalheClienteDTO(cliente.get()));
6363
}
@@ -68,10 +68,10 @@ public ResponseEntity<DetalheClienteDTO> detalhe(@PathVariable String id) {
6868
@PutMapping("/{id}")
6969
@CacheEvict(value = "listaDeCliente", allEntries = true)
7070
public ResponseEntity<ClienteDTO> atualizar(@PathVariable String id, @RequestBody @Valid AtualizacaoClienteForm form) {
71-
Optional<Cliente> optional = clienteRepository.findById(id);
71+
Optional<Sistema> optional = clienteRepository.findById(id);
7272
if (optional.isPresent()) {
73-
Cliente cliente = form.atualizar(id, clienteRepository);
74-
return ResponseEntity.ok(new ClienteDTO(cliente));
73+
Sistema sistema = form.atualizar(id, clienteRepository);
74+
return ResponseEntity.ok(new ClienteDTO(sistema));
7575
}
7676

7777
return ResponseEntity.notFound().build();
@@ -80,7 +80,7 @@ public ResponseEntity<ClienteDTO> atualizar(@PathVariable String id, @RequestBod
8080
@DeleteMapping("/{id}")
8181
@CacheEvict(value = "listaDeCliente", allEntries = true)
8282
public ResponseEntity<?> remover(@PathVariable String id) {
83-
Optional<Cliente> optional = clienteRepository.findById(id);
83+
Optional<Sistema> optional = clienteRepository.findById(id);
8484
if (optional.isPresent()) {
8585
clienteRepository.deleteById(id);
8686
return ResponseEntity.ok().build();

testeSantanderWay/src/main/java/br/com/testesantanderway/controller/GastosController.java

Lines changed: 24 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package br.com.testesantanderway.controller;
22

3+
import br.com.testesantanderway.config.security.AutenticacaoViaTokenFilter;
4+
import br.com.testesantanderway.config.security.ServicoDeToken;
35
import br.com.testesantanderway.controller.form.GastoForm;
46
import br.com.testesantanderway.dto.DetalheGastosDTO;
57
import br.com.testesantanderway.dto.GastosDTO;
@@ -13,22 +15,24 @@
1315
import org.springframework.data.web.PageableDefault;
1416
import org.springframework.http.ResponseEntity;
1517
import org.springframework.web.bind.annotation.*;
16-
import org.springframework.web.util.UriComponentsBuilder;
1718

18-
import java.net.URI;
19+
import javax.servlet.http.HttpServletRequest;
1920
import java.util.Optional;
2021

2122
@RestController
2223
@RequestMapping("/gastos")
2324
public class GastosController {
25+
@Autowired
26+
private ServicoDeToken servicoDeToken;
27+
2428
@Autowired
2529
private GastoRepository gastoRepository;
2630

2731
@GetMapping
2832
@Cacheable(value = "gastoDeCliente")
2933
public Page<GastosDTO> listagemDeGastos(@RequestParam(required = false) String descricao,
3034
@PageableDefault(sort = "codigoCliente",
31-
direction = Sort.Direction.ASC) Pageable paginacao) {
35+
direction = Sort.Direction.ASC) Pageable paginacao) {
3236

3337
if (descricao == null || descricao.isEmpty()) {
3438
Page<Gasto> gastos = gastoRepository.findAll(paginacao);
@@ -41,14 +45,13 @@ public Page<GastosDTO> listagemDeGastos(@RequestParam(required = false) String d
4145
}
4246
}
4347

44-
@PostMapping
45-
public ResponseEntity<GastosDTO> lancarGastosCartao(@RequestBody GastoForm form, UriComponentsBuilder uriBuilder) {
46-
Gasto gastoCadastro = form.converter();
47-
//TODO pesquisar nos gastos pela descrição se existe algim já categrizado e aplica essa categoria
48-
gastoRepository.save(gastoCadastro);
49-
URI uri = uriBuilder.path("/{id}").buildAndExpand(gastoCadastro.getCodigoGasto()).toUri();
50-
51-
return ResponseEntity.created(uri).body(new GastosDTO(gastoCadastro));
48+
//TODO permitir apenas SISTEMA lançar gasto
49+
@PutMapping
50+
public ResponseEntity lancarGastosCartao(HttpServletRequest request, @RequestBody GastoForm form) {
51+
Gasto gasto = form.converter(servicoDeToken.getCodigo(AutenticacaoViaTokenFilter.recuperarToken(request)));
52+
integrarCategoria(gasto);
53+
gastoRepository.save(gasto);
54+
return ResponseEntity.ok().build();
5255
}
5356

5457
@GetMapping("/{dataCriacao}")
@@ -66,8 +69,17 @@ public ResponseEntity<DetalheGastosDTO> listagemDeGastosPorData(@PathVariable St
6669
// public ResponseEntity<GastosDTO> categorizarGastos(@RequestBody CategoriaForm form, UriComponentsBuilder uriBuilder) {
6770
// Gasto categoriaCadastro = form.converter();
6871
// gastoRepository.save(categoriaCadastro);
69-
// URI uri = uriBuilder.path("/{id}").buildAndExpand(categoriaCadastro.getCodigoGasto()).toUri();
72+
// URI uri = uriBuilder.path("/{id}").buildAndExpand(categoriaCadastro.getCodigo()).toUri();
7073
//
7174
// return ResponseEntity.created(uri).body(new GastosDTO(categoriaCadastro));
7275
// }
76+
77+
private void integrarCategoria(Gasto gasto){
78+
if(gasto.getCategoria() == null){
79+
Optional<String> categoria = gastoRepository.findCategoriaByDescricao(gasto.getDescricao());
80+
if(categoria.isPresent()){
81+
gasto.setCategoria(categoria.get());
82+
}
83+
}
84+
}
7385
}

testeSantanderWay/src/main/java/br/com/testesantanderway/controller/UsuarioController.java

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -8,11 +8,6 @@
88
import br.com.testesantanderway.repository.UsuarioRepository;
99
import org.springframework.beans.factory.annotation.Autowired;
1010
import org.springframework.cache.annotation.CacheEvict;
11-
import org.springframework.cache.annotation.Cacheable;
12-
import org.springframework.data.domain.Page;
13-
import org.springframework.data.domain.Pageable;
14-
import org.springframework.data.domain.Sort;
15-
import org.springframework.data.web.PageableDefault;
1611
import org.springframework.http.ResponseEntity;
1712
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
1813
import org.springframework.web.bind.annotation.*;
@@ -50,7 +45,7 @@ public ResponseEntity<UsuarioDTO> cadastrarUsuario(@RequestBody @Valid UsuarioFo
5045
form.setSenha(new BCryptPasswordEncoder().encode(form.getSenha()));
5146
Usuario usuarioCadastro = form.converter();
5247
usuarioRepository.save(usuarioCadastro);
53-
URI uri = uriBuilder.path("/{id}").buildAndExpand(usuarioCadastro.getCodigoUsuario()).toUri();
48+
URI uri = uriBuilder.path("/{id}").buildAndExpand(usuarioCadastro.getCodigo()).toUri();
5449

5550
return ResponseEntity.created(uri).body(new UsuarioDTO(usuarioCadastro));
5651
}

testeSantanderWay/src/main/java/br/com/testesantanderway/controller/form/AtualizacaoClienteForm.java

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package br.com.testesantanderway.controller.form;
22

3-
import br.com.testesantanderway.modelo.Cliente;
3+
import br.com.testesantanderway.modelo.Sistema;
44
import br.com.testesantanderway.repository.ClienteRepository;
55
import org.hibernate.validator.constraints.Length;
66
import javax.validation.constraints.NotEmpty;
@@ -15,9 +15,9 @@ public class AtualizacaoClienteForm {
1515
public AtualizacaoClienteForm() {
1616
}
1717

18-
public AtualizacaoClienteForm(Cliente cliente) {
19-
this.email = cliente.getEmail();
20-
this.senha = cliente.getSenha();
18+
public AtualizacaoClienteForm(Sistema sistema) {
19+
this.email = sistema.getEmail();
20+
this.senha = sistema.getSenha();
2121
}
2222

2323
public String getEmail() {
@@ -36,14 +36,14 @@ public void setSenha(String senha) {
3636
this.senha = senha;
3737
}
3838

39-
public Cliente atualizar(String id, ClienteRepository clienteRepository) {
40-
Cliente cliente = clienteRepository.findById(id).orElseThrow(() -> new RuntimeException("Não encontrado"));
39+
public Sistema atualizar(String id, ClienteRepository clienteRepository) {
40+
Sistema sistema = clienteRepository.findById(id).orElseThrow(() -> new RuntimeException("Não encontrado"));
4141

42-
cliente.setEmail(this.email);
43-
cliente.setSenha(this.senha);
42+
sistema.setEmail(this.email);
43+
sistema.setSenha(this.senha);
4444

45-
clienteRepository.save(cliente);
45+
clienteRepository.save(sistema);
4646

47-
return cliente;
47+
return sistema;
4848
}
4949
}

testeSantanderWay/src/main/java/br/com/testesantanderway/controller/form/ClienteForm.java

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package br.com.testesantanderway.controller.form;
22

3-
import br.com.testesantanderway.modelo.Cliente;
3+
import br.com.testesantanderway.modelo.Sistema;
44
import org.hibernate.validator.constraints.Length;
55
import javax.validation.constraints.NotEmpty;
66
import javax.validation.constraints.NotNull;
@@ -18,11 +18,11 @@ public class ClienteForm {
1818
public ClienteForm() {
1919
}
2020

21-
public ClienteForm(Cliente cliente){
22-
this.nomeCliente = cliente.getNomeCliente();
23-
this.email = cliente.getEmail();
24-
this.senha = cliente.getSenha();
25-
this.dataCriacao = cliente.getDataCriacao();
21+
public ClienteForm(Sistema sistema){
22+
this.nomeCliente = sistema.getNome();
23+
this.email = sistema.getEmail();
24+
this.senha = sistema.getSenha();
25+
this.dataCriacao = sistema.getDataCriacao();
2626
}
2727

2828
public String getNomeCliente() {
@@ -57,7 +57,7 @@ public void LocalDateTime (LocalDateTime dataCriacao) {
5757
this.dataCriacao = dataCriacao;
5858
}
5959

60-
public Cliente converter() {
61-
return new Cliente(nomeCliente, email, senha, dataCriacao);
60+
public Sistema converter() {
61+
return new Sistema(nomeCliente, email, senha, dataCriacao);
6262
}
6363
}

testeSantanderWay/src/main/java/br/com/testesantanderway/controller/form/GastoForm.java

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,11 @@ public class GastoForm {
1313
@NotNull
1414
@NotEmpty
1515
private Double valor;
16+
@NotNull
17+
@NotEmpty
18+
private String codigoUsuario;
19+
@NotNull
20+
@NotEmpty
1621
private LocalDateTime dataCriacao;
1722

1823
public GastoForm() {
@@ -22,6 +27,7 @@ public GastoForm(Gasto gasto) {
2227
this.descricao = gasto.getDescricao();
2328
this.valor = gasto.getValor();
2429
this.dataCriacao = gasto.getDataCriacao();
30+
this.codigoUsuario = gasto.getCodigoUsuario();
2531
}
2632

2733
public String getDescricao() {
@@ -48,7 +54,15 @@ public void setDataCriacao(LocalDateTime dataCriacao) {
4854
this.dataCriacao = dataCriacao;
4955
}
5056

51-
public Gasto converter() {
52-
return new Gasto(descricao, valor, dataCriacao);
57+
public String getCodigoUsuario() {
58+
return codigoUsuario;
59+
}
60+
61+
public void setCodigoUsuario(String codigoUsuario) {
62+
this.codigoUsuario = codigoUsuario;
63+
}
64+
65+
public Gasto converter(String codigoSistema) {
66+
return new Gasto(descricao, valor, codigoSistema, codigoUsuario, dataCriacao);
5367
}
5468
}

testeSantanderWay/src/main/java/br/com/testesantanderway/controller/form/UsuarioForm.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ public UsuarioForm() {
2222
}
2323

2424
public UsuarioForm(Usuario usuario) {
25-
this.nomeUsuario = usuario.getNomeUsuario();
25+
this.nomeUsuario = usuario.getNome();
2626
this.email = usuario.getEmail();
2727
this.senha = usuario.getSenha();
2828
this.dataCriacao = usuario.getDataCriacao();

0 commit comments

Comments
 (0)