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

Schnellstart

Plugin-Entwicklung: Überblick
Erstes Plugin schreiben
Projektverzeichnisstruktur

Serverseitige Entwicklung

Überblick
Plugin
Collections (Datentabellen)
Datenbankoperationen
DataSourceManager
ResourceManager
ACL-Zugriffskontrolle
Middleware
Cache
Events
Request-Kontext
Migration (Update-Skripte)
Logger (Protokollierung)
I18n (Internationalisierung)
Command (Befehlszeile)
CronJobManager
Tests

Clientseitige Entwicklung

Überblick
Plugin
Kontext
Router
ACL-Zugriffskontrolle
DataSourceManager
Ressourcen
Requests
Stile & Themes
Logger (Protokollierung)
I18n (Internationalisierung)
Tests

Sonstiges

Plugin-Update-Leitfaden
Sprachenliste
Abhängigkeitsverwaltung
Build
Next PagePlugin-Entwicklung: Überblick
KI-Übersetzungshinweis

Diese Dokumentation wurde automatisch von KI übersetzt.

#Sammlung: Konfigurationsparameter

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 - Name der Sammlung

  • Typ: string
  • Erforderlich: ✅
  • Beschreibung: Der eindeutige Bezeichner für die Sammlung, der innerhalb der gesamten Anwendung einmalig sein muss.
  • Beispiel:
{
  name: 'users'  // Benutzersammlung
}

#title - Titel der Sammlung

  • Typ: string
  • Erforderlich: ❌
  • Beschreibung: Der Anzeigetitel der Sammlung, der in der Frontend-Oberfläche verwendet wird.
  • Beispiel:
{
  name: 'users',
  title: 'Benutzerverwaltung'  // Wird in der Oberfläche als "Benutzerverwaltung" angezeigt
}

#migrationRules - Migrationsregeln

  • Typ: MigrationRule[]
  • Erforderlich: ❌
  • Beschreibung: Regeln für die Verarbeitung bei der Datenmigration.
  • Beispiel:
{
  name: 'users',
  migrationRules: ['overwrite'],  // Vorhandene Daten überschreiben
  fields: [...]
}

#inherits - Sammlungen erben

  • Typ: string[] | string
  • Erforderlich: ❌
  • Beschreibung: Erbt Felddefinitionen von anderen Sammlungen. Unterstützt die Vererbung von einer oder mehreren Sammlungen.
  • Beispiel:
// Einzelne Vererbung
{
  name: 'admin_users',
  inherits: 'users',  // Erbt alle Felder der Benutzersammlung
  fields: [
    {
      type: 'string',
      name: 'admin_level'
    }
  ]
}

// Mehrfache Vererbung
{
  name: 'super_admin_users',
  inherits: ['users', 'admin_users'],  // Erbt von mehreren Sammlungen
  fields: [...]
}

#filterTargetKey - Schlüssel für Zielfilterung

  • Typ: string | string[]
  • Erforderlich: ❌
  • Beschreibung: Der Zielschlüssel, der für die Filterung von Abfragen verwendet wird. Unterstützt einzelne oder mehrere Schlüssel.
  • Beispiel:
{
  name: 'user_posts',
  filterTargetKey: 'userId',  // Nach Benutzer-ID filtern
  fields: [...]
}

// Mehrere Filterschlüssel
{
  name: 'user_category_posts',
  filterTargetKey: ['userId', 'categoryId'],  // Nach Benutzer-ID und Kategorie-ID filtern
  fields: [...]
}

#fields - Felddefinitionen

  • Typ: FieldOptions[]
  • Erforderlich: ❌
  • Standardwert: []
  • Beschreibung: Ein Array von Felddefinitionen für die Sammlung. Jedes Feld enthält Informationen wie Typ, Name und Konfiguration.
  • Beispiel:
{
  name: 'users',
  fields: [
    {
      type: 'string',
      name: 'username',
      unique: true,
      title: 'Benutzername'
    },
    {
      type: 'string',
      name: 'email',
      unique: true,
      title: 'E-Mail'
    },
    {
      type: 'password',
      name: 'password',
      title: 'Passwort'
    },
    {
      type: 'date',
      name: 'createdAt',
      title: 'Erstellungszeitpunkt'
    }
  ]
}

#model - Benutzerdefiniertes Modell

  • Typ: string | ModelStatic<Model>
  • Erforderlich: ❌
  • Beschreibung: Gibt eine benutzerdefinierte Sequelize-Modellklasse an, die entweder der Klassenname oder die Modellklasse selbst sein kann.
  • Beispiel:
// Modellklassennamen als String angeben
{
  name: 'users',
  model: 'UserModel',
  fields: [...]
}

