From eb3f317085f0fb48a66fa449cb267d68676613af Mon Sep 17 00:00:00 2001 From: Gustavo Barbosa Date: Sat, 2 Aug 2025 23:38:00 -0300 Subject: [PATCH] =?UTF-8?q?Pre=C3=A7o?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../api/excecao/OrganizaJogosExcecao.java | 20 ++++++++ .../api/excecao/PrecoInvalidoExcecao.java | 18 ++++++++ .../sotu/organizajogos/api/modelo/Preco.java | 46 +++++++++++++++++++ 3 files changed, 84 insertions(+) create mode 100644 src/main/java/casa/sotu/organizajogos/api/excecao/OrganizaJogosExcecao.java create mode 100644 src/main/java/casa/sotu/organizajogos/api/excecao/PrecoInvalidoExcecao.java create mode 100644 src/main/java/casa/sotu/organizajogos/api/modelo/Preco.java diff --git a/src/main/java/casa/sotu/organizajogos/api/excecao/OrganizaJogosExcecao.java b/src/main/java/casa/sotu/organizajogos/api/excecao/OrganizaJogosExcecao.java new file mode 100644 index 0000000..0836473 --- /dev/null +++ b/src/main/java/casa/sotu/organizajogos/api/excecao/OrganizaJogosExcecao.java @@ -0,0 +1,20 @@ +package casa.sotu.organizajogos.api.excecao; + +public class OrganizaJogosExcecao extends RuntimeException { + + public OrganizaJogosExcecao(String mensagem, Throwable causa) { + super(mensagem, causa); + } + + public OrganizaJogosExcecao(Throwable causa) { + super(causa); + } + + public OrganizaJogosExcecao(String mensagem) { + super(mensagem); + } + + public OrganizaJogosExcecao() { + + } +} diff --git a/src/main/java/casa/sotu/organizajogos/api/excecao/PrecoInvalidoExcecao.java b/src/main/java/casa/sotu/organizajogos/api/excecao/PrecoInvalidoExcecao.java new file mode 100644 index 0000000..d7c6d20 --- /dev/null +++ b/src/main/java/casa/sotu/organizajogos/api/excecao/PrecoInvalidoExcecao.java @@ -0,0 +1,18 @@ +package casa.sotu.organizajogos.api.excecao; + +import java.math.BigDecimal; + +import casa.sotu.organizajogos.api.modelo.Preco.TipoDePreco; +import lombok.Getter; + +@Getter +public class PrecoInvalidoExcecao extends OrganizaJogosExcecao { + + private final BigDecimal valor; + private final TipoDePreco tipo; + + public PrecoInvalidoExcecao(BigDecimal valor, TipoDePreco tipo) { + this.tipo = tipo; + this.valor = valor; + } +} diff --git a/src/main/java/casa/sotu/organizajogos/api/modelo/Preco.java b/src/main/java/casa/sotu/organizajogos/api/modelo/Preco.java new file mode 100644 index 0000000..66a2810 --- /dev/null +++ b/src/main/java/casa/sotu/organizajogos/api/modelo/Preco.java @@ -0,0 +1,46 @@ +package casa.sotu.organizajogos.api.modelo; + +import java.math.BigDecimal; + +import casa.sotu.organizajogos.api.excecao.PrecoInvalidoExcecao; +import jakarta.persistence.Embeddable; +import jakarta.persistence.EnumType; +import jakarta.persistence.Enumerated; +import jakarta.validation.constraints.NotNull; +import jakarta.validation.constraints.Min; + +@Embeddable +public record Preco( + @Min(0) BigDecimal valor, + @NotNull @Enumerated(EnumType.STRING) TipoDePreco tipo) { + + public Preco { + if (tipo == TipoDePreco.VALOR) { + if (valor == null) { + throw new PrecoInvalidoExcecao(valor, tipo); + } + } else { + valor = null; + } + } + + public Preco(BigDecimal valor) { + this(valor, TipoDePreco.VALOR); + } + + public Preco(TipoDePreco tipo) { + this(null, tipo); + } + + public enum TipoDePreco { + VALOR, + DE_GRACA, + DESCONHECIDO, + PRESENTE; + } + + public static void main(String[] args) { + Preco preco = new Preco(BigDecimal.valueOf(10000, 2), TipoDePreco.DESCONHECIDO); + System.out.println(preco); + } +}