1
resposta

Spring JDK 11 - como fazer meu controller passar por duas classe antes do model?

Em uma é meu model - produtos a outra faz a conta de desconto de produtos. Quando envio o Postman vai direto e salva o valor sem fazer a conta.

@Data
@Entity
@Table(name = "produtos")
public class ProdutosModel {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long codigo;

    @Column(length = 50, nullable = false)
    private String nome;

    @Column(length = 10, nullable = false)
    private Double valor;

    @Column(name = "porcentagem_produto")
    private Double porcentagemDesconto;

    @Column(name = "desconto_produto")
    private Double descontoProduto;
}

public class DescontoProdutos {
    ProdutosModel produtosModel = new ProdutosModel();
    public void desconto(Double descontoProduto, Double porcentagemDesconto){
        Double resultado = descontoProduto - porcentagemDesconto;
        produtosModel.setDescontoProduto(resultado);
    }
}
1 resposta

Olá Crispim,

Pelo que entendi, você deseja que o desconto seja aplicado automaticamente ao produto antes de ser salvo no banco de dados, correto?. Para fazer isso, você pode usar um método setter personalizado para o campo descontoProduto na sua classe ProdutosModel. Aqui está um exemplo de como você pode fazer isso:

@Data
@Entity
@Table(name = "produtos")
public class ProdutosModel {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long codigo;

    @Column(length = 50, nullable = false)
    private String nome;

    @Column(length = 10, nullable = false)
    private Double valor;

    @Column(name = "porcentagem_produto")
    private Double porcentagemDesconto;

    @Column(name = "desconto_produto")
    private Double descontoProduto;

    public void setPorcentagemDesconto(Double porcentagemDesconto) {
        this.porcentagemDesconto = porcentagemDesconto;
        calcularDesconto();
    }

    private void calcularDesconto() {
        if (valor != null && porcentagemDesconto != null) {
            this.descontoProduto = valor - (valor * porcentagemDesconto / 100);
        }
    }
}

Neste exemplo, sempre que você definir a porcentagem de desconto, o desconto do produto será recalculado automaticamente. Note que o método calcularDesconto é privado, pois ele não deve ser chamado diretamente. Ele é chamado automaticamente sempre que você define a porcentagem de desconto.

Espero que isso ajude! Se você tiver mais perguntas, fique à vontade para perguntar.