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

Inicio rápido

Resumen de desarrollo de plugins
Escribir el primer plugin
Estructura de directorios del proyecto

Desarrollo del lado del servidor

Visión general
Plugin
Colecciones
Operaciones de base de datos
Gestión de fuentes de datos
Gestión de recursos
Control de permisos (ACL)
Middleware
Caché
Evento
Contexto de solicitud
Migración (Script de actualización)
Registro (Logger)
Internacionalización (I18n)
Línea de comandos (Command)
Gestión de tareas programadas
Pruebas

Desarrollo del lado del cliente

Visión general
Plugin
Contexto
Enrutador (Router)
Control de permisos (ACL)
Gestión de fuentes de datos
Recurso
Solicitud
Estilos y temas
Registro (Logger)
Internacionalización (I18n)
Pruebas

Otros

Guía de actualización de plugins
Lista de idiomas
Gestión de dependencias
Compilación
Next PageResumen de desarrollo de plugins
Aviso de traducción por IA

Esta documentación ha sido traducida automáticamente por IA.

#Parámetros de configuración de la colección

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 - Nombre de la colección

  • Tipo: string
  • Obligatorio: ✅
  • Descripción: Es el identificador único para la colección, y debe ser único en toda la aplicación.
  • Ejemplo:
{
  name: 'users'  // Colección de usuarios
}

#title - Título de la colección

  • Tipo: string
  • Obligatorio: ❌
  • Descripción: El título que se muestra para la colección, utilizado en la interfaz de usuario.
  • Ejemplo:
{
  name: 'users',
  title: 'Gestión de Usuarios'  // Se mostrará como "Gestión de Usuarios" en la interfaz
}

#migrationRules - Reglas de migración

  • Tipo: MigrationRule[]
  • Obligatorio: ❌
  • Descripción: Define las reglas de procesamiento para la migración de datos.
  • Ejemplo:
{
  name: 'users',
  migrationRules: ['overwrite'],  // Sobrescribe los datos existentes
  fields: [...]
}

#inherits - Heredar colecciones

  • Tipo: string[] | string
  • Obligatorio: ❌
  • Descripción: Permite heredar definiciones de campos de otras colecciones. Admite la herencia de una o varias colecciones.
  • Ejemplo:
// Herencia única
{
  name: 'admin_users',
  inherits: 'users',  // Hereda todos los campos de la colección 'users'
  fields: [
    {
      type: 'string',
      name: 'admin_level'
    }
  ]
}

// Herencia múltiple
{
  name: 'super_admin_users',
  inherits: ['users', 'admin_users'],  // Hereda de múltiples colecciones
  fields: [...]
}

#filterTargetKey - Clave de destino para filtrar

  • Tipo: string | string[]
  • Obligatorio: ❌
  • Descripción: La clave de destino que se utiliza para filtrar consultas. Admite una o varias claves.
  • Ejemplo:
{
  name: 'user_posts',
  filterTargetKey: 'userId',  // Filtra por ID de usuario
  fields: [...]
}

// Múltiples claves de filtro
{
  name: 'user_category_posts',
  filterTargetKey: ['userId', 'categoryId'],  // Filtra por ID de usuario y ID de categoría
  fields: [...]
}

#fields - Definiciones de campos

  • Tipo: FieldOptions[]
  • Obligatorio: ❌
  • Valor predeterminado: []
  • Descripción: Un array de definiciones de campos para la colección. Cada campo incluye información como el tipo, el nombre y la configuración.
  • Ejemplo:
{
  name: 'users',
  fields: [
    {
      type: 'string',
      name: 'username',
      unique: true,
      title: 'Nombre de usuario'
    },
    {
      type: 'string',
      name: 'email',
      unique: true,
      title: 'Correo electrónico'
    },
    {
      type: 'password',
      name: 'password',
      title: 'Contraseña'
    },
    {
      type: 'date',
      name: 'createdAt',
      title: 'Fecha de creación'
    }
  ]
}

#model - Modelo personalizado

  • Tipo: string | ModelStatic<Model>
  • Obligatorio: ❌
  • Descripción: Permite especificar una clase de modelo Sequelize personalizada, que puede ser el nombre de la clase o la clase del modelo en sí.
  • Ejemplo:
// Especificar el nombre de la clase del modelo como una cadena
{
  name: 'users',
  model: 'UserModel',
  fields: [...]
}

