Skip to content

Commit

Permalink
bloqueio do cartão v1.1
Browse files Browse the repository at this point in the history
  • Loading branch information
giovnnvm committed Aug 3, 2021
1 parent 221bed2 commit e7c905d
Show file tree
Hide file tree
Showing 3 changed files with 7 additions and 27 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@

import br.com.zupacademy.giovannimoratto.desafioproposta.cartao.CartaoModel;
import br.com.zupacademy.giovannimoratto.desafioproposta.cartao.CartaoRepository;
import br.com.zupacademy.giovannimoratto.desafioproposta.feign.CartoesFeignClient;
import br.com.zupacademy.giovannimoratto.desafioproposta.proposta.PropostaController;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
Expand All @@ -15,7 +14,6 @@
import javax.transaction.Transactional;
import java.util.Optional;

import static br.com.zupacademy.giovannimoratto.desafioproposta.Bloqueio.BloqueioStatus.FALHA;
import static org.springframework.http.HttpStatus.NOT_FOUND;
import static org.springframework.http.HttpStatus.UNPROCESSABLE_ENTITY;

Expand All @@ -33,8 +31,6 @@ public class BloqueioController {
private CartaoRepository cartaoRepository;
@Autowired
private BloqueioRepository bloqueioRepository;
@Autowired
private CartoesFeignClient api;

@PostMapping("/cartoes/bloqueio/{id}")
@Transactional
Expand All @@ -43,34 +39,30 @@ public ResponseEntity <?> bloquearCartao(@PathVariable Long id,
HttpServletRequest request) {

CartaoModel cartao = verificaSeCartaoExiste(id);
logger.info("Cartão encontrado");
verificaSeCartaoJaEstaBloqueado(cartao);
solicitaBloqueio(cartao);

logger.info("Nenhum bloqueio ativo no cartão");
BloqueioModel cartaoBloqueado = new BloqueioModel(request.getRemoteAddr(), userAgent,
cartao.getNumero(), cartao);

logger.info("Requisição de bloqueio convertida em classe de dominio");
bloqueioRepository.save(cartaoBloqueado);
logger.info("Requisição de bloqueio persistida no banco de dados");
return ResponseEntity.ok().build();
}

private CartaoModel verificaSeCartaoExiste(Long id) {
logger.info("Buscando cartão por ID...");
return cartaoRepository.findById(id).orElseThrow(() ->
new ResponseStatusException(NOT_FOUND, "Este cartão não existe"));
}

private void verificaSeCartaoJaEstaBloqueado(CartaoModel cartao) {
logger.info("Verificando se o cartão já está bloqueado...");
Optional <BloqueioModel> optionalBloqueio = bloqueioRepository.findByNumero(cartao.getNumero());
if (optionalBloqueio.isPresent()) {
throw new ResponseStatusException(UNPROCESSABLE_ENTITY, "Cartão já bloqueado");
throw new ResponseStatusException(UNPROCESSABLE_ENTITY, "Cartão já está bloqueado");
}
}

private void solicitaBloqueio(CartaoModel cartao) {
BloqueioResponse resultado = api.solicitacaoBloqueio(
cartao.getNumero(), new BloqueioRequest("api-proposta"));
if (resultado.getResultado().equals(FALHA)) {
throw new ResponseStatusException(UNPROCESSABLE_ENTITY, "Falha no sistema");
}
}
}

Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,6 @@ public class BloqueioModel {
private String userAgent;
@CreationTimestamp
private LocalDateTime bloqueadoEm;
private boolean ativo;
@NotNull
@OneToOne(cascade = CascadeType.MERGE, fetch = FetchType.EAGER)
private CartaoModel cartao;
Expand All @@ -41,7 +40,6 @@ public BloqueioModel(String ipCliente, String userAgent, String numero, CartaoMo
this.userAgent = userAgent;
this.numero = numero;
this.cartao = cartao;
this.ativo = true;
}

public Long getId() {
Expand All @@ -68,8 +66,4 @@ public CartaoModel getCartao() {
return cartao;
}

public boolean isAtivo() {
return ativo;
}

}
Original file line number Diff line number Diff line change
@@ -1,11 +1,8 @@
package br.com.zupacademy.giovannimoratto.desafioproposta.feign;

import br.com.zupacademy.giovannimoratto.desafioproposta.Bloqueio.BloqueioRequest;
import br.com.zupacademy.giovannimoratto.desafioproposta.Bloqueio.BloqueioResponse;
import br.com.zupacademy.giovannimoratto.desafioproposta.cartao.AnaliseRequest;
import br.com.zupacademy.giovannimoratto.desafioproposta.cartao.CartaoResponse;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;

Expand All @@ -19,7 +16,4 @@ public interface CartoesFeignClient {
@PostMapping("/api/cartoes")
CartaoResponse associaCartao(@RequestBody AnaliseRequest request);

@PostMapping("/api/cartoes/{id}/bloqueios")
BloqueioResponse solicitacaoBloqueio(@PathVariable("id") String id, @RequestBody BloqueioRequest request);

}

0 comments on commit e7c905d

Please sign in to comment.