// Modellklasse verwenden
import { UserModel } from './models/UserModel';
{
  name: 'users',
  model: UserModel,
  fields: [...]
}

#repository - Benutzerdefiniertes Repository

  • Typ: string | RepositoryType
  • Erforderlich: ❌
  • Beschreibung: Gibt eine benutzerdefinierte Repository-Klasse an, die die Datenzugriffslogik verarbeitet.
  • Beispiel:
// Repository-Klassennamen als String angeben
{
  name: 'users',
  repository: 'UserRepository',
  fields: [...]
}

// Repository-Klasse verwenden
import { UserRepository } from './repositories/UserRepository';
{
  name: 'users',
  repository: UserRepository,
  fields: [...]
}

#autoGenId - ID automatisch generieren

  • Typ: boolean
  • Erforderlich: ❌
  • Standardwert: true
  • Beschreibung: Legt fest, ob eine Primärschlüssel-ID automatisch generiert werden soll.
  • Beispiel:
{
  name: 'users',
  autoGenId: true,  // Primärschlüssel-ID automatisch generieren
  fields: [...]
}

// Automatische ID-Generierung deaktivieren (erfordert manuelle Primärschlüssel-Spezifikation)
{
  name: 'external_data',
  autoGenId: false,
fields: [
  {
    type: 'string',
      name: 'id',
      primaryKey: true
    }
  ]
}

#timestamps - Zeitstempel aktivieren

  • Typ: boolean
  • Erforderlich: ❌
  • Standardwert: true
  • Beschreibung: Legt fest, ob die Felder createdAt und updatedAt aktiviert werden sollen.
  • Beispiel:
{
  name: 'users',
  timestamps: true,  // Zeitstempel aktivieren
  fields: [...]
}

#createdAt - Feld für Erstellungszeitpunkt

  • Typ: boolean | string
  • Erforderlich: ❌
  • Standardwert: true
  • Beschreibung: Konfiguration für das Feld createdAt.
  • Beispiel:
{
  name: 'users',
  createdAt: 'created_at',  // Benutzerdefinierter Name für das createdAt-Feld
  fields: [...]
}

#updatedAt - Feld für Aktualisierungszeitpunkt

  • Typ: boolean | string
  • Erforderlich: ❌
  • Standardwert: true
  • Beschreibung: Konfiguration für das Feld updatedAt.
  • Beispiel:
{
  name: 'users',
  updatedAt: 'updated_at',  // Benutzerdefinierter Name für das updatedAt-Feld
  fields: [...]
}

#deletedAt - Feld für Soft-Delete

  • Typ: boolean | string
  • Erforderlich: ❌
  • Standardwert: false
  • Beschreibung: Konfiguration für das Soft-Delete-Feld.
  • Beispiel:
{
  name: 'users',
  deletedAt: 'deleted_at',  // Soft-Delete aktivieren
  paranoid: true,
  fields: [...]
}

#paranoid - Soft-Delete-Modus

  • Typ: boolean
  • Erforderlich: ❌
  • Standardwert: false
  • Beschreibung: Legt fest, ob der Soft-Delete-Modus aktiviert werden soll.
  • Beispiel:
{
  name: 'users',
  paranoid: true,  // Soft-Delete aktivieren
  deletedAt: 'deleted_at',
  fields: [...]
}

#underscored - Unterstrich-Namenskonvention

  • Typ: boolean
  • Erforderlich: ❌
  • Standardwert: false
  • Beschreibung: Legt fest, ob die Unterstrich-Namenskonvention verwendet werden soll.
  • Beispiel:
{
  name: 'users',
  underscored: true,  // Unterstrich-Namenskonvention verwenden
  fields: [...]
}

#indexes - Index-Konfiguration

  • Typ: ModelIndexesOptions[]
  • Erforderlich: ❌
  • Beschreibung: Konfiguration der Datenbankindizes.
  • Beispiel:
{
  name: 'users',
  indexes: [
    {
      fields: ['email'],
      unique: true
    },
    {
      fields: ['username', 'status']
    }
  ],
  fields: [...]
}

#Feld: Parameterkonfiguration

NocoBase unterstützt verschiedene Feldtypen, die alle auf der FieldOptions-Union-Typdefinition basieren. Die Feldkonfiguration umfasst grundlegende Eigenschaften, datentyp-spezifische Eigenschaften, Beziehungseigenschaften und Frontend-Rendering-Eigenschaften.

#Grundlegende Feldoptionen

Alle Feldtypen erben von BaseFieldOptions und bieten allgemeine Konfigurationsmöglichkeiten für Felder:

interface BaseFieldOptions<T extends BasicType = BasicType> {
  // Allgemeine Parameter
  name?: string;                    // Feldname
  hidden?: boolean;                 // Ob ausgeblendet
  validation?: ValidationOptions<T>; // Validierungsregeln

