Usando preço num atributo só

This commit is contained in:
Gustavo Barbosa 2025-08-12 00:23:11 -03:00
parent f9efa35351
commit e5599c2985
4 changed files with 75 additions and 8 deletions

View file

@ -9,13 +9,6 @@ export default class Jogo {
) { }
}
export class Preco {
constructor (
public tipo: TipoDePreco,
public valor: number
) { }
}
export type TipoDePreco = 'VALOR' | 'DE_GRACA' | 'DESCONHECIDO' | 'PRESENTE';
export type Preco = 'VALOR' | 'DE_GRACA' | 'DESCONHECIDO' | 'PRESENTE' | number;
export type Estado = 'NOVO' | 'JOGUEI' | 'SATISFEITO' | 'PALHA' | 'ETERNO';

View file

@ -0,0 +1,36 @@
package casa.sotu.organizajogos.api.json;
import java.io.IOException;
import java.math.BigDecimal;
import com.fasterxml.jackson.core.JacksonException;
import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.databind.DeserializationContext;
import com.fasterxml.jackson.databind.deser.std.StdDeserializer;
import casa.sotu.organizajogos.api.modelo.Preco;
import casa.sotu.organizajogos.api.modelo.Preco.TipoDePreco;
public class DesserializadorDePreco extends StdDeserializer<Preco> {
protected DesserializadorDePreco() {
this(Preco.class);
}
protected DesserializadorDePreco(Class<?> vc) {
super(vc);
}
@Override
public Preco deserialize(JsonParser p, DeserializationContext ctxt) throws IOException, JacksonException {
String value = p.getValueAsString();
try {
return new Preco(new BigDecimal(value));
} catch (NumberFormatException e) {
return new Preco(TipoDePreco.valueOf(value.toUpperCase()));
}
}
}

View file

@ -0,0 +1,31 @@
package casa.sotu.organizajogos.api.json;
import java.io.IOException;
import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.databind.SerializerProvider;
import com.fasterxml.jackson.databind.ser.std.StdSerializer;
import casa.sotu.organizajogos.api.modelo.Preco;
import casa.sotu.organizajogos.api.modelo.Preco.TipoDePreco;
public class SerializadorDePreco extends StdSerializer<Preco> {
protected SerializadorDePreco() {
this(Preco.class);
}
protected SerializadorDePreco(Class<Preco> t) {
super(t);
}
@Override
public void serialize(Preco preco, JsonGenerator generator, SerializerProvider provider) throws IOException {
if (preco.tipo() == TipoDePreco.VALOR) {
generator.writeString(preco.valor().toString());
} else {
generator.writeString(preco.tipo().name());
}
}
}

View file

@ -2,7 +2,12 @@ package casa.sotu.organizajogos.api.modelo;
import java.math.BigDecimal;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import casa.sotu.organizajogos.api.excecao.PrecoInvalidoExcecao;
import casa.sotu.organizajogos.api.json.DesserializadorDePreco;
import casa.sotu.organizajogos.api.json.SerializadorDePreco;
import jakarta.persistence.Embeddable;
import jakarta.persistence.EnumType;
import jakarta.persistence.Enumerated;
@ -10,6 +15,8 @@ import jakarta.validation.constraints.Min;
import jakarta.validation.constraints.NotNull;
@Embeddable
@JsonSerialize(using = SerializadorDePreco.class)
@JsonDeserialize(using = DesserializadorDePreco.class)
public record Preco(
@Min(0) BigDecimal valor,
@NotNull @Enumerated(EnumType.STRING) TipoDePreco tipo) {