// Usar la clase del modelo
import { UserModel } from './models/UserModel';
{
  name: 'users',
  model: UserModel,
  fields: [...]
}

#repository - Repositorio personalizado

  • Tipo: string | RepositoryType
  • Obligatorio: ❌
  • Descripción: Permite especificar una clase de repositorio personalizada para manejar la lógica de acceso a los datos.
  • Ejemplo:
// Especificar el nombre de la clase del repositorio como una cadena
{
  name: 'users',
  repository: 'UserRepository',
  fields: [...]
}

// Usar la clase del repositorio
import { UserRepository } from './repositories/UserRepository';
{
  name: 'users',
  repository: UserRepository,
  fields: [...]
}

#autoGenId - Generar ID automáticamente

  • Tipo: boolean
  • Obligatorio: ❌
  • Valor predeterminado: true
  • Descripción: Indica si se debe generar automáticamente un ID de clave primaria.
  • Ejemplo:
{
  name: 'users',
  autoGenId: true,  // Genera automáticamente el ID de clave primaria
  fields: [...]
}

// Deshabilitar la generación automática de ID (requiere especificar la clave primaria manualmente)
{
  name: 'external_data',
  autoGenId: false,
fields: [
  {
    type: 'string',
      name: 'id',
      primaryKey: true
    }
  ]
}

#timestamps - Habilitar marcas de tiempo

  • Tipo: boolean
  • Obligatorio: ❌
  • Valor predeterminado: true
  • Descripción: Indica si se deben habilitar los campos createdAt (fecha de creación) y updatedAt (fecha de actualización).
  • Ejemplo:
{
  name: 'users',
  timestamps: true,  // Habilita las marcas de tiempo
  fields: [...]
}

#createdAt - Campo de fecha de creación

  • Tipo: boolean | string
  • Obligatorio: ❌
  • Valor predeterminado: true
  • Descripción: Configuración para el campo createdAt.
  • Ejemplo:
{
  name: 'users',
  createdAt: 'created_at',  // Nombre personalizado para el campo createdAt
  fields: [...]
}

#updatedAt - Campo de fecha de actualización

  • Tipo: boolean | string
  • Obligatorio: ❌
  • Valor predeterminado: true
  • Descripción: Configuración para el campo updatedAt.
  • Ejemplo:
{
  name: 'users',
  updatedAt: 'updated_at',  // Nombre personalizado para el campo updatedAt
  fields: [...]
}

#deletedAt - Campo de eliminación lógica

  • Tipo: boolean | string
  • Obligatorio: ❌
  • Valor predeterminado: false
  • Descripción: Configuración para el campo de eliminación lógica.
  • Ejemplo:
{
  name: 'users',
  deletedAt: 'deleted_at',  // Habilita la eliminación lógica
  paranoid: true,
  fields: [...]
}

#paranoid - Modo de eliminación lógica

  • Tipo: boolean
  • Obligatorio: ❌
  • Valor predeterminado: false
  • Descripción: Indica si se debe habilitar el modo de eliminación lógica.
  • Ejemplo:
{
  name: 'users',
  paranoid: true,  // Habilita la eliminación lógica
  deletedAt: 'deleted_at',
  fields: [...]
}

#underscored - Nomenclatura con guion bajo

  • Tipo: boolean
  • Obligatorio: ❌
  • Valor predeterminado: false
  • Descripción: Indica si se debe usar el estilo de nomenclatura con guion bajo para los nombres de las columnas de la base de datos.
  • Ejemplo:
{
  name: 'users',
  underscored: true,  // Usa el estilo de nomenclatura con guion bajo
  fields: [...]
}

#indexes - Configuración de índices

  • Tipo: ModelIndexesOptions[]
  • Obligatorio: ❌
  • Descripción: Configuración de índices para la base de datos.
  • Ejemplo:
{
  name: 'users',
  indexes: [
    {
      fields: ['email'],
      unique: true
    },
    {
      fields: ['username', 'status']
    }
  ],
  fields: [...]
}

#Configuración de parámetros de campo

NocoBase es compatible con múltiples tipos de campo, todos definidos a partir del tipo de unión FieldOptions. La configuración de campo incluye propiedades básicas, propiedades específicas del tipo de datos, propiedades de relación y propiedades de renderizado para el frontend.

#Opciones básicas de campo

Todos los tipos de campo heredan de BaseFieldOptions, lo que proporciona capacidades de configuración de campo comunes:

