Agrupar ações num schema e reutilizar definições de input
NEWSCHEMA(name, fn) agrupa as ações de uma entidade. A função recebe o objeto do schema e schema.action(name, meta) regista uma ação chamada Name/action, com as mesmas opções que NEWACTION() (input, output, params, user, permissions, action...). Em todos os outros sítios a ação usa-se pelo seu nome completo, exatamente como se tivesse sido declarada com NEWACTION('Users/insert', ...): ROUTE('POST /users/ --> *Users/insert') ou ACTION('Users/insert', payload).
Um fragmento de definição de input que várias ações partilham, como uma morada, vai para o seu próprio ficheiro em jsonschemas/. Um ficheiro .txt contém a mesma lista name:Type que input; o nome do ficheiro é o nome do schema. Referencie-o a partir de um input com @Name e os seus campos (e quais são obrigatórios) são acrescentados aos campos próprios da ação.
*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');
};