logologo
Começar
Manual
Desenvolvimento
Plugins
API
Início
English
简体中文
日本語
한국어
Español
Português
Deutsch
Français
Русский
Italiano
Türkçe
Українська
Tiếng Việt
Bahasa Indonesia
ไทย
Polski
Nederlands
Čeština
العربية
עברית
हिन्दी
Svenska
Começar
Manual
Desenvolvimento
Plugins
API
Início
logologo

Início rápido

Visão geral do desenvolvimento de plugins
Escrever o primeiro plugin
Estrutura de diretórios do projeto

Desenvolvimento do lado do servidor

Visão Geral
Plugin
Collections (Tabelas de dados)
Database (Operações de banco de dados)
DataSourceManager (Gerenciamento de fontes de dados)
ResourceManager (Gerenciamento de recursos)
ACL (Controle de acesso)
Middleware
Cache
Event (Evento)
Context (Contexto da requisição)
Migration (Script de atualização)
Logger (Log)
I18n (Internacionalização)
Command (Linha de comando)
CronJobManager (Gerenciamento de tarefas agendadas)
Test (Teste)

Desenvolvimento do lado do cliente

Visão Geral
Plugin
Context (Contexto)
Router (Rotas)
ACL (Controle de acesso)
DataSourceManager (Gerenciamento de fontes de dados)
Resource (Recurso)
Request (Requisição)
Estilos e temas
Logger (Log)
I18n (Internacionalização)
Test (Teste)

Outros

Guia de atualização de plugins
Lista de idiomas
Gerenciamento de dependências
Build
Next PageVisão geral do desenvolvimento de plugins
Aviso de tradução por IA

Esta documentação foi traduzida automaticamente por IA.

#Parâmetros de Configuração da Coleção

export type MigrationRule =
  | 'overwrite'
  | 'skip'
  | 'upsert'
  | 'schema-only'
  | 'insert-ignore';

export interface CollectionOptions {
  name: string;
  title?: string;
  migrationRules?: MigrationRule[];
  inherits?: string[] | string;
  filterTargetKey?: string | string[];
  fields?: FieldOptions[];
  model?: string | ModelStatic<Model>;
  repository?: string | RepositoryType;
  autoGenId?: boolean;
  timestamps?: boolean;
  createdAt?: boolean;
  updatedAt?: boolean;
  deletedAt?: boolean;
  paranoid?: boolean;
  underscored?: boolean;
  indexes?: ModelIndexesOptions[];
}

#name - Nome da Coleção

  • Tipo: string
  • Obrigatório: ✅
  • Descrição: O identificador único para a coleção, que deve ser exclusivo em todo o aplicativo.
  • Exemplo:
{
  name: 'users'  // Coleção de usuários
}

#title - Título da Coleção

  • Tipo: string
  • Obrigatório: ❌
  • Descrição: O título de exibição da coleção, usado para a interface do frontend.
  • Exemplo:
{
  name: 'users',
  title: 'Gerenciamento de Usuários'  // Exibido como "Gerenciamento de Usuários" na interface
}

#migrationRules - Regras de Migração

  • Tipo: MigrationRule[]
  • Obrigatório: ❌
  • Descrição: Regras de processamento para a migração de dados.
  • Exemplo:
{
  name: 'users',
  migrationRules: ['overwrite'],  // Sobrescreve os dados existentes
  fields: [...]
}

#inherits - Herdar Coleções

  • Tipo: string[] | string
  • Obrigatório: ❌
  • Descrição: Permite herdar definições de campos de outras coleções. Suporta herança de uma ou várias coleções.
  • Exemplo:
// Herança única
{
  name: 'admin_users',
  inherits: 'users',  // Herda todos os campos da coleção de usuários
  fields: [
    {
      type: 'string',
      name: 'admin_level'
    }
  ]
}

// Herança múltipla
{
  name: 'super_admin_users',
  inherits: ['users', 'admin_users'],  // Herda de múltiplas coleções
  fields: [...]
}

#filterTargetKey - Chave Alvo para Filtro

  • Tipo: string | string[]
  • Obrigatório: ❌
  • Descrição: A chave alvo usada para filtrar consultas. Suporta uma ou várias chaves.
  • Exemplo:
{
  name: 'user_posts',
  filterTargetKey: 'userId',  // Filtra por ID de usuário
  fields: [...]
}

// Múltiplas chaves de filtro
{
  name: 'user_category_posts',
  filterTargetKey: ['userId', 'categoryId'],  // Filtra por ID de usuário e ID de categoria
  fields: [...]
}

#fields - Definições de Campos

  • Tipo: FieldOptions[]
  • Obrigatório: ❌
  • Valor Padrão: []
  • Descrição: Um array de definições de campos para a coleção. Cada campo inclui informações como tipo, nome e configuração.
  • Exemplo:
{
  name: 'users',
  fields: [
    {
      type: 'string',
      name: 'username',
      unique: true,
      title: 'Nome de Usuário'
    },
    {
      type: 'string',
      name: 'email',
      unique: true,
      title: 'E-mail'
    },
    {
      type: 'password',
      name: 'password',
      title: 'Senha'
    },
    {
      type: 'date',
      name: 'createdAt',
      title: 'Criado Em'
    }
  ]
}