interface BaseFieldOptions<T extends BasicType = BasicType> {
  // Parámetros comunes
  name?: string;                    // Nombre del campo
  hidden?: boolean;                 // Si está oculto
  validation?: ValidationOptions<T>; // Reglas de validación

  // Propiedades comunes de las columnas de campo
  allowNull?: boolean;
  defaultValue?: any;
  unique?: boolean;
  primaryKey?: boolean;
  autoIncrement?: boolean;
  field?: string;
  comment?: string;

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

Ejemplo:

{
  type: 'string',
  name: 'username',
  allowNull: false,        // No permite valores nulos
  unique: true,           // Restricción de unicidad
  defaultValue: '',       // Valor predeterminado: cadena vacía
  index: true,            // Crea un índice
  comment: 'Nombre de usuario para iniciar sesión'    // Comentario de la base de datos
}

#name - Nombre del campo

  • Tipo: string
  • Obligatorio: ❌
  • Descripción: El nombre de la columna del campo en la base de datos, que debe ser único dentro de la colección.
  • Ejemplo:
{
  type: 'string',
  name: 'username',  // Nombre del campo
  title: 'Nombre de usuario'
}

#hidden - Ocultar campo

  • Tipo: boolean
  • Valor predeterminado: false
  • Descripción: Indica si este campo debe ocultarse por defecto en listas y formularios.
  • Ejemplo:
{
  type: 'string',
  name: 'internalId',
  hidden: true,  // Oculta el campo de ID interno
  title: 'ID interno'
}

#validation - Reglas de validación

interface ValidationOptions<T extends BasicType = BasicType> {
  type: T;                          // Tipo de validación
  rules: FieldValidationRule<T>[];  // Array de reglas de validación
  [key: string]: any;              // Otras opciones de validación
}

interface FieldValidationRule<T extends BasicType> {
  key: string;                      // Clave de la regla
  name: FieldValidationRuleName<T>; // Nombre de la regla
  args?: {                         // Argumentos de la regla
    [key: string]: any;
  };
  paramsType?: 'object';           // Tipo de parámetro
}
  • Tipo: ValidationOptions<T>
  • Descripción: Utiliza Joi para definir reglas de validación del lado del servidor.
  • Ejemplo:
{
  type: 'string',
  name: 'email',
  validation: {
    type: 'string',
    rules: [
      { key: 'email', name: 'email' },
      { key: 'required', name: 'required' }
    ]
  }
}

#allowNull - Permitir valores nulos

  • Tipo: boolean
  • Valor predeterminado: true
  • Descripción: Controla si la base de datos permite escribir valores NULL.
  • Ejemplo:
{
  type: 'string',
  name: 'username',
  allowNull: false,  // No permite valores nulos
  title: 'Nombre de usuario'
}

#defaultValue - Valor predeterminado

  • Tipo: any
  • Descripción: El valor predeterminado para el campo, que se utiliza cuando se crea un registro sin proporcionar un valor para este campo.
  • Ejemplo:
{
  type: 'string',
  name: 'status',
  defaultValue: 'draft',  // Por defecto, estado de borrador
  title: 'Estado'
}

#unique - Restricción de unicidad

  • Tipo: boolean | string
  • Valor predeterminado: false
  • Descripción: Indica si el valor debe ser único. Una cadena puede utilizarse para especificar el nombre de la restricción.
  • Ejemplo:
{
  type: 'string',
  name: 'email',
  unique: true,  // El correo electrónico debe ser único
  title: 'Correo electrónico'
}

#primaryKey - Clave primaria

  • Tipo: boolean
  • Valor predeterminado: false
  • Descripción: Declara este campo como la clave primaria.
  • Ejemplo:
{
  type: 'integer',
  name: 'id',
  primaryKey: true,  // Establece como clave primaria
  autoIncrement: true
}

#autoIncrement - Auto-incremento

  • Tipo: boolean
  • Valor predeterminado: false
  • Descripción: Habilita el auto-incremento (solo aplicable a campos numéricos).
  • Ejemplo:
{
  type: 'integer',
  name: 'id',
  autoIncrement: true,  // Auto-incremento
  primaryKey: true
}

#field - Nombre de columna en la base de datos

  • Tipo: string
  • Descripción: Especifica el nombre real de la columna en la base de datos (consistente con el field de Sequelize).
  • Ejemplo:
{
  type: 'string',
  name: 'userId',
  field: 'user_id',  // Nombre de la columna en la base de datos
  title: 'ID de usuario'
}

#comment - Comentario de la base de datos

