fields
O objeto fields exportado pelo oon-core-back fornece helpers tipados para declarar schemas. Cada helper gera um descriptor Mongoose + um bloco __meta que o Core usa para gerar a metadata do frontend.
const { fields } = require("@oondemand/oon-core-back");
Referência completa
fields.string(opts?)
fields.string({
required?: boolean, // default: false
default?: string,
label?: string, // exibido no frontend
searchable?: boolean, // inclui na busca full-text. Default: true
})
fields.number(opts?)
fields.number({
required?: boolean,
default?: number,
label?: string,
})
fields.boolean(opts?)
fields.boolean({
required?: boolean,
default?: boolean, // default: false
label?: string,
})
fields.date(opts?)
fields.date({
required?: boolean,
default?: Date | string,
label?: string,
})
fields.ref(modelName, opts?)
Referência a outro Model (ObjectId com populate automático).
fields.ref("Cliente", {
required?: boolean,
label?: string,
})
fields.enum(values, opts?)
fields.enum(["ativo", "inativo", "suspenso"], {
required?: boolean,
default?: string,
label?: string,
})
fields.currency(opts?)
Valor monetário (Number ≥ 0). Renderizado como moeda no frontend.
fields.currency({
required?: boolean,
default?: number, // default: 0
label?: string,
})
fields.currencyCode(opts?)
Código ISO 4217 de 3 letras (ex.: "BRL", "USD", "EUR").
fields.currencyCode({
required?: boolean,
default?: string, // default: "BRL"
label?: string,
})
fields.currencyConverted(opts?)
Valor convertido para uma moeda base (calculado pelo módulo currencies).
fields.currencyConverted({
base?: string, // moeda base. Default: "BRL"
default?: number, // default: 0
label?: string,
})
Exemplo completo
src/models/Cotacao.js
const { defineModel, fields } = require("@oondemand/oon-core-back");
defineModel({
name: "Cotacao",
schema: {
fornecedor: fields.ref("Fornecedor", { required: true, label: "Fornecedor" }),
descricao: fields.string({ required: true, label: "Descrição" }),
valor: fields.currency({ required: true, label: "Valor" }),
moeda: fields.currencyCode({ label: "Moeda" }),
valorEmBRL: fields.currencyConverted({ base: "BRL", label: "Valor em BRL" }),
status: fields.enum(["pendente", "aprovada", "recusada"], {
default: "pendente",
label: "Status",
}),
dataValidade: fields.date({ label: "Válido até" }),
},
});
Usando Mongoose puro (escape hatch)
Se precisar de um tipo que fields não cobre, use o descriptor Mongoose diretamente. O Core inclui o campo mas não gera metadata rica para ele (kind = "raw"):
schema: {
tags: [{ type: String }], // array simples
metadata: { type: Map, of: String },
}