Tenho a mesma dúvida. Seguem os códigos
@Entity
public class Compra {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
@ManyToOne(cascade = CascadeType.PERSIST)
private Usuario usuario;
private String itens;
private String uuid;
private BigDecimal total;
@PrePersist
public void createUUID() {
this.uuid = UUID.randomUUID().toString();
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public Usuario getUsuario() {
return usuario;
}
public void setUsuario(Usuario usuario) {
this.usuario = usuario;
}
public String getItens() {
return itens;
}
public void setItens(String itens) {
this.itens = itens;
}
public String getUuid() {
return uuid;
}
public void setUuid(String uuid) {
this.uuid = uuid;
}
public BigDecimal getTotal() {
return total;
}
public void setTotal(BigDecimal total) {
this.total = total;
}
}
@Model
public class CheckoutBean {
private Usuario usuario = new Usuario();
@Inject
private CarrinhoCompras carrinho;
@Inject
private FacesContext facesContext;
@Transactional
public void finalizar() {
Compra compra = new Compra();
compra.setUsuario(usuario);
carrinho.finalizar(compra);
String contextName = facesContext.getExternalContext().getRequestContextPath();
HttpServletResponse response = (HttpServletResponse) facesContext.getExternalContext().getResponse();
response.setStatus(HttpServletResponse.SC_TEMPORARY_REDIRECT);
response.setHeader("Location", contextName + "/services/pagamento?uuid=" + compra.getUuid());
}
public Usuario getUsuario() {
return usuario;
}
public void setUsuario(Usuario usuario) {
this.usuario = usuario;
}
}
@Named
@SessionScoped
public class CarrinhoCompras implements Serializable {
private static final long serialVersionUID = 1L;
private Set<CarrinhoItem> itens =
new HashSet<>();
@Inject
private CompraDao compraDao;
public void add(CarrinhoItem item) {
itens.add(item);
}
public List<CarrinhoItem> getItens() {
return new ArrayList<CarrinhoItem>(itens);
}
public BigDecimal getTotal(CarrinhoItem item) {
return item.getLivro().getPreco().multiply(new BigDecimal(item.getQuantidade()));
}
public BigDecimal getTotal() {
BigDecimal total = BigDecimal.ZERO;
for (CarrinhoItem carrinhoItem : itens) {
total = total.add(carrinhoItem.getLivro().getPreco()
.multiply(new BigDecimal(carrinhoItem.getQuantidade())));
}
return total;
}
public Integer getQuantidadeTotal() {
return itens.stream().mapToInt(item -> item.getQuantidade()).sum();
}
public void remover(CarrinhoItem item) {
this.itens.remove(item);
}
public void finalizar(Compra compra) {
compra.setItens(toJson());
compra.setTotal(getTotal());
compraDao.salvar(compra);
// String resultado = pagamentoGateway.pagar(getTotal());
// System.out.println(resultado);
}
public String toJson() {
JsonArrayBuilder builder = Json.createArrayBuilder();
for (CarrinhoItem item : itens) {
builder.add(Json.createObjectBuilder()
.add("titulo", item.getLivro().getTitulo())
.add("preco", item.getLivro().getPreco())
.add("quantidade", item.getQuantidade())
.add("total", getTotal(item)));
}
//return builder.build().toString();
String json = builder.build().toString();
System.out.println(json);
return json;
}
}
Estou com a mesma dúvida porque a resposta anterior foi só pra postar o frontend. No aguardo.