Usando preço num atributo só
This commit is contained in:
parent
f9efa35351
commit
e5599c2985
4 changed files with 75 additions and 8 deletions
|
@ -9,13 +9,6 @@ export default class Jogo {
|
||||||
) { }
|
) { }
|
||||||
}
|
}
|
||||||
|
|
||||||
export class Preco {
|
export type Preco = 'VALOR' | 'DE_GRACA' | 'DESCONHECIDO' | 'PRESENTE' | number;
|
||||||
constructor (
|
|
||||||
public tipo: TipoDePreco,
|
|
||||||
public valor: number
|
|
||||||
) { }
|
|
||||||
}
|
|
||||||
|
|
||||||
export type TipoDePreco = 'VALOR' | 'DE_GRACA' | 'DESCONHECIDO' | 'PRESENTE';
|
|
||||||
|
|
||||||
export type Estado = 'NOVO' | 'JOGUEI' | 'SATISFEITO' | 'PALHA' | 'ETERNO';
|
export type Estado = 'NOVO' | 'JOGUEI' | 'SATISFEITO' | 'PALHA' | 'ETERNO';
|
|
@ -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()));
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -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());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -2,7 +2,12 @@ package casa.sotu.organizajogos.api.modelo;
|
||||||
|
|
||||||
import java.math.BigDecimal;
|
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.excecao.PrecoInvalidoExcecao;
|
||||||
|
import casa.sotu.organizajogos.api.json.DesserializadorDePreco;
|
||||||
|
import casa.sotu.organizajogos.api.json.SerializadorDePreco;
|
||||||
import jakarta.persistence.Embeddable;
|
import jakarta.persistence.Embeddable;
|
||||||
import jakarta.persistence.EnumType;
|
import jakarta.persistence.EnumType;
|
||||||
import jakarta.persistence.Enumerated;
|
import jakarta.persistence.Enumerated;
|
||||||
|
@ -10,6 +15,8 @@ import jakarta.validation.constraints.Min;
|
||||||
import jakarta.validation.constraints.NotNull;
|
import jakarta.validation.constraints.NotNull;
|
||||||
|
|
||||||
@Embeddable
|
@Embeddable
|
||||||
|
@JsonSerialize(using = SerializadorDePreco.class)
|
||||||
|
@JsonDeserialize(using = DesserializadorDePreco.class)
|
||||||
public record Preco(
|
public record Preco(
|
||||||
@Min(0) BigDecimal valor,
|
@Min(0) BigDecimal valor,
|
||||||
@NotNull @Enumerated(EnumType.STRING) TipoDePreco tipo) {
|
@NotNull @Enumerated(EnumType.STRING) TipoDePreco tipo) {
|
||||||
|
|
Loading…
Reference in a new issue