-1
Whenever I try to create an itemPedido list and use it in a request mapper, it ends up as id and null product. Already trackei with the Debugger and it does not catch the reference with the idProduct that I put in Postman. I’m new at this and I’m sure I’m missing something.
The process would be: Create an Order that has a list of itemPedido with the attributes Product and quantity. But the Product is null.
Request Class:
@Entity
@AllArgsConstructor
@NoArgsConstructor
public class Pedido {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Valid
@ManyToOne
@JoinColumn(name = "id_usuario_solicitante")
private Usuario solicitante;
@Valid
@ManyToOne
@JoinColumn(name = "id_endereco")
private Endereco enderecoEntrega;
@Valid
@ManyToOne
@JoinColumn(name = "id_estabelecimento", nullable = false)
private Estabelecimento estabelecimento;
@Valid
@OneToMany(cascade = {CascadeType.PERSIST, CascadeType.MERGE})
@JoinColumn(name = "id_pedido")
private List<ItemPedido> itensPedido;
@Valid
@Enumerated(EnumType.STRING)
private FormaPagamento formaPagamento;
@Enumerated(EnumType.STRING)
private StatusPedido status;
@JsonFormat(pattern = "dd/MM/yyyy HH:mm:ss")
@DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME)
private LocalDateTime horarioSolicitacao;
@JsonFormat(pattern = "dd/MM/yyyy HH:mm:ss")
@DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME)
private LocalDateTime horarioSaiuParaEntrega;
@JsonFormat(pattern = "dd/MM/yyyy HH:mm:ss")
@DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME)
private LocalDateTime horarioEntrega;
@JsonFormat(pattern = "dd/MM/yyyy HH:mm:ss")
@DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME)
private LocalDateTime horarioCancelamento;
private BigDecimal valorTotal;
@Valid
@ManyToOne
@JoinColumn(name = "id_entregador")
private Entregador entregador;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public Usuario getSolicitante() {
return solicitante;
}
public void setSolicitante(Usuario solicitante) {
this.solicitante = solicitante;
}
public Endereco getEnderecoEntrega() {
return enderecoEntrega;
}
public void setEnderecoEntrega(Endereco enderecoEntrega) {
this.enderecoEntrega = enderecoEntrega;
}
public Estabelecimento getEstabelecimento() {
return estabelecimento;
}
public void setEstabelecimento(Estabelecimento estabelecimento) {
this.estabelecimento = estabelecimento;
}
public List<ItemPedido> getItensPedido() {
return itensPedido;
}
public void setItensPedido(List<ItemPedido> itensPedido) {
this.itensPedido = itensPedido;
}
public FormaPagamento getFormaPagamento() {
return formaPagamento;
}
public void setFormaPagamento(FormaPagamento formaPagamento) {
this.formaPagamento = formaPagamento;
}
public StatusPedido getStatus() {
return status;
}
public void setStatus(StatusPedido status) {
this.status = status;
}
public LocalDateTime getHorarioSolicitacao() {
return horarioSolicitacao;
}
public void setHorarioSolicitacao(LocalDateTime horarioSolicitacao) {
this.horarioSolicitacao = horarioSolicitacao;
}
public LocalDateTime getHorarioSaiuParaEntrega() {
return horarioSaiuParaEntrega;
}
public void setHorarioSaiuParaEntrega(LocalDateTime horarioSaiuParaEntrega) {
this.horarioSaiuParaEntrega = horarioSaiuParaEntrega;
}
public LocalDateTime getHorarioEntrega() {
return horarioEntrega;
}
public void setHorarioEntrega(LocalDateTime horarioEntrega) {
this.horarioEntrega = horarioEntrega;
}
public LocalDateTime getHorarioCancelamento() {
return horarioCancelamento;
}
public void setHorarioCancelamento(LocalDateTime horarioCancelamento) {
this.horarioCancelamento = horarioCancelamento;
}
public BigDecimal getValorTotal() {
return valorTotal;
}
public void setValorTotal(BigDecimal valorTotal) {
this.valorTotal = valorTotal;
}
public Entregador getEntregador() {
return entregador;
}
public void setEntregador(Entregador entregador) {
this.entregador = entregador;
}
}
Itempedido class:
@Entity
public class ItemPedido {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@ManyToOne
@JoinColumn(name = "id_produto")
private Produto produto;
private Integer quantidade;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public Produto getProduto() {
return produto;
}
public void setProduto(Produto produto) {
this.produto = produto;
}
public Integer getQuantidade() {
return quantidade;
}
public void setQuantidade(Integer quantidade) {
this.quantidade = quantidade;
}
}
Class Creatoredorequest:
@Getter
@Setter
@AllArgsConstructor
public class CriarPedidoRequest {
private Long idPedido;
private Long idEstabelecimento;
private Long idUsuarioSolicitante;
private Long idEnderecoEntrega;
private List<ItemPedido> itens;
private FormaPagamento formaPagamento;
private StatusPedido status;
private LocalDateTime horarioSolicitacao;
private LocalDateTime horarioSaiuParaEntrega;
private LocalDateTime horarioEntrega;
private LocalDateTime horarioCancelamento;
private BigDecimal valorTotal;
private Long idEntregador;
private Long idProduto;
private Integer quantidade;
}
Class Creatorservice:
@Service
public class CriarPedidoService {
@Autowired
private PedidoRepository pedidoRepository;
@Autowired
private CriarPedidoMapper criarPedidoMapper;
@Autowired
private ProdutoRepository produtoRepository;
@Autowired
private ItemPedidoRepository itemPedidoRepository;
public Pedido salvarPedido(CriarPedidoRequest request) {
Pedido pedido = criarPedidoMapper.mapear(request);
pedido.setStatus(StatusPedido.EM_PREPARO);
pedido.setHorarioSolicitacao(LocalDateTime.now());
Produto produto = produtoRepository.findById(request.getIdProduto()).get();
List<ItemPedido> itens = new ArrayList<>();
ItemPedido itemPedido = new ItemPedido();
itemPedido.setProduto(produto);
itemPedido.setQuantidade(request.getQuantidade());
itens.add(itemPedido);
pedido.setItensPedido(itens);
return pedidoRepository.save(pedido);
}
}
Criapedidomapper:
@Component
public class CriarPedidoMapper {
@Autowired
private UsuarioRepository usuarioRepository;
@Autowired
private EnderecoRepository enderecoRepository;
@Autowired
private EstabelecimentoRepository estabelecimentoRepository;
@Autowired
private EntregadorRepository entregadorRepository;
@Autowired
private ProdutoRepository produtoRepository;
@Autowired
private ItemPedidoRepository itemPedidoRepository;
public Pedido mapear(CriarPedidoRequest request) {
Usuario usuario = usuarioRepository
.findById(request.getIdUsuarioSolicitante()).get();
Endereco enderecoEntrega = enderecoRepository
.findById(request.getIdEnderecoEntrega()).get();
Estabelecimento estabelecimento = estabelecimentoRepository
.findById(request.getIdEstabelecimento()).get();
Entregador entregador = entregadorRepository
.findById(request.getIdEntregador()).get();
Produto produto = produtoRepository
.findById(request.getIdProduto()).get();
BigDecimal valor = produto.getValor();
Integer quantidade = request.getQuantidade();
BigDecimal valorTotal = BigDecimal.valueOf(quantidade).multiply(valor);
return new Pedido(request.getIdPedido(), usuario, enderecoEntrega, estabelecimento, request.getItens(),
request.getFormaPagamento(), request.getStatus(), request.getHorarioSolicitacao(),
request.getHorarioSaiuParaEntrega(), request.getHorarioEntrega(),
request.getHorarioCancelamento(), valorTotal, entregador);
}
}
Json:
{
"idEstabelecimento": 1,
"idUsuarioSolicitante": 1,
"idEnderecoEntrega": 1,
"formaPagamento": "PIX",
"itens": [
{
"idProduto": 1,
"quantidade": 1
},
{
"idProduto": 2,
"quantidade": 2
}
]
}