ForgeTotal.js 5
es

Total.js 5

Agrupa acciones en un schema y reutiliza definiciones de input

Total.js 5 · total5@0.0.19 schemaactionsvalidation Ejecutada con Total.js 5

NEWSCHEMA(name, fn) agrupa las acciones de una entidad. La función recibe el objeto del schema y schema.action(name, meta) registra una acción llamada Name/action, con las mismas opciones que NEWACTION() (input, output, params, user, permissions, action...). En el resto del código la acción se usa por su nombre completo, exactamente igual que si se hubiera declarado con NEWACTION('Users/insert', ...): ROUTE('POST /users/ --> *Users/insert') o ACTION('Users/insert', payload).

Un fragmento de definición de input que comparten varias acciones, como una dirección, va en su propio archivo dentro de jsonschemas/. Un archivo .txt contiene la misma lista name:Type que input; el nombre del archivo es el nombre del schema. Referéncialo desde un input con @Name y sus campos (y cuáles son obligatorios) se añaden a los campos propios de la acción.

jsonschemas/Address.txt
*street:String, *city:String, zip:String
schemas/users.js
NEWSCHEMA('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 });
		}
	});

});
controllers/users.js
exports.install = function() {
	ROUTE('POST /users/ --> *Users/insert');
	ROUTE('GET /users/count/ --> *Users/count');
};