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); + } +}