Campos (fields)
As factories de campo do oon-core-back e os tipos equivalentes do manifesto de domínio, com metadata para o frontend.
fields produz descritores compatíveis com Mongoose e com a metadata do Core. Cada helper retorna { ...mongoose, __meta }; o bloco __meta alimenta /core/models sem vazar para o schema final.
const { fields } = require("@oondemand/oon-core-back");
Referência
| Factory | Tipo Mongoose | Metadata | Observações |
|---|---|---|---|
fields.string(opts) |
String (com trim) |
string |
searchable é true por padrão; use searchable: false para excluir da busca |
fields.number(opts) |
Number |
number |
— |
fields.boolean(opts) |
Boolean |
boolean |
default padrão false |
fields.date(opts) |
Date |
date |
— |
fields.ref(model, opts) |
ObjectId com ref |
ref |
Renderizado como seletor pesquisável no frontend |
fields.enum(values, opts) |
String com enum |
enum (options) |
— |
fields.currency(opts) |
Number, min: 0 |
currency |
default padrão 0 |
fields.currencyCode(opts) |
String ISO 4217 maiúsculo |
currencyCode |
Padrão "BRL" |
fields.currencyConverted(opts) |
Number, min: 0 |
currencyConverted |
base (padrão "BRL") |
Opções comuns: required, default e label.
schema: {
nome: fields.string({ required: true, label: "Nome" }),
observacao: fields.string({ label: "Observação", searchable: false }),
quantidade: fields.number({ required: true, label: "Quantidade" }),
ativo: fields.boolean({ default: true, label: "Ativo" }),
vencimento: fields.date({ label: "Vencimento" }),
cliente: fields.ref("Cliente", { required: true, label: "Cliente" }),
etapa: fields.enum(["Aberto", "Concluído"], { default: "Aberto", label: "Etapa" }),
valor: fields.currency({ label: "Valor" }),
moeda: fields.currencyCode({ label: "Moeda" }),
valorBrl: fields.currencyConverted({ base: "BRL", label: "Valor em BRL" }),
}
Você também pode usar uma definição Mongoose crua; ela aparece na metadata com kind: "raw" e não ganha renderização especializada.
Tipos no manifesto de domínio
No central.domain.json, use kind:
kind |
Opções específicas |
|---|---|
string |
minLength, maxLength |
number |
min, max, computed |
boolean |
— |
date |
— |
ref |
ref (nome da model relacionada) |
enum |
values (textos únicos e não vazios) |
currency |
min, max, computed |
currencyCode |
— |
currencyConverted |
base (ISO de três letras), computed |
Opções comuns: label, description, required, default, readonly, searchable, unique, index.
{
"fields": {
"titulo": { "kind": "string", "required": true, "maxLength": 120, "label": "Título" },
"cliente": { "kind": "ref", "ref": "Cliente", "required": true },
"etapa": { "kind": "enum", "values": ["Aberto", "Fechado"], "default": "Aberto" },
"valor": { "kind": "currency", "min": 0 },
"statusIntegracao": { "kind": "string", "readonly": true }
}
}
Como o frontend usa a metadata
kind |
Controle no formulário | Coluna |
|---|---|---|
string |
texto | texto |
number |
numérico | número |
boolean |
switch/checkbox | sim/não |
date |
data | data |
ref |
seletor pesquisável com busca no backend | rótulo do registro |
enum |
select | badge |
currency |
moeda | moeda |
Campos readonly e computed aparecem como somente leitura e não são enviados pelo formulário. Overrides pontuais de campo (checkbox com valores de domínio, grupos, opções remotas) estão em Formulários e overrides.