  • Tipo: string
  • Descripción: Un comentario para el campo de la base de datos, utilizado con fines de documentación.
  • Ejemplo:
{
  type: 'string',
  name: 'username',
  comment: 'Nombre de usuario para iniciar sesión en el sistema',  // Comentario de la base de datos
  title: 'Nombre de usuario'
}

#title - Título de visualización

  • Tipo: string
  • Descripción: El título de visualización para el campo, comúnmente utilizado en la interfaz de usuario.
  • Ejemplo:
{
  type: 'string',
  name: 'username',
  title: 'Nombre de usuario',  // Título que se muestra en el frontend
  allowNull: false
}

#description - Descripción del campo

  • Tipo: string
  • Descripción: Información descriptiva sobre el campo para ayudar a los usuarios a comprender su propósito.
  • Ejemplo:
{
  type: 'string',
  name: 'email',
  title: 'Correo electrónico',
  description: 'Por favor, introduzca una dirección de correo electrónico válida',  // Descripción del campo
  validation: {
    type: 'string',
    rules: [{ key: 'email', name: 'email' }]
  }
}

#interface - Componente de interfaz

  • Tipo: string
  • Descripción: El componente de interfaz de usuario recomendado para el campo.
  • Ejemplo:
{
  type: 'string',
  name: 'content',
  title: 'Contenido',
  interface: 'textarea',  // Se recomienda usar el componente de área de texto
  uiSchema: {
    'x-component': 'Input.TextArea'
  }
}

#Interfaces de tipos de campo

#type: 'string' - Campo de cadena de texto