#model - Modelo Personalizado

  • Tipo: string | ModelStatic<Model>
  • Obrigatório: ❌
  • Descrição: Especifique uma classe de modelo Sequelize personalizada, que pode ser o nome da classe ou a própria classe do modelo.
  • Exemplo:
// Especifique o nome da classe do modelo como uma string
{
  name: 'users',
  model: 'UserModel',
  fields: [...]
}

// Use a classe do modelo
import { UserModel } from './models/UserModel';
{
  name: 'users',
  model: UserModel,
  fields: [...]
}

#repository - Repositório Personalizado

  • Tipo: string | RepositoryType
  • Obrigatório: ❌
  • Descrição: Especifique uma classe de repositório personalizada para lidar com a lógica de acesso a dados.
  • Exemplo:
// Especifique o nome da classe do repositório como uma string
{
  name: 'users',
  repository: 'UserRepository',
  fields: [...]
}

// Use a classe do repositório
import { UserRepository } from './repositories/UserRepository';
{
  name: 'users',
  repository: UserRepository,
  fields: [...]
}

#autoGenId - Gerar ID Automaticamente

  • Tipo: boolean
  • Obrigatório: ❌
  • Valor Padrão: true
  • Descrição: Define se um ID de chave primária deve ser gerado automaticamente.
  • Exemplo:
{
  name: 'users',
  autoGenId: true,  // Gera automaticamente o ID da chave primária
  fields: [...]
}

// Desabilita a geração automática de ID (requer especificação manual da chave primária)
{
  name: 'external_data',
  autoGenId: false,
fields: [
  {
    type: 'string',
      name: 'id',
      primaryKey: true
    }
  ]
}

#timestamps - Habilitar Timestamps

  • Tipo: boolean
  • Obrigatório: ❌
  • Valor Padrão: true
  • Descrição: Define se os campos createdAt (data de criação) e updatedAt (data de atualização) devem ser habilitados.
  • Exemplo:
{
  name: 'users',
  timestamps: true,  // Habilita os timestamps
  fields: [...]
}

#createdAt - Campo de Data de Criação

  • Tipo: boolean | string
  • Obrigatório: ❌
  • Valor Padrão: true
  • Descrição: Configuração para o campo createdAt.
  • Exemplo:
{
  name: 'users',
  createdAt: 'created_at',  // Nome personalizado para o campo createdAt
  fields: [...]
}

#updatedAt - Campo de Data de Atualização

  • Tipo: boolean | string
  • Obrigatório: ❌
  • Valor Padrão: true
  • Descrição: Configuração para o campo updatedAt.
  • Exemplo:
{
  name: 'users',
  updatedAt: 'updated_at',  // Nome personalizado para o campo updatedAt
  fields: [...]
}

#deletedAt - Campo de Exclusão Lógica (Soft Delete)

  • Tipo: boolean | string
  • Obrigatório: ❌
  • Valor Padrão: false
  • Descrição: Configuração para o campo de exclusão lógica.
  • Exemplo:
{
  name: 'users',
  deletedAt: 'deleted_at',  // Habilita a exclusão lógica
  paranoid: true,
  fields: [...]
}

#paranoid - Modo de Exclusão Lógica (Soft Delete)

  • Tipo: boolean
  • Obrigatório: ❌
  • Valor Padrão: false
  • Descrição: Define se o modo de exclusão lógica deve ser habilitado.
  • Exemplo:
{
  name: 'users',
  paranoid: true,  // Habilita a exclusão lógica
  deletedAt: 'deleted_at',
  fields: [...]
}

#underscored - Nomenclatura com Underscore

  • Tipo: boolean
  • Obrigatório: ❌
  • Valor Padrão: false
  • Descrição: Define se deve ser usado o estilo de nomenclatura com sublinhado (snake_case) para os nomes das colunas no banco de dados.
  • Exemplo:
{
  name: 'users',
  underscored: true,  // Usa o estilo de nomenclatura com sublinhado
  fields: [...]
}

#indexes - Configuração de Índices

  • Tipo: ModelIndexesOptions[]
  • Obrigatório: ❌
  • Descrição: Configuração de índices do banco de dados.
  • Exemplo:
{
  name: 'users',
  indexes: [
    {
      fields: ['email'],
      unique: true
    },
    {
      fields: ['username', 'status']
    }
  ],
  fields: [...]
}

#Configuração de Parâmetros de Campo

NocoBase suporta vários tipos de campos, todos definidos com base no tipo de união FieldOptions. A configuração do campo inclui propriedades básicas, propriedades específicas do tipo de dados, propriedades de relacionamento e propriedades de renderização de frontend.

#Opções Básicas de Campo

Todos os tipos de campos herdam de BaseFieldOptions, fornecendo capacidades comuns de configuração de campo:

interface BaseFieldOptions<T extends BasicType = BasicType> {
  // Parâmetros comuns
  name?: string;                    // Nome do campo
  hidden?: boolean;                 // Define se deve ocultar
  validation?: ValidationOptions<T>; // Regras de validação

  // Propriedades comuns de campo de coluna
  allowNull?: boolean;
  defaultValue?: any;
  unique?: boolean;
  primaryKey?: boolean;
  autoIncrement?: boolean;
  field?: string;
  comment?: string;

  // Relacionado ao frontend
  title?: string;
  description?: string;
  interface?: string;
  uiSchema?: any;
}

Exemplo:

{
  type: 'string',
  name: 'username',
  allowNull: false,        // Não permite valores nulos
  unique: true,           // Restrição de unicidade
  defaultValue: '',       // Valor padrão: string vazia
  index: true,            // Cria um índice
  comment: 'Nome de login do usuário'    // Comentário do banco de dados
}

#name - Nome do Campo

  • Tipo: string
  • Obrigatório: ❌
  • Descrição: O nome da coluna do campo no banco de dados, que deve ser exclusivo dentro da coleção.
  • Exemplo:
{
  type: 'string',
  name: 'username',  // Nome do campo
  title: 'Nome de Usuário'
}

#hidden - Ocultar Campo

  • Tipo: boolean
  • Valor Padrão: false
  • Descrição: Define se este campo deve ser ocultado por padrão em listas e formulários.
  • Exemplo:
{
  type: 'string',
  name: 'internalId',
  hidden: true,  // Oculta o campo de ID interno
  title: 'ID Interno'
}

#validation - Regras de Validação

interface ValidationOptions<T extends BasicType = BasicType> {
  type: T;                          // Tipo de validação
  rules: FieldValidationRule<T>[];  // Array de regras de validação
  [key: string]: any;              // Outras opções de validação
}

interface FieldValidationRule<T extends BasicType> {
  key: string;                      // Chave da regra
  name: FieldValidationRuleName<T>; // Nome da regra
  args?: {                         // Argumentos da regra
    [key: string]: any;
  };
  paramsType?: 'object';           // Tipo de parâmetro
}
  • Tipo: ValidationOptions<T>
  • Descrição: Use Joi para definir regras de validação no lado do servidor.
  • Exemplo:
{
  type: 'string',
  name: 'email',
  validation: {
    type: 'string',
    rules: [
      { key: 'email', name: 'email' },
      { key: 'required', name: 'required' }
    ]
  }
}

#allowNull - Permitir Valores Nulos

  • Tipo: boolean
  • Valor Padrão: true
  • Descrição: Controla se o banco de dados permite a escrita de valores NULL.
  • Exemplo:
{
  type: 'string',
  name: 'username',
  allowNull: false,  // Não permite valores nulos
  title: 'Nome de Usuário'
}

#defaultValue - Valor Padrão

  • Tipo: any
  • Descrição: O valor padrão para o campo, usado quando um registro é criado sem fornecer um valor para este campo.
  • Exemplo:
{
  type: 'string',
  name: 'status',
  defaultValue: 'draft',  // Padrão para status de rascunho
  title: 'Status'
}

#unique - Restrição de Unicidade

  • Tipo: boolean | string
  • Valor Padrão: false
  • Descrição: Define se o valor deve ser único. Uma string pode ser usada para especificar o nome da restrição.
  • Exemplo:
{
  type: 'string',
  name: 'email',
  unique: true,  // O e-mail deve ser único
  title: 'E-mail'
}

#primaryKey - Chave Primária

  • Tipo: boolean
  • Valor Padrão: false
  • Descrição: Declara este campo como a chave primária.
  • Exemplo:
{
  type: 'integer',
  name: 'id',
  primaryKey: true,  // Define como chave primária
  autoIncrement: true
}

#autoIncrement - Auto-incremento

  • Tipo: boolean
  • Valor Padrão: false
  • Descrição: Habilita o auto-incremento (aplicável apenas a campos numéricos).
  • Exemplo:
{
  type: 'integer',
  name: 'id',
  autoIncrement: true,  // Auto-incrementa
  primaryKey: true
}

#field - Nome da Coluna no Banco de Dados

  • Tipo: string
  • Descrição: Especifica o nome real da coluna no banco de dados (consistente com o field do Sequelize).
  • Exemplo:
{
  type: 'string',
  name: 'userId',
  field: 'user_id',  // Nome da coluna no banco de dados
  title: 'ID do Usuário'
}

#comment - Comentário do Banco de Dados

  • Tipo: string
  • Descrição: Um comentário para o campo do banco de dados, usado para fins de documentação.
  • Exemplo:
{
  type: 'string',
  name: 'username',
  comment: 'Nome de login do usuário, usado para acesso ao sistema',  // Comentário do banco de dados
  title: 'Nome de Usuário'
}

