Die Konfiguration einer Kollektion sollte zur besseren Übersicht innerhalb einer gesonderten Datei im Unterorder "/api/collections/" erfolgen und via "!include" in die "config.yml" eingebunden werden.
# Alle Berechtigungs-Namen, die nicht "public", "user" oder "token:..."
# heißen, sind benutzerdefinierte Berechtigungen, die Benutzern
# zugeordnet werden können.
# Eine mögliche Auflistung um Vorschläge in der Admin-UI anzubieten,
# werden im Top-Level meta-Objekt der "config.yml" unter "permissions"
# definiert.
pages:
methods:
get: true
post: true
put: true
delete: true
# "hooks" definieren die Algorithmen, die Daten und Abläufe zu bestimmten
# HTTP-Methoden und Schritten der API manipulieren können.
hooks:
# Hooks für die Methode "get"
get:
# "read"-Schritt wird ausgeführt, bevor die Daten von der Datenbank
# gelesen werden.
read:
# "type" ist derzeit immer "javascript"
type: javascript
# "file" zeigt auf die Datei mit dem Javascript-Code relativ zum
# Ordner der "config.yml" Datei.
file: hooks/democol/get_read.js
# "return"-Schritt wird ausgeführt, bevor die gelesenen Daten über
# HTTP übertragen werden.
return:
type: javascript
file: hooks/democol/get_return.js
# Hooks für die Methode "post"
post:
# "bind" wird ausgeführt, bevor die übertragenen Daten in eine
# Objekt-Struktur umgewandelt werden.
# Der tibi-server erwarten nach diesem Schritt gültige JSON-Daten,
# d.h. sollte es möglich gemacht werden, dass andere Daten übertragen
# werden, sind diese in diesem Hook abzufangen und zu verarbeiten.
bind:
type: javascript
file: hooks/democol/post_bind.js
# "validate" wird ausgeführt, bevor die Daten validiert werden.
validate:
type: javascript
file: hooks/democol/post_validate.js
# "create" wird ausgeführt, bevor das Objekt/Dokument in der Datenbank
# angelegt wird.
create:
type: javascript
file: hooks/democol/post_create.js
# "return" wird ausgeführt, bevor die Serverantwort über HTTP
# übertragen wird.
return:
type: javascript
file: hooks/democol/post_return.js
# Hooks für die Methode "put"
put:
bind:
type: javascript
file: hooks/democol/put_bind.js
validate:
type: javascript
file: hooks/democol/put_validate.js
# "bind" und "validate" habe die gleiche Bedeutung wie Hooks der
# Methode "post".
# "update" wird ausgeführt bevor das Objekt in der Datenbank
# aktualisiert wird.
update:
type: javascript
file: hooks/democol/put_create.js
# "return" wird auch hier vor der Serverantwort ausgeführt.
return:
type: javascript
file: hooks/democol/put_return.js
# Hooks für die Methode "delete"
delete:
# Der "delete"-Hook wird vor dem eigentlichen Löschen ausgeführt
delete:
type: javascript
file: hooks/democol/delete_delete.js
# "return"-Hook kann ebenso hier die Serverantwort manipulieren
return:
type: javascript
file: hooks/democol/delete_return.js
# "fields" stellen die Eigentliche Struktur der Kollektion dar.
# "fields" ist als Array angelegt um eine Standard-Sortierung
# in der Admin-UI vorzugeben.
fields:
# Das Einbinden von Feldern über extra Dateien bietet sich nur
# an, wenn das jeweilige Feld mehrfach von dieser oder anderen
# Kollektionen verwendet wird.
# Auf die möglichen Definitionen wird im Kapitel "fields"
# eingegangen.
- !include fields/title.yml
- !include fields/date.yml
- !include fields/type.yml
```
## imageFilter Objekt
TODO
## meta Objekt
Wie bereits an anderer Stelle beschrieben, dient das meta-Objekt zur Definition von Merkmalen, die in der Admin-UI Verwendung finden. Zum Anlegen der Struktur in der Datenbank und Definition der API haben diese Angaben keine Relevanz.
Folgende Angaben sind möglich:
```yaml
# Ein Label für die Admin-UI wird mehrsprachig folgendermaßen definiert
label:
de: Demo-Kolletion
en: Demo-Collection
# Jede Kolletion kann ein eigenes Icon aus mdijs bekommen.
muiIcon: web
# Die Standardsortierung bei ersten Aufruf der Kollektion.
defaultSort:
# Nach welchem Feld soll sortiert werden?
field: updatedTime
# ASC für aufsteigend oder DESC für absteigend
order: DESC
# Ist ein Javascript Message-Object-Empfänger implementiert, der empfangene
# Daten als Vorschau rendern kann, so ist dieser hier zu definieren.
# Implementierungshinweise zu einem Solchen gibt es später.