  • Descripción: Se utiliza para almacenar datos de texto cortos. Admite límites de longitud y recorte automático.
  • Tipo de base de datos: VARCHAR
  • Propiedades específicas:
    • length: Límite de longitud de la cadena.
    • trim: Indica si se deben eliminar automáticamente los espacios iniciales y finales.
interface StringFieldOptions extends BaseColumnFieldOptions<'string'> {
  type: 'string';
  length?: number;    // Límite de longitud de la cadena
  trim?: boolean;     // Si se deben eliminar automáticamente los espacios iniciales y finales
}

Ejemplo:

{
  type: 'string',
  name: 'username',
  title: 'Nombre de usuario',
  length: 50,           // Máximo 50 caracteres
  trim: true,           // Elimina automáticamente los espacios
    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 largo

  • Descripción: Se utiliza para almacenar datos de texto largos. Admite diferentes tipos de texto en MySQL.
  • Tipo de base de datos: TEXT, MEDIUMTEXT, LONGTEXT
  • Propiedades específicas:
    • length: Tipo de longitud de texto de MySQL (tiny/medium/long).
interface TextFieldOptions extends BaseColumnFieldOptions {
  type: 'text';
  length?: 'tiny' | 'medium' | 'long';  // Tipo de longitud de texto de MySQL
}

Ejemplo:

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

#Tipos numéricos

#type: 'integer' - Campo de número entero

  • Descripción: Se utiliza para almacenar datos de números enteros. Admite auto-incremento y clave primaria.
  • Tipo de base de datos: INTEGER
interface IntegerFieldOptions extends BaseColumnFieldOptions<'number'> {
  type: 'integer';
  // Hereda todas las opciones del tipo INTEGER de Sequelize
}

Ejemplo:

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

#type: 'bigInt' - Campo de número entero grande

  • Descripción: Se utiliza para almacenar datos de números enteros grandes, con un rango mayor que integer.
  • Tipo de base de datos: BIGINT
interface BigIntFieldOptions extends BaseColumnFieldOptions<'number'> {
  type: 'bigInt';
}

Ejemplo:

{
  type: 'bigInt',
  name: 'userId',
  title: 'ID de usuario',
  allowNull: false,
  unique: true
}

#type: 'float' - Campo de número flotante

  • Descripción: Se utiliza para almacenar números de punto flotante de precisión simple.
  • Tipo de base de datos: FLOAT
  • Propiedades específicas:
    • precision: La cantidad total de dígitos.
    • scale: La cantidad de decimales.
interface FloatFieldOptions extends BaseColumnFieldOptions<'number'> {
  type: 'float';
  precision?: number;  // Precisión
  scale?: number;      // Escala (decimales)
}

Ejemplo:

{
  type: 'float',
  name: 'score',
  title: 'Puntuación',
  precision: 5,
  scale: 2,
  allowNull: true,
  defaultValue: 0.0
}

#type: 'double' - Campo de número flotante de doble precisión

  • Descripción: Se utiliza para almacenar números de punto flotante de doble precisión, que tienen mayor precisión que float.
  • Tipo de base de datos: DOUBLE
  • Propiedades específicas:
    • precision: La cantidad total de dígitos.
    • scale: La cantidad de decimales.
interface DoubleFieldOptions extends BaseColumnFieldOptions<'number'> {
  type: 'double';
  precision?: number;
  scale?: number;
}

Ejemplo:

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

#type: 'real' - Campo de número real

  • Descripción: Se utiliza para almacenar números reales; depende de la base de datos.
  • Tipo de base de datos: REAL
  • Propiedades específicas:
    • precision: La cantidad total de dígitos.
    • scale: La cantidad de decimales.
interface RealFieldOptions extends BaseColumnFieldOptions<'number'> {
  type: 'real';
  precision?: number;
  scale?: number;
}

Ejemplo:

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

#type: 'decimal' - Campo decimal

  • Descripción: Se utiliza para almacenar números decimales exactos, adecuados para cálculos financieros.
  • Tipo de base de datos: DECIMAL
  • Propiedades específicas:
    • precision: La cantidad total de dígitos.
    • scale: La cantidad de decimales.
interface DecimalFieldOptions extends BaseColumnFieldOptions<'number'> {
  type: 'decimal';
  precision?: number;  // Precisión (cantidad total de dígitos)
  scale?: number;      // Escala (decimales)
}
}

Ejemplo:

{
  type: 'decimal',
  name: 'amount',
  title: 'Cantidad',
  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

  • Descripción: Se utiliza para almacenar valores verdadero/falso, normalmente para estados de encendido/apagado.
  • Tipo de base de datos: BOOLEAN o TINYINT(1)
interface BooleanFieldOptions extends BaseColumnFieldOptions<'boolean'> {
  type: 'boolean';
}

Ejemplo:

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

#type: 'radio' - Campo de selección única (radio)

  • Descripción: Se utiliza para almacenar un único valor seleccionado, normalmente para opciones binarias.
  • Tipo de base de datos: BOOLEAN o TINYINT(1)
interface RadioFieldOptions extends BaseColumnFieldOptions<'boolean'> {
  type: 'radio';
}

Ejemplo:

{
  type: 'radio',
  name: 'isDefault',
  title: 'Es predeterminado',
  defaultValue: false,
  allowNull: false
}

#Tipos de fecha y hora

#type: 'date' - Campo de fecha

  • Descripción: Se utiliza para almacenar datos de fecha sin información de hora.
  • Tipo de base de datos: DATE
  • Propiedades específicas:
    • timezone: Indica si se debe incluir información de zona horaria.
interface DateFieldOptions extends BaseColumnFieldOptions<'date'> {
  type: 'date';
  timezone?: boolean;  // Si se debe incluir información de zona horaria
}

Ejemplo:

{
  type: 'date',
  name: 'birthday',
  title: 'Fecha de nacimiento',
  allowNull: true,
  timezone: false
}

#type: 'time' - Campo de hora

  • Descripción: Se utiliza para almacenar datos de hora sin información de fecha.
  • Tipo de base de datos: TIME
  • Propiedades específicas:
    • timezone: Indica si se debe incluir información de zona horaria.
interface TimeFieldOptions extends BaseColumnFieldOptions<'time'> {
  type: 'time';
  timezone?: boolean;
}

Ejemplo:

{
  type: 'time',
  name: 'startTime',
  title: 'Hora de inicio',
  allowNull: false,
  timezone: false
}

#type: 'datetimeTz' - Campo de fecha y hora con zona horaria

  • Descripción: Se utiliza para almacenar datos de fecha y hora con información de zona horaria.
  • Tipo de base de datos: TIMESTAMP WITH TIME ZONE
  • Propiedades específicas:
    • timezone: Indica si se debe incluir información de zona horaria.
interface DatetimeTzFieldOptions extends BaseColumnFieldOptions<'datetime'> {
  type: 'datetimeTz';
  timezone?: boolean;
}

Ejemplo:

{
  type: 'datetimeTz',
  name: 'createdAt',
  title: 'Fecha de creación',
  allowNull: false,
  timezone: true,
  defaultToCurrentTime: true,
  onUpdateToCurrentTime: true
}

#type: 'datetimeNoTz' - Campo de fecha y hora sin zona horaria

  • Descripción: Se utiliza para almacenar datos de fecha y hora sin información de zona horaria.
  • Tipo de base de datos: TIMESTAMP o DATETIME
  • Propiedades específicas:
    • timezone: Indica si se debe incluir información de zona horaria.
interface DatetimeNoTzFieldOptions extends BaseColumnFieldOptions<'datetime'> {
  type: 'datetimeNoTz';
  timezone?: boolean;
}

Ejemplo:

{
  type: 'datetimeNoTz',
  name: 'updatedAt',
  title: 'Fecha de actualización',
  allowNull: false,
  timezone: false,
  defaultToCurrentTime: true,
  onUpdateToCurrentTime: true
}

#type: 'dateOnly' - Campo de solo fecha

  • Descripción: Se utiliza para almacenar datos que contienen solo la fecha, sin la hora.
  • Tipo de base de datos: DATE
  • Ejemplo:
{
  type: 'dateOnly',
  name: 'publishDate',
  title: 'Fecha de publicación',
  allowNull: true
}

#type: 'unixTimestamp' - Campo de marca de tiempo Unix

  • Descripción: Se utiliza para almacenar datos de marca de tiempo Unix.
  • Tipo de base de datos: BIGINT
  • Propiedades específicas:
    • epoch: La hora de la época (epoch time).
interface UnixTimestampFieldOptions extends BaseColumnFieldOptions<'unixTimestamp'> {
  type: 'unixTimestamp';
  epoch?: number;  // Hora de la época
}

Ejemplo:

{
  type: 'unixTimestamp',
  name: 'lastLoginAt',
  title: 'Última hora de inicio de sesión',
  allowNull: true,
  epoch: 0
}

#Tipos JSON

#type: 'json' - Campo JSON

  • Descripción: Se utiliza para almacenar datos en formato JSON, compatible con estructuras de datos complejas.
  • Tipo de base de datos: JSON o TEXT
  • Ejemplo:
{
  type: 'json',
  name: 'metadata',
  title: 'Metadatos',
  allowNull: true,
  defaultValue: {}
}

#type: 'jsonb' - Campo JSONB

  • Descripción: Se utiliza para almacenar datos en formato JSONB (específico de PostgreSQL), que admite indexación y consulta.
  • Tipo de base de datos: JSONB (PostgreSQL)
  • Ejemplo:
{
  type: 'jsonb',
  name: 'config',
  title: 'Configuración',
  allowNull: true,
  defaultValue: {}
}

#Tipos de array

#type: 'array' - Campo de array

  • Descripción: Se utiliza para almacenar datos de array, compatible con varios tipos de elementos.
  • Tipo de base de datos: JSON o ARRAY
  • Propiedades específicas:
    • dataType: Tipo de almacenamiento (json/array).
    • elementType: Tipo de elemento (STRING/INTEGER/BOOLEAN/JSON).
interface ArrayFieldOptions extends BaseColumnFieldOptions<'array'> {
  type: 'array';
  dataType?: 'json' | 'array';  // Tipo de almacenamiento
  elementType?: 'STRING' | 'INTEGER' | 'BOOLEAN' | 'JSON'; // Tipo de elemento
}

Ejemplo:

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

#type: 'set' - Campo de conjunto

  • Descripción: Se utiliza para almacenar datos de conjunto, similar a un array pero con una restricción de unicidad.
  • Tipo de base de datos: JSON o ARRAY
  • Propiedades específicas:
    • dataType: Tipo de almacenamiento (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';
}

Ejemplo:

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

#Tipos de identificador

#type: 'uuid' - Campo UUID

  • Descripción: Se utiliza para almacenar identificadores únicos en formato UUID.
  • Tipo de base de datos: UUID o VARCHAR(36)
  • Propiedades específicas:
    • autoFill: Rellena automáticamente el valor.
interface UUIDFieldOptions extends BaseColumnFieldOptions<'uuid'> {
  type: 'uuid';
  autoFill?: boolean;  // Relleno automático
}

Ejemplo:

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

#type: 'nanoid' - Campo Nanoid

  • Descripción: Se utiliza para almacenar identificadores únicos cortos en formato Nanoid.
  • Tipo de base de datos: VARCHAR
  • Propiedades específicas:
    • size: Longitud del ID.
    • customAlphabet: Conjunto de caracteres personalizado.
    • autoFill: Rellena automáticamente el valor.
interface NanoidFieldOptions extends BaseColumnFieldOptions<'nanoid'> {
  type: 'nanoid';
  size?: number;  // Longitud del ID
  customAlphabet?: string;  // Conjunto de caracteres personalizado
  autoFill?: boolean;
}

Ejemplo:

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

#type: 'uid' - Campo UID personalizado

  • Descripción: Se utiliza para almacenar identificadores únicos en un formato personalizado.
  • Tipo de base de datos: VARCHAR
  • Propiedades específicas:
    • prefix: Un prefijo para el identificador.
    • pattern: Un patrón de validación.
interface UidFieldOptions extends BaseColumnFieldOptions<'uid'> {
  type: 'uid';
  prefix?: string;  // Prefijo
  pattern?: string; // Patrón de validación
}

Ejemplo:

{
  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

  • Descripción: Se utiliza para almacenar identificadores únicos generados por el algoritmo Snowflake.
  • Tipo de base de datos: BIGINT
  • Ejemplo:
{
  type: 'snowflakeId',
  name: 'snowflakeId',
  title: 'ID Snowflake',
  allowNull: false,
  unique: true
}

#Campos funcionales

#type: 'password' - Campo de contraseña

  • Descripción: Se utiliza para almacenar datos de contraseña cifrados.
  • Tipo de base de datos: VARCHAR
  • Propiedades específicas:
    • length: Longitud del hash.
    • randomBytesSize: Tamaño de los bytes aleatorios.
interface PasswordFieldOptions extends BaseColumnFieldOptions<'password'> {
  type: 'password';
  length?: number;  // Longitud del hash
  randomBytesSize?: number;  // Tamaño de los bytes aleatorios
}

Ejemplo:

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

#type: 'encryption' - Campo de cifrado

  • Descripción: Se utiliza para almacenar datos sensibles cifrados.
  • Tipo de base de datos: VARCHAR
  • Ejemplo:
{
  type: 'encryption',
  name: 'secret',
  title: 'Secreto',
  allowNull: true,
  hidden: true
}

#type: 'virtual' - Campo virtual

  • Descripción: Se utiliza para almacenar datos virtuales calculados que no se guardan en la base de datos.
  • Tipo de base de datos: Ninguno (campo virtual)
  • Ejemplo:
{
  type: 'virtual',
  name: 'fullName',
  title: 'Nombre completo'
}

#type: 'context' - Campo de contexto

  • Descripción: Se utiliza para leer datos del contexto de ejecución (por ejemplo, información del usuario actual).
  • Tipo de base de datos: Determinado por dataType.
  • Propiedades específicas:
    • dataIndex: Ruta del índice de datos.
    • dataType: Tipo de datos.
    • createOnly: Se establece solo en la creación.
interface ContextFieldOptions extends BaseFieldOptions {
  type: 'context';
  dataIndex?: string;  // Ruta del índice de datos
  dataType?: string;   // Tipo de datos
  createOnly?: boolean; // Se establece solo en la creación
}

Ejemplo:

{
  type: 'context',
  name: 'currentUserId',
  title: 'ID de usuario actual',
  dataIndex: 'user.id',
  dataType: 'integer',
  createOnly: true,
  allowNull: false
}

#Campos de relación

#type: 'belongsTo' - Relación "pertenece a"

  • Descripción: Representa una relación de muchos a uno, donde el registro actual pertenece a otro registro.
  • Tipo de base de datos: Campo de clave externa
  • Propiedades específicas:
    • target: Nombre de la colección de destino.
    • foreignKey: Nombre del campo de clave externa.
    • targetKey: Nombre del campo de clave de destino en la colección de destino.
    • onDelete: Acción en cascada al eliminar.
    • onUpdate: Acción en cascada al actualizar.
    • constraints: Indica si se deben habilitar las restricciones de clave externa.
interface BelongsToFieldOptions extends BaseRelationFieldOptions {
  type: 'belongsTo';
  target: string;  // Nombre de la colección de destino
  foreignKey?: string;  // Nombre del campo de clave externa
  targetKey?: string;   // Nombre del campo de clave de destino en la colección de destino
  onDelete?: 'CASCADE' | 'SET NULL' | 'RESTRICT' | 'NO ACTION';
  onUpdate?: 'CASCADE' | 'SET NULL' | 'RESTRICT' | 'NO ACTION';
  constraints?: boolean;  // Si se deben habilitar las restricciones de clave externa
}

Ejemplo:

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

#type: 'hasOne' - Relación "tiene uno"

  • Descripción: Representa una relación de uno a uno, donde el registro actual tiene un registro relacionado.
  • Tipo de base de datos: Campo de clave externa
  • Propiedades específicas:
    • target: Nombre de la colección de destino.
    • foreignKey: Nombre del campo de clave externa.
    • sourceKey: Nombre del campo de clave de origen en la colección de origen.
    • onDelete: Acción en cascada al eliminar.
    • onUpdate: Acción en cascada al actualizar.
    • constraints: Indica si se deben habilitar las restricciones de clave externa.
interface HasOneFieldOptions extends BaseRelationFieldOptions {
  type: 'hasOne';
  target: string;
  foreignKey?: string;
  sourceKey?: string;  // Nombre del campo de clave de origen
  onDelete?: 'CASCADE' | 'SET NULL' | 'RESTRICT' | 'NO ACTION';
  onUpdate?: 'CASCADE' | 'SET NULL' | 'RESTRICT' | 'NO ACTION';
  constraints?: boolean;
}

Ejemplo:

{
  type: 'hasOne',
  name: 'profile',
  title: 'Perfil de usuario',
  target: 'user_profiles',
  foreignKey: 'userId',
  sourceKey: 'id',
  onDelete: 'CASCADE',
  onUpdate: 'CASCADE',
  constraints: false
}

#type: 'hasMany' - Relación "tiene muchos"

  • Descripción: Representa una relación de uno a muchos, donde el registro actual tiene varios registros relacionados.
  • Tipo de base de datos: Campo de clave externa
  • Propiedades específicas:
    • target: Nombre de la colección de destino.
    • foreignKey: Nombre del campo de clave externa.
    • sourceKey: Nombre del campo de clave de origen en la colección de origen.
    • sortBy: Campo de ordenación.
    • sortable: Indica si el campo es ordenable.
    • onDelete: Acción en cascada al eliminar.
    • onUpdate: Acción en cascada al actualizar.
    • constraints: Indica si se deben habilitar las restricciones de clave externa.
interface HasManyFieldOptions extends BaseRelationFieldOptions {
  type: 'hasMany';
  target: string;
  foreignKey?: string;
  sourceKey?: string;
  sortBy?: string[];  // Campo de ordenación
  sortable?: boolean; // Si es ordenable
  onDelete?: 'CASCADE' | 'SET NULL' | 'RESTRICT' | 'NO ACTION';
  onUpdate?: 'CASCADE' | 'SET NULL' | 'RESTRICT' | 'NO ACTION';
  constraints?: boolean;
}

Ejemplo:

  {
    type: 'hasMany',
  name: 'posts',
  title: 'Lista de artículos',
  target: 'articles',
  foreignKey: 'authorId',
  sourceKey: 'id',
    sortBy: ['createdAt'],
  sortable: true,
  onDelete: 'CASCADE',
  onUpdate: 'CASCADE',
  constraints: false
}

#type: 'belongsToMany' - Relación "pertenece a muchos"

  • Descripción: Representa una relación de muchos a muchos, conectando dos colecciones a través de una tabla intermedia.
  • Tipo de base de datos: Tabla intermedia
  • Propiedades específicas:
    • target: Nombre de la colección de destino.
    • through: Nombre de la tabla intermedia.
    • foreignKey: Nombre del campo de clave externa.
    • otherKey: La otra clave externa en la tabla intermedia.
    • sourceKey: Nombre del campo de clave de origen en la colección de origen.
    • targetKey: Nombre del campo de clave de destino en la colección de destino.
    • onDelete: Acción en cascada al eliminar.
    • onUpdate: Acción en cascada al actualizar.
    • constraints: Indica si se deben habilitar las restricciones de clave externa.
interface BelongsToManyFieldOptions extends BaseRelationFieldOptions {
  type: 'belongsToMany';
  target: string;
  through: string;  // Nombre de la tabla intermedia
  foreignKey?: string;
  otherKey?: string;  // La otra clave externa en la tabla intermedia
  sourceKey?: string;
  targetKey?: string;
  onDelete?: 'CASCADE' | 'SET NULL' | 'RESTRICT' | 'NO ACTION';
  onUpdate?: 'CASCADE' | 'SET NULL' | 'RESTRICT' | 'NO ACTION';
  constraints?: boolean;
}

Ejemplo:

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