#title - Título de Exibição

  • Tipo: string
  • Descrição: O título de exibição para o campo, comumente usado na interface do frontend.
  • Exemplo:
{
  type: 'string',
  name: 'username',
  title: 'Nome de Usuário',  // Título exibido no frontend
  allowNull: false
}

#description - Descrição do Campo

  • Tipo: string
  • Descrição: Informações descritivas sobre o campo para ajudar os usuários a entenderem sua finalidade.
  • Exemplo:
{
  type: 'string',
  name: 'email',
  title: 'E-mail',
  description: 'Por favor, insira um endereço de e-mail válido',  // Descrição do campo
  validation: {
    type: 'string',
    rules: [{ key: 'email', name: 'email' }]
  }
}

#interface - Componente de Interface

  • Tipo: string
  • Descrição: O componente de interface de frontend recomendado para o campo.
  • Exemplo:
{
  type: 'string',
  name: 'content',
  title: 'Conteúdo',
  interface: 'textarea',  // Recomenda o uso do componente de área de texto
  uiSchema: {
    'x-component': 'Input.TextArea'
  }
}

#Interfaces de Tipos de Campo

#type: 'string' - Campo de String

  • Descrição: Usado para armazenar dados de texto curtos. Suporta limites de comprimento e remoção automática de espaços.
  • Tipo de Banco de Dados: VARCHAR
  • Propriedades Específicas:
    • length: Limite de comprimento da string.
    • trim: Define se deve remover automaticamente espaços iniciais e finais.
interface StringFieldOptions extends BaseColumnFieldOptions<'string'> {
  type: 'string';
  length?: number;    // Limite de comprimento da string
  trim?: boolean;     // Define se deve remover automaticamente espaços iniciais e finais
}

Exemplo:

{
  type: 'string',
  name: 'username',
  title: 'Nome de Usuário',
  length: 50,           // Máximo de 50 caracteres
  trim: true,           // Remove espaços automaticamente
    allowNull: false,
    unique: true,
    validation: {
      type: 'string',
      rules: [
        { key: 'min', name: 'min', args: { limit: 3 } },
      { key: 'max', name: 'max', args: { limit: 20 } }
    ]
  }
}

#type: 'text' - Campo de Texto

  • Descrição: Usado para armazenar dados de texto longos. Suporta diferentes tipos de texto no MySQL.
  • Tipo de Banco de Dados: TEXT, MEDIUMTEXT, LONGTEXT
  • Propriedades Específicas:
    • length: Tipo de comprimento de texto do MySQL (tiny/medium/long).
interface TextFieldOptions extends BaseColumnFieldOptions {
  type: 'text';
  length?: 'tiny' | 'medium' | 'long';  // Tipo de comprimento de texto do MySQL
}

Exemplo:

{
  type: 'text',
  name: 'content',
  title: 'Conteúdo',
  length: 'medium',     // Usa MEDIUMTEXT
  allowNull: true
}

#Tipos Numéricos

#type: 'integer' - Campo de Inteiro

  • Descrição: Usado para armazenar dados inteiros. Suporta auto-incremento e chave primária.
  • Tipo de Banco de Dados: INTEGER
interface IntegerFieldOptions extends BaseColumnFieldOptions<'number'> {
  type: 'integer';
  // Herda todas as opções do tipo INTEGER do Sequelize
}

Exemplo:

  {
    type: 'integer',
  name: 'id',
  title: 'ID',
  primaryKey: true,
  autoIncrement: true,
  allowNull: false
}

#type: 'bigInt' - Campo de Inteiro Grande

  • Descrição: Usado para armazenar dados inteiros grandes, com um intervalo maior que integer.
  • Tipo de Banco de Dados: BIGINT
interface BigIntFieldOptions extends BaseColumnFieldOptions<'number'> {
  type: 'bigInt';
}

Exemplo:

{
  type: 'bigInt',
  name: 'userId',
  title: 'ID do Usuário',
  allowNull: false,
  unique: true
}

#type: 'float' - Campo de Ponto Flutuante (Float)

  • Descrição: Usado para armazenar números de ponto flutuante de precisão simples.
  • Tipo de Banco de Dados: FLOAT
  • Propriedades Específicas:
    • precision: A precisão (número total de dígitos).
    • scale: O número de casas decimais.
interface FloatFieldOptions extends BaseColumnFieldOptions<'number'> {
  type: 'float';
  precision?: number;  // Precisão
  scale?: number;      // Casas decimais
}

Exemplo:

{
  type: 'float',
  name: 'score',
  title: 'Pontuação',
  precision: 5,
  scale: 2,
  allowNull: true,
  defaultValue: 0.0
}

#type: 'double' - Campo de Ponto Flutuante de Dupla Precisão (Double)

  • Descrição: Usado para armazenar números de ponto flutuante de dupla precisão, que possuem maior precisão que float.
  • Tipo de Banco de Dados: DOUBLE
  • Propriedades Específicas:
    • precision: A precisão (número total de dígitos).
    • scale: O número de casas decimais.
interface DoubleFieldOptions extends BaseColumnFieldOptions<'number'> {
  type: 'double';
  precision?: number;
  scale?: number;
}