  // Häufige Spaltenfeldeigenschaften
  allowNull?: boolean;
  defaultValue?: any;
  unique?: boolean;
  primaryKey?: boolean;
  autoIncrement?: boolean;
  field?: string;
  comment?: string;

  // Frontend-bezogen
  title?: string;
  description?: string;
  interface?: string;
  uiSchema?: any;
}

Beispiel:

{
  type: 'string',
  name: 'username',
  allowNull: false,        // Null-Werte nicht zulassen
  unique: true,           // Eindeutigkeitsbedingung
  defaultValue: '',       // Standardmäßig leerer String
  index: true,            // Index erstellen
  comment: 'Benutzer-Login-Name'    // Datenbank-Kommentar
}

#name - Feldname

  • Typ: string
  • Erforderlich: ❌
  • Beschreibung: Der Spaltenname des Feldes in der Datenbank, der innerhalb der Sammlung eindeutig sein muss.
  • Beispiel:
{
  type: 'string',
  name: 'username',  // Feldname
  title: 'Benutzername'
}

#hidden - Feld ausblenden

  • Typ: boolean
  • Standardwert: false
  • Beschreibung: Legt fest, ob dieses Feld standardmäßig in Listen und Formularen ausgeblendet werden soll.
  • Beispiel:
{
  type: 'string',
  name: 'internalId',
  hidden: true,  // Internes ID-Feld ausblenden
  title: 'Interne ID'
}

#validation - Validierungsregeln

interface ValidationOptions<T extends BasicType = BasicType> {
  type: T;                          // Validierungstyp
  rules: FieldValidationRule<T>[];  // Array von Validierungsregeln
  [key: string]: any;              // Weitere Validierungsoptionen
}

interface FieldValidationRule<T extends BasicType> {
  key: string;                      // Regel-Schlüssel
  name: FieldValidationRuleName<T>; // Regelname
  args?: {                         // Regelargumente
    [key: string]: any;
  };
  paramsType?: 'object';           // Parametertyp
}
  • Typ: ValidationOptions<T>
  • Beschreibung: Verwendet Joi, um serverseitige Validierungsregeln zu definieren.
  • Beispiel:
{
  type: 'string',
  name: 'email',
  validation: {
    type: 'string',
    rules: [
      { key: 'email', name: 'email' },
      { key: 'required', name: 'required' }
    ]
  }
}

#allowNull - Null-Werte zulassen

  • Typ: boolean
  • Standardwert: true
  • Beschreibung: Steuert, ob die Datenbank das Schreiben von NULL-Werten zulässt.
  • Beispiel:
{
  type: 'string',
  name: 'username',
  allowNull: false,  // Null-Werte nicht zulassen
  title: 'Benutzername'
}

#defaultValue - Standardwert

  • Typ: any
  • Beschreibung: Der Standardwert für das Feld, der verwendet wird, wenn beim Erstellen eines Datensatzes kein Wert für dieses Feld angegeben wird.
  • Beispiel:
{
  type: 'string',
  name: 'status',
  defaultValue: 'draft',  // Standardmäßig "Entwurf"-Status
  title: 'Status'
}

#unique - Eindeutigkeitsbedingung

  • Typ: boolean | string
  • Standardwert: false
  • Beschreibung: Legt fest, ob der Wert eindeutig sein muss. Ein String kann verwendet werden, um den Namen der Bedingung anzugeben.
  • Beispiel:
{
  type: 'string',
  name: 'email',
  unique: true,  // E-Mail muss eindeutig sein
  title: 'E-Mail'
}

#primaryKey - Primärschlüssel

  • Typ: boolean
  • Standardwert: false
  • Beschreibung: Deklariert dieses Feld als Primärschlüssel.
  • Beispiel:
{
  type: 'integer',
  name: 'id',
  primaryKey: true,  // Als Primärschlüssel festlegen
  autoIncrement: true
}

#autoIncrement - Automatische Inkrementierung

  • Typ: boolean
  • Standardwert: false
  • Beschreibung: Aktiviert die automatische Inkrementierung (nur für numerische Felder anwendbar).
  • Beispiel:
{
  type: 'integer',
  name: 'id',
  autoIncrement: true,  // Automatisch inkrementieren
  primaryKey: true
}

#field - Datenbank-Spaltenname

  • Typ: string
  • Beschreibung: Gibt den tatsächlichen Datenbank-Spaltennamen an (konsistent mit Sequenzes field).
  • Beispiel:
{
  type: 'string',
  name: 'userId',
  field: 'user_id',  // Spaltenname in der Datenbank
  title: 'Benutzer-ID'
}

