Pular para o conteúdo principal

defineModel

defineModel é a função central do backend. A partir de uma definição declarativa, o Core gera automaticamente:

  • Schema Mongoose com timestamps
  • Rotas CRUD paginadas
  • Metadata para o frontend
  • Hooks de domínio (triggers)
  • Entradas de RBAC

Assinatura

const { defineModel } = require("@oondemand/oon-core-back");

defineModel({
name: string, // obrigatório — nome do Model Mongoose
singular?: string, // base do path REST. Default: name.toLowerCase()
schema: object, // campos (fields.*) — obrigatório
options?: object, // opções do Schema Mongoose
crud?: {
enabled?: boolean, // default: true
roles?: {
read?: string[], // roles que podem ler
write?: string[], // roles que podem criar/editar/excluir
},
},
});

Exemplo básico

src/models/Cliente.js
const { defineModel, fields } = require("@oondemand/oon-core-back");

defineModel({
name: "Cliente",
schema: {
nome: fields.string({ required: true, label: "Nome" }),
email: fields.string({ label: "E-mail" }),
telefone: fields.string({ label: "Telefone" }),
ativo: fields.boolean({ label: "Ativo", default: true }),
},
});

Isso expõe automaticamente:

GET    /clientes          → lista paginada
GET /clientes/:id → busca por id
POST /clientes → criação
PUT /clientes/:id → atualização
DELETE /clientes/:id → remoção

Com RBAC

defineModel({
name: "Contrato",
schema: {
titulo: fields.string({ required: true, label: "Título" }),
valor: fields.currency({ label: "Valor" }),
status: fields.enum(["ativo", "encerrado"], { label: "Status" }),
},
crud: {
roles: {
read: ["admin", "gestor", "visualizador"],
write: ["admin", "gestor"],
},
},
});

Com relacionamento

defineModel({
name: "Pedido",
schema: {
numero: fields.string({ required: true, label: "Número" }),
cliente: fields.ref("Cliente", { required: true, label: "Cliente" }),
total: fields.currency({ label: "Total" }),
status: fields.enum(["novo", "confirmado", "entregue"], { label: "Status" }),
dataEntrega: fields.date({ label: "Data de entrega" }),
},
});

Opções do Schema Mongoose

Passe qualquer opção nativa do Mongoose via options:

defineModel({
name: "Log",
schema: { mensagem: fields.string() },
options: {
capped: { size: 1000000 }, // coleção capped
},
});

Rotas geradas

MétodoPathAuthDescrição
GET/:modeloLista com paginação, busca e filtro
GET/:modelo/:idBusca por ID
POST/:modeloCriação
PUT/:modelo/:idAtualização
DELETE/:modelo/:idRemoção

Query params suportados (GET /:modelo)

ParamTipoDescrição
pagenumberPágina (default: 1)
limitnumberItens por página (default: 20)
searchstringBusca nos campos searchable: true
sortstringEx.: nome.asc ou criadoEm.desc
[campo]anyFiltro exato por campo