Exemplo:

{
  type: 'double',
    name: 'price',
      title: 'Preço',
  precision: 10,
  scale: 2,
  allowNull: false,
  defaultValue: 0.00
}

#type: 'real' - Campo de Número Real

  • Descrição: Usado para armazenar números reais; dependente do banco de dados.
  • Tipo de Banco de Dados: REAL
  • Propriedades Específicas:
    • precision: A precisão (número total de dígitos).
    • scale: O número de casas decimais.
interface RealFieldOptions extends BaseColumnFieldOptions<'number'> {
  type: 'real';
  precision?: number;
  scale?: number;
}

Exemplo:

{
  type: 'real',
  name: 'rate',
  title: 'Taxa',
  precision: 8,
  scale: 4,
  allowNull: true
}

#type: 'decimal' - Campo Decimal

  • Descrição: Usado para armazenar números decimais exatos, adequado para cálculos financeiros.
  • Tipo de Banco de Dados: DECIMAL
  • Propriedades Específicas:
    • precision: A precisão (número total de dígitos).
    • scale: O número de casas decimais.
interface DecimalFieldOptions extends BaseColumnFieldOptions<'number'> {
  type: 'decimal';
  precision?: number;  // Precisão (número total de dígitos)
  scale?: number;      // Casas decimais
}

Exemplo:

{
  type: 'decimal',
  name: 'amount',
  title: 'Valor',
  precision: 10,
  scale: 2,
  allowNull: false,
  defaultValue: 0.00,
  validation: {
    type: 'number',
    rules: [
      { key: 'min', name: 'min', args: { limit: 0 } }
    ]
  }
}

#Tipos Booleanos

#type: 'boolean' - Campo Booleano

  • Descrição: Usado para armazenar valores verdadeiro/falso, tipicamente para estados de ligado/desligado.
  • Tipo de Banco de Dados: BOOLEAN ou TINYINT(1)
interface BooleanFieldOptions extends BaseColumnFieldOptions<'boolean'> {
  type: 'boolean';
}

Exemplo:

{
  type: 'boolean',
  name: 'isActive',
  title: 'Está Ativo',
  defaultValue: true,
  allowNull: false
}

#type: 'radio' - Campo de Rádio

  • Descrição: Usado para armazenar um único valor selecionado, tipicamente para escolhas binárias.
  • Tipo de Banco de Dados: BOOLEAN ou TINYINT(1)
interface RadioFieldOptions extends BaseColumnFieldOptions<'boolean'> {
  type: 'radio';
}

Exemplo:

{
  type: 'radio',
  name: 'isDefault',
  title: 'É Padrão',
  defaultValue: false,
  allowNull: false
}

#Tipos de Data e Hora

#type: 'date' - Campo de Data

  • Descrição: Usado para armazenar dados de data sem informações de tempo.
  • Tipo de Banco de Dados: DATE
  • Propriedades Específicas:
    • timezone: Define se deve incluir informações de fuso horário.
interface DateFieldOptions extends BaseColumnFieldOptions<'date'> {
  type: 'date';
  timezone?: boolean;  // Define se deve incluir informações de fuso horário
}

Exemplo:

{
  type: 'date',
  name: 'birthday',
  title: 'Aniversário',
  allowNull: true,
  timezone: false
}

#type: 'time' - Campo de Hora

  • Descrição: Usado para armazenar dados de hora sem informações de data.
  • Tipo de Banco de Dados: TIME
  • Propriedades Específicas:
    • timezone: Define se deve incluir informações de fuso horário.
interface TimeFieldOptions extends BaseColumnFieldOptions<'time'> {
  type: 'time';
  timezone?: boolean;
}

Exemplo:

{
  type: 'time',
  name: 'startTime',
  title: 'Hora de Início',
  allowNull: false,
  timezone: false
}

#type: 'datetimeTz' - Campo de Data e Hora com Fuso Horário

  • Descrição: Usado para armazenar dados de data e hora com informações de fuso horário.
  • Tipo de Banco de Dados: TIMESTAMP WITH TIME ZONE
  • Propriedades Específicas:
    • timezone: Define se deve incluir informações de fuso horário.
interface DatetimeTzFieldOptions extends BaseColumnFieldOptions<'datetime'> {
  type: 'datetimeTz';
  timezone?: boolean;
}

Exemplo:

{
  type: 'datetimeTz',
  name: 'createdAt',
  title: 'Criado Em',
  allowNull: false,
  timezone: true,
  defaultToCurrentTime: true,
  onUpdateToCurrentTime: true
}

#type: 'datetimeNoTz' - Campo de Data e Hora sem Fuso Horário

  • Descrição: Usado para armazenar dados de data e hora sem informações de fuso horário.
  • Tipo de Banco de Dados: TIMESTAMP ou DATETIME
  • Propriedades Específicas:
    • timezone: Define se deve incluir informações de fuso horário.