#comment - Datenbank-Kommentar

  • Typ: string
  • Beschreibung: Ein Kommentar für das Datenbankfeld, der zu Dokumentationszwecken verwendet wird.
  • Beispiel:
{
  type: 'string',
  name: 'username',
  comment: 'Benutzer-Login-Name, für die Systemanmeldung verwendet',  // Datenbank-Kommentar
  title: 'Benutzername'
}

#title - Anzeigetitel

  • Typ: string
  • Beschreibung: Der Anzeigetitel für das Feld, der häufig in der Frontend-Oberfläche verwendet wird.
  • Beispiel:
{
  type: 'string',
  name: 'username',
  title: 'Benutzername',  // In der Frontend-Oberfläche angezeigter Titel
  allowNull: false
}

#description - Feldbeschreibung

  • Typ: string
  • Beschreibung: Beschreibende Informationen über das Feld, um Benutzern zu helfen, dessen Zweck zu verstehen.
  • Beispiel:
{
  type: 'string',
  name: 'email',
  title: 'E-Mail',
  description: 'Bitte geben Sie eine gültige E-Mail-Adresse ein',  // Feldbeschreibung
  validation: {
    type: 'string',
    rules: [{ key: 'email', name: 'email' }]
  }
}
}

#interface - Oberflächenkomponente

  • Typ: string
  • Beschreibung: Die empfohlene Frontend-Oberflächenkomponente für das Feld.
  • Beispiel:
{
  type: 'string',
  name: 'content',
  title: 'Inhalt',
  interface: 'textarea',  // Empfehlung: Textarea-Komponente verwenden
  uiSchema: {
    'x-component': 'Input.TextArea'
  }
}

#Feldtyp-Schnittstellen

#type: 'string' - Zeichenkettenfeld

  • Beschreibung: Dient zum Speichern kurzer Textdaten. Unterstützt Längenbeschränkungen und automatisches Trimmen.
  • Datenbanktyp: VARCHAR
  • Spezifische Eigenschaften:
    • length: Längenbeschränkung der Zeichenkette.
    • trim: Legt fest, ob führende und nachfolgende Leerzeichen automatisch entfernt werden sollen.
interface StringFieldOptions extends BaseColumnFieldOptions<'string'> {
  type: 'string';
  length?: number;    // Längenbeschränkung der Zeichenkette
  trim?: boolean;     // Ob führende und nachfolgende Leerzeichen automatisch entfernt werden sollen
}

Beispiel:

{
  type: 'string',
  name: 'username',
  title: 'Benutzername',
  length: 50,           // Maximal 50 Zeichen
  trim: true,           // Leerzeichen automatisch entfernen
    allowNull: false,
    unique: true,
    validation: {
      type: 'string',
      rules: [
        { key: 'min', name: 'min', args: { limit: 3 } },
      { key: 'max', name: 'max', args: { limit: 20 } }
    ]
  }
}

#type: 'text' - Textfeld

  • Beschreibung: Dient zum Speichern langer Textdaten. Unterstützt verschiedene Texttypen in MySQL.
  • Datenbanktyp: TEXT, MEDIUMTEXT, LONGTEXT
  • Spezifische Eigenschaften:
    • length: MySQL-Textlängentyp (tiny/medium/long).
interface TextFieldOptions extends BaseColumnFieldOptions {
  type: 'text';
  length?: 'tiny' | 'medium' | 'long';  // MySQL-Textlängentyp
}

Beispiel:

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

#Numerische Typen

#type: 'integer' - Ganzzahlenfeld

  • Beschreibung: Dient zum Speichern von Ganzzahlendaten. Unterstützt automatische Inkrementierung und Primärschlüssel.
  • Datenbanktyp: INTEGER
interface IntegerFieldOptions extends BaseColumnFieldOptions<'number'> {
  type: 'integer';
  // Erbt alle Optionen des Sequelize INTEGER-Typs
}

Beispiel:

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

#type: 'bigInt' - Großes Ganzzahlenfeld

  • Beschreibung: Dient zum Speichern großer Ganzzahlendaten, mit einem größeren Wertebereich als integer.
  • Datenbanktyp: BIGINT
interface BigIntFieldOptions extends BaseColumnFieldOptions<'number'> {
  type: 'bigInt';
}

Beispiel:

{
  type: 'bigInt',
  name: 'userId',
  title: 'Benutzer-ID',
  allowNull: false,
  unique: true
}

#type: 'float' - Gleitkommafeld

  • Beschreibung: Dient zum Speichern von Gleitkommazahlen einfacher Genauigkeit.
  • Datenbanktyp: FLOAT
  • Spezifische Eigenschaften:
    • precision: Genauigkeit (Gesamtzahl der Ziffern).
    • scale: Anzahl der Nachkommastellen.
