ForgeTotal.js 5
fr

Total.js 5

Regrouper des actions dans un schéma et réutiliser des définitions d'input

Total.js 5 · total5@0.0.19 schemaactionsvalidation Exécutée avec Total.js 5

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.

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');
};