interface DatetimeNoTzFieldOptions extends BaseColumnFieldOptions<'datetime'> {
  type: 'datetimeNoTz';
  timezone?: boolean;
}

Exemplo:

{
  type: 'datetimeNoTz',
  name: 'updatedAt',
  title: 'Atualizado Em',
  allowNull: false,
  timezone: false,
  defaultToCurrentTime: true,
  onUpdateToCurrentTime: true
}

#type: 'dateOnly' - Campo Somente de Data

  • Descrição: Usado para armazenar dados contendo apenas a data, sem a hora.
  • Tipo de Banco de Dados: DATE
  • Exemplo:
{
  type: 'dateOnly',
  name: 'publishDate',
  title: 'Data de Publicação',
  allowNull: true
}

#type: 'unixTimestamp' - Campo de Timestamp Unix

  • Descrição: Usado para armazenar dados de timestamp Unix.
  • Tipo de Banco de Dados: BIGINT
  • Propriedades Específicas:
    • epoch: O tempo de época (epoch time).
interface UnixTimestampFieldOptions extends BaseColumnFieldOptions<'unixTimestamp'> {
  type: 'unixTimestamp';
  epoch?: number;  // Tempo de época
}

Exemplo:

{
  type: 'unixTimestamp',
  name: 'lastLoginAt',
  title: 'Último Login Em',
  allowNull: true,
  epoch: 0
}

#Tipos JSON

#type: 'json' - Campo JSON

  • Descrição: Usado para armazenar dados no formato JSON, suportando estruturas de dados complexas.
  • Tipo de Banco de Dados: JSON ou TEXT
  • Exemplo:
{
  type: 'json',
  name: 'metadata',
  title: 'Metadados',
  allowNull: true,
  defaultValue: {}
}

#type: 'jsonb' - Campo JSONB

  • Descrição: Usado para armazenar dados no formato JSONB (específico do PostgreSQL), que suporta indexação e consulta.
  • Tipo de Banco de Dados: JSONB (PostgreSQL)
  • Exemplo:
{
  type: 'jsonb',
  name: 'config',
  title: 'Configuração',
  allowNull: true,
  defaultValue: {}
}

#Tipos de Array

#type: 'array' - Campo de Array

  • Descrição: Usado para armazenar dados de array, suportando vários tipos de elementos.
  • Tipo de Banco de Dados: JSON ou ARRAY
  • Propriedades Específicas:
    • dataType: Tipo de armazenamento (json/array).
    • elementType: Tipo de elemento (STRING/INTEGER/BOOLEAN/JSON).
interface ArrayFieldOptions extends BaseColumnFieldOptions<'array'> {
  type: 'array';
  dataType?: 'json' | 'array';  // Tipo de armazenamento
  elementType?: 'STRING' | 'INTEGER' | 'BOOLEAN' | 'JSON'; // Tipo de elemento
}

Exemplo:

{
  type: 'array',
  name: 'tags',
  title: 'Tags',
  dataType: 'json',
  elementType: 'STRING',
  allowNull: true,
  defaultValue: []
}

#type: 'set' - Campo de Conjunto (Set)

  • Descrição: Usado para armazenar dados de conjunto, que é semelhante a um array, mas com uma restrição de unicidade.
  • Tipo de Banco de Dados: JSON ou ARRAY
  • Propriedades Específicas:
    • dataType: Tipo de armazenamento (json/array).
    • elementType: Tipo de elemento (STRING/INTEGER/BOOLEAN/JSON).
interface SetFieldOptions extends BaseColumnFieldOptions<'set'> {
  type: 'set';
  dataType?: 'json' | 'array';
  elementType?: 'STRING' | 'INTEGER' | 'BOOLEAN' | 'JSON';
}

Exemplo:

{
  type: 'set',
  name: 'categories',
      title: 'Categorias',
  dataType: 'json',
  elementType: 'STRING',
  allowNull: true,
  defaultValue: []
}

#Tipos de Identificadores

#type: 'uuid' - Campo UUID

  • Descrição: Usado para armazenar identificadores únicos no formato UUID.
  • Tipo de Banco de Dados: UUID ou VARCHAR(36)
  • Propriedades Específicas:
    • autoFill: Preenche o valor automaticamente.
interface UUIDFieldOptions extends BaseColumnFieldOptions<'uuid'> {
  type: 'uuid';
  autoFill?: boolean;  // Preenchimento automático
}

Exemplo:

{
  type: 'uuid',
  name: 'id',
  title: 'ID',
  autoFill: true,
  allowNull: false,
  primaryKey: true
}

#type: 'nanoid' - Campo Nanoid

  • Descrição: Usado para armazenar identificadores únicos curtos no formato Nanoid.
  • Tipo de Banco de Dados: VARCHAR
  • Propriedades Específicas:
    • size: Comprimento do ID.
    • customAlphabet: Conjunto de caracteres personalizado.
    • autoFill: Preenche o valor automaticamente.