interface FloatFieldOptions extends BaseColumnFieldOptions<'number'> {
  type: 'float';
  precision?: number;  // Genauigkeit
  scale?: number;      // Nachkommastellen
}

Beispiel:

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

#type: 'double' - Doppeltes Gleitkommafeld

  • Beschreibung: Dient zum Speichern von Gleitkommazahlen doppelter Genauigkeit, die eine höhere Präzision als float aufweisen.
  • Datenbanktyp: DOUBLE
  • Spezifische Eigenschaften:
    • precision: Genauigkeit (Gesamtzahl der Ziffern).
    • scale: Anzahl der Nachkommastellen.
interface DoubleFieldOptions extends BaseColumnFieldOptions<'number'> {
  type: 'double';
  precision?: number;
  scale?: number;
}

Beispiel:

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

#type: 'real' - Reales Zahlenfeld

  • Beschreibung: Dient zum Speichern von reellen Zahlen; datenbankabhängig.
  • Datenbanktyp: REAL
  • Spezifische Eigenschaften:
    • precision: Genauigkeit (Gesamtzahl der Ziffern).
    • scale: Anzahl der Nachkommastellen.
interface RealFieldOptions extends BaseColumnFieldOptions<'number'> {
  type: 'real';
  precision?: number;
  scale?: number;
}

Beispiel:

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

#type: 'decimal' - Dezimalfeld

  • Beschreibung: Dient zum Speichern exakter Dezimalzahlen, geeignet für Finanzberechnungen.
  • Datenbanktyp: DECIMAL
  • Spezifische Eigenschaften:
    • precision: Genauigkeit (Gesamtzahl der Ziffern).
    • scale: Anzahl der Nachkommastellen.
interface DecimalFieldOptions extends BaseColumnFieldOptions<'number'> {
  type: 'decimal';
  precision?: number;  // Genauigkeit (Gesamtzahl der Ziffern)
  scale?: number;      // Nachkommastellen
}

Beispiel:

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

#Boolesche Typen

#type: 'boolean' - Boolesches Feld

  • Beschreibung: Dient zum Speichern von Wahr/Falsch-Werten, typischerweise für Ein/Aus-Zustände.
  • Datenbanktyp: BOOLEAN oder TINYINT(1)
interface BooleanFieldOptions extends BaseColumnFieldOptions<'boolean'> {
  type: 'boolean';
}

Beispiel:

{
  type: 'boolean',
  name: 'isActive',
  title: 'Ist aktiv',
  defaultValue: true,
  allowNull: false
}

#type: 'radio' - Radio-Feld

  • Beschreibung: Dient zum Speichern eines einzelnen ausgewählten Wertes, typischerweise für binäre Entscheidungen.
  • Datenbanktyp: BOOLEAN oder TINYINT(1)
interface RadioFieldOptions extends BaseColumnFieldOptions<'boolean'> {
  type: 'radio';
}

Beispiel:

{
  type: 'radio',
  name: 'isDefault',
  title: 'Ist Standard',
  defaultValue: false,
  allowNull: false
}

#Datums- und Uhrzeittypen

#type: 'date' - Datumsfeld

  • Beschreibung: Dient zum Speichern von Datumsdaten ohne Zeitinformationen.
  • Datenbanktyp: DATE
  • Spezifische Eigenschaften:
    • timezone: Legt fest, ob Zeitzoneninformationen enthalten sein sollen.
interface DateFieldOptions extends BaseColumnFieldOptions<'date'> {
  type: 'date';
  timezone?: boolean;  // Ob Zeitzoneninformationen enthalten sein sollen
}

Beispiel:

{
  type: 'date',
  name: 'birthday',
  title: 'Geburtstag',
  allowNull: true,
  timezone: false
}

#type: 'time' - Zeitfeld

  • Beschreibung: Dient zum Speichern von Zeitdaten ohne Datumsangaben.
  • Datenbanktyp: TIME
  • Spezifische Eigenschaften:
    • timezone: Legt fest, ob Zeitzoneninformationen enthalten sein sollen.
interface TimeFieldOptions extends BaseColumnFieldOptions<'time'> {
  type: 'time';
  timezone?: boolean;
}

Beispiel:

{
  type: 'time',
  name: 'startTime',
  title: 'Startzeit',
  allowNull: false,
  timezone: false
}

#type: 'datetimeTz' - Datums-/Uhrzeitfeld mit Zeitzone

  • Beschreibung: Dient zum Speichern von Datums- und Uhrzeitdaten mit Zeitzoneninformationen.
  • Datenbanktyp: TIMESTAMP WITH TIME ZONE
  • Spezifische Eigenschaften:
    • timezone: Legt fest, ob Zeitzoneninformationen enthalten sein sollen.
