# Ομαδοποίηση actions σε ένα schema και επαναχρησιμοποίηση ορισμών input

> Χρησιμοποιήστε το NEWSCHEMA() για να δηλώσετε σχετικά actions κάτω από ένα όνομα και μοιραστείτε έναν ορισμό input μεταξύ actions με ένα αρχείο στο jsonschemas/.

Framework: total5
Product: Total.js 5 (total5@0.0.19)
Language: el
Content-SHA256: 2300ea66e602fcfb4defb8a46156ecc8e2f02b35cc1c32eef1fcc4d56606f40b
Snapshot: c0700e321579725c5cf4f5ace1ad7d2866d1b4f93c24a63c0b41b6b7998e976c
Sources: total5-installed@total5@0.0.19
Review: not-recorded

Το `NEWSCHEMA(name, fn)` ομαδοποιεί τα actions μιας οντότητας. Η συνάρτηση λαμβάνει το αντικείμενο του schema και το `schema.action(name, meta)` καταχωρίζει ένα action με όνομα `Name/action`, με τις ίδιες επιλογές με το `NEWACTION()` (`input`, `output`, `params`, `user`, `permissions`, `action`...). Παντού αλλού το action χρησιμοποιείται με το πλήρες όνομά του, ακριβώς σαν να είχε δηλωθεί με `NEWACTION('Users/insert', ...)`: `ROUTE('POST /users/ --> *Users/insert')` ή `ACTION('Users/insert', payload)`.

Ένα τμήμα ορισμού input που μοιράζονται πολλά actions, όπως μια διεύθυνση, μπαίνει σε δικό του αρχείο στο `jsonschemas/`. Ένα αρχείο `.txt` περιέχει την ίδια λίστα `name:Type` με το `input`· το όνομα του αρχείου είναι το όνομα του schema. Αναφερθείτε σε αυτό από ένα `input` με `@Name` και τα πεδία του (και ποια είναι υποχρεωτικά) προστίθενται στα δικά του πεδία του action.

```text jsonschemas/Address.txt
*street:String, *city:String, zip:String
```

```js 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 });
		}
	});

});
```

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