interface NanoidFieldOptions extends BaseColumnFieldOptions<'nanoid'> {
  type: 'nanoid';
  size?: number;  // Comprimento do ID
  customAlphabet?: string;  // Conjunto de caracteres personalizado
  autoFill?: boolean;
}

Exemplo:

{
  type: 'nanoid',
  name: 'shortId',
  title: 'ID Curto',
  size: 12,
  customAlphabet: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789',
  autoFill: true,
  allowNull: false,
  unique: true
}

#type: 'uid' - Campo UID Personalizado

  • Descrição: Usado para armazenar identificadores únicos em um formato personalizado.
  • Tipo de Banco de Dados: VARCHAR
  • Propriedades Específicas:
    • prefix: Um prefixo para o identificador.
    • pattern: Um padrão de validação.
interface UidFieldOptions extends BaseColumnFieldOptions<'uid'> {
  type: 'uid';
  prefix?: string;  // Prefixo
  pattern?: string; // Padrão de validação
}

Exemplo:

{
  type: 'uid',
  name: 'code',
  title: 'Código',
  prefix: 'USR_',
  pattern: '^[A-Za-z0-9_][A-Za-z0-9_-]*$',
  allowNull: false,
  unique: true
}

#type: 'snowflakeId' - Campo ID Snowflake

  • Descrição: Usado para armazenar identificadores únicos gerados pelo algoritmo Snowflake.
  • Tipo de Banco de Dados: BIGINT
  • Exemplo:
{
  type: 'snowflakeId',
  name: 'snowflakeId',
  title: 'ID Snowflake',
  allowNull: false,
  unique: true
}

#Campos Funcionais

#type: 'password' - Campo de Senha

  • Descrição: Usado para armazenar dados de senha criptografados.
  • Tipo de Banco de Dados: VARCHAR
  • Propriedades Específicas:
    • length: Comprimento do hash.
    • randomBytesSize: Tamanho dos bytes aleatórios.
interface PasswordFieldOptions extends BaseColumnFieldOptions<'password'> {
  type: 'password';
  length?: number;  // Comprimento do hash
  randomBytesSize?: number;  // Tamanho dos bytes aleatórios
}

Exemplo:

{
  type: 'password',
  name: 'password',
  title: 'Senha',
  length: 64,
  randomBytesSize: 8,
  allowNull: false,
  hidden: true
}

#type: 'encryption' - Campo de Criptografia

  • Descrição: Usado para armazenar dados sensíveis criptografados.
  • Tipo de Banco de Dados: VARCHAR
  • Exemplo:
{
  type: 'encryption',
  name: 'secret',
  title: 'Segredo',
  allowNull: true,
  hidden: true
}

#type: 'virtual' - Campo Virtual

  • Descrição: Usado para armazenar dados virtuais calculados que não são armazenados no banco de dados.
  • Tipo de Banco de Dados: Nenhum (campo virtual)
  • Exemplo:
{
  type: 'virtual',
  name: 'fullName',
  title: 'Nome Completo'
}

#type: 'context' - Campo de Contexto

  • Descrição: Usado para ler dados do contexto de execução (por exemplo, informações do usuário atual).
  • Tipo de Banco de Dados: Determinado por dataType.
  • Propriedades Específicas:
    • dataIndex: Caminho do índice de dados.
    • dataType: Tipo de dados.
    • createOnly: Define apenas na criação.
interface ContextFieldOptions extends BaseFieldOptions {
  type: 'context';
  dataIndex?: string;  // Caminho do índice de dados
  dataType?: string;   // Tipo de dados
  createOnly?: boolean; // Define apenas na criação
}

Exemplo:

{
  type: 'context',
  name: 'currentUserId',
  title: 'ID do Usuário Atual',
  dataIndex: 'user.id',
  dataType: 'integer',
  createOnly: true,
  allowNull: false
}

#Campos de Relacionamento

#type: 'belongsTo' - Relacionamento Pertence A

  • Descrição: Representa um relacionamento de muitos para um, onde o registro atual pertence a outro registro.
  • Tipo de Banco de Dados: Campo de chave estrangeira
  • Propriedades Específicas:
    • target: Nome da coleção alvo.
    • foreignKey: Nome do campo de chave estrangeira.
    • targetKey: Nome do campo de chave alvo na coleção alvo.
    • onDelete: Ação em cascata ao excluir.
    • onUpdate: Ação em cascata ao atualizar.
    • constraints: Define se deve habilitar restrições de chave estrangeira.
interface BelongsToFieldOptions extends BaseRelationFieldOptions {
  type: 'belongsTo';
  target: string;  // Nome da coleção alvo
  foreignKey?: string;  // Nome do campo de chave estrangeira
  targetKey?: string;   // Nome do campo de chave alvo na coleção alvo
  onDelete?: 'CASCADE' | 'SET NULL' | 'RESTRICT' | 'NO ACTION';
  onUpdate?: 'CASCADE' | 'SET NULL' | 'RESTRICT' | 'NO ACTION';
  constraints?: boolean;  // Define se deve habilitar restrições de chave estrangeira
}