interface DatetimeTzFieldOptions extends BaseColumnFieldOptions<'datetime'> {
  type: 'datetimeTz';
  timezone?: boolean;
}

Beispiel:

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

#type: 'datetimeNoTz' - Datums-/Uhrzeitfeld ohne Zeitzone

  • Beschreibung: Dient zum Speichern von Datums- und Uhrzeitdaten ohne Zeitzoneninformationen.
  • Datenbanktyp: TIMESTAMP oder DATETIME
  • Spezifische Eigenschaften:
    • timezone: Legt fest, ob Zeitzoneninformationen enthalten sein sollen.
interface DatetimeNoTzFieldOptions extends BaseColumnFieldOptions<'datetime'> {
  type: 'datetimeNoTz';
  timezone?: boolean;
}

Beispiel:

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

#type: 'dateOnly' - Nur-Datumsfeld

  • Beschreibung: Dient zum Speichern von Daten, die nur das Datum ohne Zeit enthalten.
  • Datenbanktyp: DATE
  • Beispiel:
{
  type: 'dateOnly',
  name: 'publishDate',
  title: 'Veröffentlichungsdatum',
  allowNull: true
}

#type: 'unixTimestamp' - Unix-Zeitstempel-Feld

  • Beschreibung: Dient zum Speichern von Unix-Zeitstempeldaten.
  • Datenbanktyp: BIGINT
  • Spezifische Eigenschaften:
    • epoch: Die Epochenzeit.
interface UnixTimestampFieldOptions extends BaseColumnFieldOptions<'unixTimestamp'> {
  type: 'unixTimestamp';
  epoch?: number;  // Epochenzeit
}

Beispiel:

{
  type: 'unixTimestamp',
  name: 'lastLoginAt',
  title: 'Letzter Login',
  allowNull: true,
  epoch: 0
}

#JSON-Typen

#type: 'json' - JSON-Feld

  • Beschreibung: Dient zum Speichern von Daten im JSON-Format, unterstützt komplexe Datenstrukturen.
  • Datenbanktyp: JSON oder TEXT
  • Beispiel:
{
  type: 'json',
  name: 'metadata',
  title: 'Metadaten',
  allowNull: true,
  defaultValue: {}
}

#type: 'jsonb' - JSONB-Feld

  • Beschreibung: Dient zum Speichern von Daten im JSONB-Format (PostgreSQL-spezifisch), das Indizierung und Abfragen unterstützt.
  • Datenbanktyp: JSONB (PostgreSQL)
  • Beispiel:
{
  type: 'jsonb',
  name: 'config',
  title: 'Konfiguration',
  allowNull: true,
  defaultValue: {}
}

#Array-Typen

#type: 'array' - Array-Feld

  • Beschreibung: Dient zum Speichern von Array-Daten, unterstützt verschiedene Elementtypen.
  • Datenbanktyp: JSON oder ARRAY
  • Spezifische Eigenschaften:
    • dataType: Speichertyp (json/array).
    • elementType: Elementtyp (STRING/INTEGER/BOOLEAN/JSON).
interface ArrayFieldOptions extends BaseColumnFieldOptions<'array'> {
  type: 'array';
  dataType?: 'json' | 'array';  // Speichertyp
  elementType?: 'STRING' | 'INTEGER' | 'BOOLEAN' | 'JSON'; // Elementtyp
}

Beispiel:

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

#type: 'set' - Set-Feld

  • Beschreibung: Dient zum Speichern von Set-Daten, ähnlich einem Array, aber mit einer Eindeutigkeitsbedingung.
  • Datenbanktyp: JSON oder ARRAY
  • Spezifische Eigenschaften:
    • dataType: Speichertyp (json/array).
    • elementType: Elementtyp (STRING/INTEGER/BOOLEAN/JSON).
interface SetFieldOptions extends BaseColumnFieldOptions<'set'> {
  type: 'set';
  dataType?: 'json' | 'array';
  elementType?: 'STRING' | 'INTEGER' | 'BOOLEAN' | 'JSON';
}

Beispiel:

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

#Bezeichner-Typen

#type: 'uuid' - UUID-Feld

  • Beschreibung: Dient zum Speichern eindeutiger Bezeichner im UUID-Format.
  • Datenbanktyp: UUID oder VARCHAR(36)
  • Spezifische Eigenschaften:
    • autoFill: Automatische Befüllung.
interface UUIDFieldOptions extends BaseColumnFieldOptions<'uuid'> {
  type: 'uuid';
  autoFill?: boolean;  // Automatische Befüllung
}

Beispiel:

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

#type: 'nanoid' - Nanoid-Feld

  • Beschreibung: Dient zum Speichern kurzer, eindeutiger Bezeichner im Nanoid-Format.
  • Datenbanktyp: VARCHAR
  • Spezifische Eigenschaften:
    • size: Länge der ID.
    • customAlphabet: Benutzerdefinierter Zeichensatz.
    • autoFill: Automatische Befüllung.
