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 {
|
||||
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';
|
|
@ -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 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) {
|
||||
|
|
Loading…
Reference in a new issue