Acties groeperen in een schema en input-definities hergebruiken
NEWSCHEMA(name, fn) groepeert de acties van één entiteit. De functie krijgt het schema-object en schema.action(name, meta) registreert een actie met de naam Name/action, met dezelfde opties als NEWACTION() (input, output, params, user, permissions, action...). Overal elders wordt de actie met zijn volledige naam gebruikt, precies alsof hij met NEWACTION('Users/insert', ...) was gedeclareerd: ROUTE('POST /users/ --> *Users/insert') of ACTION('Users/insert', payload).
Een fragment van een input-definitie dat meerdere acties delen, zoals een adres, komt in een eigen bestand in jsonschemas/. Een .txt-bestand bevat dezelfde name:Type-lijst als input; de bestandsnaam is de naam van het schema. Verwijs er vanuit een input naar met @Name, en de velden (en welke daarvan verplicht zijn) worden bij de eigen velden van de actie gevoegd.
*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');
};