interface NanoidFieldOptions extends BaseColumnFieldOptions<'nanoid'> {
  type: 'nanoid';
  size?: number;  // ID-Länge
  customAlphabet?: string;  // Benutzerdefinierter Zeichensatz
  autoFill?: boolean;
}

Beispiel:

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

#type: 'uid' - Benutzerdefiniertes UID-Feld

  • Beschreibung: Dient zum Speichern eindeutiger Bezeichner in einem benutzerdefinierten Format.
  • Datenbanktyp: VARCHAR
  • Spezifische Eigenschaften:
    • prefix: Präfix.
    • pattern: Validierungsmuster.
interface UidFieldOptions extends BaseColumnFieldOptions<'uid'> {
  type: 'uid';
  prefix?: string;  // Präfix
  pattern?: string; // Validierungsmuster
}

Beispiel:

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

#type: 'snowflakeId' - Snowflake-ID-Feld

  • Beschreibung: Dient zum Speichern eindeutiger Bezeichner, die mit dem Snowflake-Algorithmus generiert wurden.
  • Datenbanktyp: BIGINT
  • Beispiel:
{
  type: 'snowflakeId',
  name: 'snowflakeId',
  title: 'Snowflake-ID',
  allowNull: false,
  unique: true
}

#Funktionsfelder

#type: 'password' - Passwortfeld

  • Beschreibung: Dient zum Speichern verschlüsselter Passwortdaten.
  • Datenbanktyp: VARCHAR
  • Spezifische Eigenschaften:
    • length: Hash-Länge.
    • randomBytesSize: Größe der Zufallsbytes.
interface PasswordFieldOptions extends BaseColumnFieldOptions<'password'> {
  type: 'password';
  length?: number;  // Hash-Länge
  randomBytesSize?: number;  // Größe der Zufallsbytes
}

Beispiel:

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

#type: 'encryption' - Verschlüsselungsfeld

  • Beschreibung: Dient zum Speichern verschlüsselter sensibler Daten.
  • Datenbanktyp: VARCHAR
  • Beispiel:
{
  type: 'encryption',
  name: 'secret',
  title: 'Schlüssel',
  allowNull: true,
  hidden: true
}

#type: 'virtual' - Virtuelles Feld

  • Beschreibung: Dient zum Speichern von berechneten virtuellen Daten, die nicht in der Datenbank gespeichert werden.
  • Datenbanktyp: Keine (virtuelles Feld)
  • Beispiel:
{
  type: 'virtual',
  name: 'fullName',
  title: 'Vollständiger Name'
}

#type: 'context' - Kontextfeld

  • Beschreibung: Dient zum Lesen von Daten aus dem Laufzeitkontext (z. B. aktuelle Benutzerinformationen).
  • Datenbanktyp: Bestimmt durch dataType.
  • Spezifische Eigenschaften:
    • dataIndex: Datenindexpfad.
    • dataType: Datentyp.
    • createOnly: Nur bei Erstellung festlegen.
interface ContextFieldOptions extends BaseFieldOptions {
  type: 'context';
  dataIndex?: string;  // Datenindexpfad
  dataType?: string;   // Datentyp
  createOnly?: boolean; // Nur bei Erstellung festlegen
}

Beispiel:

{
  type: 'context',
  name: 'currentUserId',
  title: 'Aktuelle Benutzer-ID',
  dataIndex: 'user.id',
  dataType: 'integer',
  createOnly: true,
  allowNull: false
}

#Beziehungsfelder

#type: 'belongsTo' - Gehört-zu-Beziehung

  • Beschreibung: Stellt eine Viele-zu-Eins-Beziehung dar, bei der der aktuelle Datensatz zu einem anderen Datensatz gehört.
  • Datenbanktyp: Fremdschlüsselfeld
  • Spezifische Eigenschaften:
    • target: Name der Zielsammlung.
    • foreignKey: Name des Fremdschlüsselfeldes.
    • targetKey: Name des Zielfeldes in der Zielsammlung.
    • onDelete: Kaskadenaktion beim Löschen.
    • onUpdate: Kaskadenaktion beim Aktualisieren.
    • constraints: Legt fest, ob Fremdschlüsselbeschränkungen aktiviert werden sollen.
interface BelongsToFieldOptions extends BaseRelationFieldOptions {
  type: 'belongsTo';
  target: string;  // Name der Zielsammlung
  foreignKey?: string;  // Name des Fremdschlüsselfeldes
  targetKey?: string;   // Name des Zielfeldes in der Zielsammlung
  onDelete?: 'CASCADE' | 'SET NULL' | 'RESTRICT' | 'NO ACTION';
  onUpdate?: 'CASCADE' | 'SET NULL' | 'RESTRICT' | 'NO ACTION';
  constraints?: boolean;  // Ob Fremdschlüsselbeschränkungen aktiviert werden sollen
}

