Regrouper des actions dans un schéma et réutiliser des définitions d'input
NEWSCHEMA(name, fn) regroupe les actions d'une entité. La fonction reçoit l'objet schéma et schema.action(name, meta) enregistre une action appelée Name/action, avec les mêmes options que NEWACTION() (input, output, params, user, permissions, action...). Partout ailleurs, l'action s'utilise sous son nom complet, exactement comme si elle avait été déclarée avec NEWACTION('Users/insert', ...) : ROUTE('POST /users/ --> *Users/insert') ou ACTION('Users/insert', payload).
Un fragment de définition d'input que plusieurs actions partagent, comme une adresse, va dans son propre fichier de jsonschemas/. Un fichier .txt contient la même liste name:Type que input ; le nom du fichier est le nom du schéma. Référencez-le depuis un input avec @Name, et ses champs (ainsi que ceux qui sont obligatoires) s'ajoutent aux champs propres de l'action.
*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');
};