Skip to content

Commit

Permalink
feat: cadastro de aviso de viagem
Browse files Browse the repository at this point in the history
  • Loading branch information
almeidawilliam committed May 12, 2021
1 parent a0ae5e5 commit 3f29e83
Show file tree
Hide file tree
Showing 6 changed files with 136 additions and 19 deletions.
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package br.com.zupacademy.william.proposta.proposta.cartao;

import br.com.zupacademy.william.proposta.proposta.cartao.aviso.Aviso;
import br.com.zupacademy.william.proposta.proposta.cartao.aviso.AvisoViagem;
import br.com.zupacademy.william.proposta.proposta.cartao.bloqueio.Bloqueio;
import br.com.zupacademy.william.proposta.proposta.cartao.carteira.Carteira;
import br.com.zupacademy.william.proposta.proposta.cartao.parcela.Parcela;
Expand Down Expand Up @@ -34,7 +34,7 @@ public class Cartao {

@OneToMany(cascade = CascadeType.ALL)
@JoinColumn(name = "idCartao")
private List<Aviso> avisos;
private List<AvisoViagem> avisosViagem;

@OneToMany(cascade = CascadeType.ALL)
@JoinColumn(name = "idCartao")
Expand Down Expand Up @@ -104,4 +104,8 @@ public void bloquear(Bloqueio bloqueio) {
public boolean estaBloqueado() {
return this.estadoCartao.equals(EstadoCartao.BLOQUEADO);
}

public void associarAvisoDeViagem(AvisoViagem avisoViagem) {
this.avisosViagem.add(avisoViagem);
}
}

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
package br.com.zupacademy.william.proposta.proposta.cartao.aviso;

import org.hibernate.annotations.CreationTimestamp;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import java.time.LocalDate;

@Entity
public class AvisoViagem {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String destino;
private LocalDate dataTermino;

@CreationTimestamp
private LocalDate instanteAviso;

private String ipRequisicaoDeBloqueio;
private String userAgent;

private Long idCartao;

public AvisoViagem(String destino, LocalDate dataTermino, String ipRequisicaoDeBloqueio, String userAgent) {
this.destino = destino;
this.dataTermino = dataTermino;
this.ipRequisicaoDeBloqueio = ipRequisicaoDeBloqueio;
this.userAgent = userAgent;
}

@Deprecated
public AvisoViagem() {
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
package br.com.zupacademy.william.proposta.proposta.cartao.aviso;

import br.com.zupacademy.william.proposta.exception.EntidadeNaoEncontradaException;
import br.com.zupacademy.william.proposta.proposta.cartao.Cartao;
import br.com.zupacademy.william.proposta.proposta.cartao.CartaoRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;

import javax.servlet.http.HttpServletRequest;
import javax.transaction.Transactional;
import javax.validation.Valid;
import java.util.HashMap;

@RestController
@RequestMapping("/cartoes/{id}/avisos-viagem")
public class AvisoViagemController {

@Autowired
private CartaoRepository cartaoRepository;

@Autowired
private HttpServletRequest request;

@Transactional
@PostMapping
public ResponseEntity criar(@PathVariable Long id,
@RequestBody @Valid AvisoViagemRequest avisoViagemRequest,
@RequestHeader HashMap<String, String> headers) {
Cartao cartao = cartaoRepository.findById(id)
.orElseThrow(() -> new EntidadeNaoEncontradaException(String.format("Não existe um cartão com id %d", id)));

String ipClienteDaRequisicao = request.getRemoteAddr();
String userAgent = headers.get("user-agent");

AvisoViagem novoAvisoDeViagem = avisoViagemRequest.toModel(ipClienteDaRequisicao, userAgent);
cartao.associarAvisoDeViagem(novoAvisoDeViagem);

return ResponseEntity.ok().build();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
package br.com.zupacademy.william.proposta.proposta.cartao.aviso;

import com.fasterxml.jackson.annotation.JsonFormat;

import javax.validation.constraints.Future;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.time.LocalDate;

public class AvisoViagemRequest {

@NotBlank
private String destino;

@NotNull
@Future
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "dd/MM/yyyy")
private LocalDate dataTermino;

public AvisoViagemRequest() {
}

public void setDestino(String destino) {
this.destino = destino;
}

public void setDataTermino(LocalDate dataTermino) {
this.dataTermino = dataTermino;
}

public String getDestino() {
return destino;
}

public LocalDate getDataTermino() {
return dataTermino;
}

public AvisoViagem toModel(String ipClienteDaRequisicao, String userAgent) {
return new AvisoViagem(this.getDestino(), this.getDataTermino(), ipClienteDaRequisicao, userAgent);
}
}
10 changes: 9 additions & 1 deletion src/main/resources/messages.properties
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,18 @@ NotBlank={0} é obrigatório(a)
NotNull={0} é obrigatório(a)
Email={0} deve ser um e-mail válido
Positive={0} deve ser maior que 0
Future={0} deve ser uma data futura

#PropostaRequest
propostaRequest.documento=Documento do dono da proposta
propostaRequest.email=Email do dono da proposta
propostaRequest.nome=Nome do dono da proposta
propostaRequest.endereco=Endereço do dono da proposta
propostaRequest.salario=Salário do dono da proposta
propostaRequest.salario=Salário do dono da proposta

#BiometriaRequest
biometriaRequest.fingerPrint=Biometria do cartão

#AvisoViagemRequest
avisoViagemRequest.destino=Destino do aviso de viagem
avisoViagemRequest.dataTermino=Data de término do aviso de viagem

0 comments on commit 3f29e83

Please sign in to comment.