Actions in einem Schema gruppieren und Input-Definitionen wiederverwenden
NEWSCHEMA(name, fn) gruppiert die Actions einer Entität. Die Funktion erhält das Schema-Objekt, und schema.action(name, meta) registriert eine Action namens Name/action mit denselben Optionen wie NEWACTION() (input, output, params, user, permissions, action...). Überall sonst wird die Action unter ihrem vollständigen Namen verwendet, genau so, als wäre sie mit NEWACTION('Users/insert', ...) deklariert worden: ROUTE('POST /users/ --> *Users/insert') oder ACTION('Users/insert', payload).
Ein Fragment einer Input-Definition, das mehrere Actions teilen, etwa eine Adresse, kommt in eine eigene Datei in jsonschemas/. Eine .txt-Datei enthält dieselbe name:Type-Liste wie input; der Dateiname ist der Name des Schemas. Verweise aus einem input mit @Name darauf, und seine Felder (und welche davon Pflicht sind) werden zu den eigenen Feldern der Action hinzugefügt.
*street:String, *city:String, zip:StringNEWSCHEMA('Users', function(schema) {
schema.action('insert', {
name: 'Create a user',
input: '*name:String, @Address',
output: 'id:UID, name:String, city:String',
action: function($, model) {
$.callback({ id: UID(), name: model.name, city: model.city });
}
});
schema.action('count', {
name: 'Count users',
action: function($) {
$.callback({ count: 2 });
}
});
});exports.install = function() {
ROUTE('POST /users/ --> *Users/insert');
ROUTE('GET /users/count/ --> *Users/count');
};