Beispiel:

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

#type: 'hasOne' - Hat-eine-Beziehung

  • Beschreibung: Stellt eine Eins-zu-Eins-Beziehung dar, bei der der aktuelle Datensatz einen zugehörigen Datensatz besitzt.
  • Datenbanktyp: Fremdschlüsselfeld
  • Spezifische Eigenschaften:
    • target: Name der Zielsammlung.
    • foreignKey: Name des Fremdschlüsselfeldes.
    • sourceKey: Name des Quellschlüsselfeldes in der Quellsammlung.
    • onDelete: Kaskadenaktion beim Löschen.
    • onUpdate: Kaskadenaktion beim Aktualisieren.
    • constraints: Legt fest, ob Fremdschlüsselbeschränkungen aktiviert werden sollen.
interface HasOneFieldOptions extends BaseRelationFieldOptions {
  type: 'hasOne';
  target: string;
  foreignKey?: string;
  sourceKey?: string;  // Name des Quellschlüsselfeldes
  onDelete?: 'CASCADE' | 'SET NULL' | 'RESTRICT' | 'NO ACTION';
  onUpdate?: 'CASCADE' | 'SET NULL' | 'RESTRICT' | 'NO ACTION';
  constraints?: boolean;
}

Beispiel:

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

#type: 'hasMany' - Hat-viele-Beziehung

  • Beschreibung: Stellt eine Eins-zu-Viele-Beziehung dar, bei der der aktuelle Datensatz mehrere zugehörige Datensätze besitzt.
  • Datenbanktyp: Fremdschlüsselfeld
  • Spezifische Eigenschaften:
    • target: Name der Zielsammlung.
    • foreignKey: Name des Fremdschlüsselfeldes.
    • sourceKey: Name des Quellschlüsselfeldes in der Quellsammlung.
    • sortBy: Sortierfeld.
    • sortable: Legt fest, ob das Feld sortierbar ist.
    • onDelete: Kaskadenaktion beim Löschen.
    • onUpdate: Kaskadenaktion beim Aktualisieren.
    • constraints: Legt fest, ob Fremdschlüsselbeschränkungen aktiviert werden sollen.
interface HasManyFieldOptions extends BaseRelationFieldOptions {
  type: 'hasMany';
  target: string;
  foreignKey?: string;
  sourceKey?: string;
  sortBy?: string[];  // Sortierfeld
  sortable?: boolean; // Ob sortierbar
  onDelete?: 'CASCADE' | 'SET NULL' | 'RESTRICT' | 'NO ACTION';
  onUpdate?: 'CASCADE' | 'SET NULL' | 'RESTRICT' | 'NO ACTION';
  constraints?: boolean;
}

Beispiel:

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

#type: 'belongsToMany' - Gehört-zu-vielen-Beziehung

  • Beschreibung: Stellt eine Viele-zu-Viele-Beziehung dar, die zwei Sammlungen über eine Zwischen- oder Verknüpfungstabelle verbindet.
  • Datenbanktyp: Zwischen- oder Verknüpfungstabelle
  • Spezifische Eigenschaften:
    • target: Name der Zielsammlung.
    • through: Name der Zwischen- oder Verknüpfungstabelle.
    • foreignKey: Name des Fremdschlüsselfeldes.
    • otherKey: Der andere Fremdschlüssel in der Zwischen- oder Verknüpfungstabelle.
    • sourceKey: Name des Quellschlüsselfeldes in der Quellsammlung.
    • targetKey: Name des Zielfeldes in der Zielsammlung.
    • onDelete: Kaskadenaktion beim Löschen.
    • onUpdate: Kaskadenaktion beim Aktualisieren.
    • constraints: Legt fest, ob Fremdschlüsselbeschränkungen aktiviert werden sollen.
interface BelongsToManyFieldOptions extends BaseRelationFieldOptions {
  type: 'belongsToMany';
  target: string;
  through: string;  // Name der Zwischen- oder Verknüpfungstabelle
  foreignKey?: string;
  otherKey?: string;  // Der andere Fremdschlüssel in der Zwischen- oder Verknüpfungstabelle
  sourceKey?: string;
  targetKey?: string;
  onDelete?: 'CASCADE' | 'SET NULL' | 'RESTRICT' | 'NO ACTION';
  onUpdate?: 'CASCADE' | 'SET NULL' | 'RESTRICT' | 'NO ACTION';
  constraints?: boolean;
}

Beispiel:

{
  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
}