Exemplo:

  {
    type: 'belongsTo',
  name: 'author',
  title: 'Autor',
  target: 'users',
  foreignKey: 'authorId',
  targetKey: 'id',
  onDelete: 'SET NULL',
  onUpdate: 'CASCADE',
  constraints: false
}

#type: 'hasOne' - Relacionamento Tem Um

  • Descrição: Representa um relacionamento de um para um, onde o registro atual possui um registro relacionado.
  • Tipo de Banco de Dados: Campo de chave estrangeira
  • Propriedades Específicas:
    • target: Nome da coleção alvo.
    • foreignKey: Nome do campo de chave estrangeira.
    • sourceKey: Nome do campo de chave de origem na coleção de origem.
    • onDelete: Ação em cascata ao excluir.
    • onUpdate: Ação em cascata ao atualizar.
    • constraints: Define se deve habilitar restrições de chave estrangeira.
interface HasOneFieldOptions extends BaseRelationFieldOptions {
  type: 'hasOne';
  target: string;
  foreignKey?: string;
  sourceKey?: string;  // Nome do campo de chave de origem
  onDelete?: 'CASCADE' | 'SET NULL' | 'RESTRICT' | 'NO ACTION';
  onUpdate?: 'CASCADE' | 'SET NULL' | 'RESTRICT' | 'NO ACTION';
  constraints?: boolean;
}

Exemplo:

{
  type: 'hasOne',
  name: 'profile',
  title: 'Perfil do Usuário',
  target: 'user_profiles',
  foreignKey: 'userId',
  sourceKey: 'id',
  onDelete: 'CASCADE',
  onUpdate: 'CASCADE',
  constraints: false
}

#type: 'hasMany' - Relacionamento Tem Muitos

  • Descrição: Representa um relacionamento de um para muitos, onde o registro atual possui vários registros relacionados.
  • Tipo de Banco de Dados: Campo de chave estrangeira
  • Propriedades Específicas:
    • target: Nome da coleção alvo.
    • foreignKey: Nome do campo de chave estrangeira.
    • sourceKey: Nome do campo de chave de origem na coleção de origem.
    • sortBy: Campo para ordenação.
    • sortable: Define se o campo é ordenável.
    • onDelete: Ação em cascata ao excluir.
    • onUpdate: Ação em cascata ao atualizar.
    • constraints: Define se deve habilitar restrições de chave estrangeira.
interface HasManyFieldOptions extends BaseRelationFieldOptions {
  type: 'hasMany';
  target: string;
  foreignKey?: string;
  sourceKey?: string;
  sortBy?: string[];  // Campo para ordenação
  sortable?: boolean; // Define se é ordenável
  onDelete?: 'CASCADE' | 'SET NULL' | 'RESTRICT' | 'NO ACTION';
  onUpdate?: 'CASCADE' | 'SET NULL' | 'RESTRICT' | 'NO ACTION';
  constraints?: boolean;
}

Exemplo:

  {
    type: 'hasMany',
  name: 'posts',
  title: 'Publicações',
  target: 'articles',
  foreignKey: 'authorId',
  sourceKey: 'id',
    sortBy: ['createdAt'],
  sortable: true,
  onDelete: 'CASCADE',
  onUpdate: 'CASCADE',
  constraints: false
}

#type: 'belongsToMany' - Relacionamento Pertence A Muitos

  • Descrição: Representa um relacionamento de muitos para muitos, conectando duas coleções através de uma tabela de junção.
  • Tipo de Banco de Dados: Tabela de junção
  • Propriedades Específicas:
    • target: Nome da coleção alvo.
    • through: Nome da tabela de junção.
    • foreignKey: Nome do campo de chave estrangeira.
    • otherKey: A outra chave estrangeira na tabela de junção.
    • sourceKey: Nome do campo de chave de origem na coleção de origem.
    • targetKey: Nome do campo de chave alvo na coleção alvo.
    • onDelete: Ação em cascata ao excluir.
    • onUpdate: Ação em cascata ao atualizar.
    • constraints: Define se deve habilitar restrições de chave estrangeira.
interface BelongsToManyFieldOptions extends BaseRelationFieldOptions {
  type: 'belongsToMany';
  target: string;
  through: string;  // Nome da tabela de junção
  foreignKey?: string;
  otherKey?: string;  // A outra chave estrangeira na tabela de junção
  sourceKey?: string;
  targetKey?: string;
  onDelete?: 'CASCADE' | 'SET NULL' | 'RESTRICT' | 'NO ACTION';
  onUpdate?: 'CASCADE' | 'SET NULL' | 'RESTRICT' | 'NO ACTION';
  constraints?: boolean;
}

Exemplo:

{
  type: 'belongsToMany',
  name: 'tags',
  title: 'Tags',
  target: 'article_tags',
  through: 'article_tag_relations',
  foreignKey: 'articleId',
  otherKey: 'tagId',
  sourceKey: 'id',
  targetKey: 'id',
  onDelete: 'CASCADE',
  onUpdate: 'CASCADE',
  constraints: false
}