# La structure du projet d'une application Total.js 5

> Les dossiers d’un projet Total.js 5, leur contenu et leur chargement automatique.

Framework: total5
Product: Total.js 5 (total5@0.0.19)
Language: fr
Content-SHA256: 76f467231ec237eae042ff260570ef523f6c4af6eaaf4f1a4a8a6ca6f84e8370
Snapshot: c0700e321579725c5cf4f5ace1ad7d2866d1b4f93c24a63c0b41b6b7998e976c
Sources: total5-installed@total5@0.0.19
Review: not-recorded

Une application Total.js est un dossier avec un script de démarrage (`index.js`) et un ensemble de dossiers aux noms fixes. **Vous n'importez pas vos fichiers** : au démarrage, Total.js lit les dossiers ci-dessous et charge chaque fichier `.js` qu'ils contiennent (dans un dossier nommé `plugins/`, il charge le `index.js` de chaque sous-dossier). Un fichier est un module Node.js normal ; s'il exporte une fonction `install`, Total.js l'appelle après avoir chargé le fichier.

| Dossier | Ce qu'il contient |
|---|---|
| `controllers/` | Routes : `exports.install = function() { ROUTE(...) }`. |
| `definitions/` | Code exécuté au démarrage qui déclare des éléments globaux : actions avec `NEWACTION()`, middleware, `AUTH()`, helpers, vos propres globales. |
| `actions/` | Actions (`NEWACTION()`), si vous préférez les séparer des autres définitions. |
| `schemas/` | Schémas (`NEWSCHEMA()`) avec leurs actions. |
| `models/` | Chargé au démarrage comme les autres ; Total.js ne fait que charger les fichiers, leur contenu vous appartient. |
| `middleware/` | Middleware (`MIDDLEWARE()`), chargé après les autres dossiers. |
| `modules/` | Modules réutilisables ; l'export peut avoir un `id` (conservé dans `MODS`) et une fonction `install`. |
| `extensions/` | Chargé au démarrage comme les autres ; Total.js ne fait que charger les fichiers, leur contenu vous appartient. |
| `plugins/` | Plugins : un dossier par plugin avec un `index.js`. |
| `views/` | Vues HTML et le `layout.html`. |
| `public/` | Fichiers statiques servis tels quels, sans aucune route. |
| `resources/` | Fichiers de traduction (`.resource`), voir la recette de localisation. |
| `jsonschemas/` | Définitions d'entrée réutilisables (`.txt` ou `.json`), voir la recette des schémas. |
| `databases/` | Fichiers de la base NoSQL intégrée et de `MEMORIZE()`. |
| `tmp/` | Fichiers temporaires et caches (`PATH.tmp()`). |
| `logs/` | Fichiers de journal. |
| `private/` | Fichiers qui ne doivent pas être publics ; envoyez-les avec `$.file()` après une vérification. |
| `workers/` | Fichiers de `NEWTHREAD()` et `NEWFORK()`. |
| `config` | Le fichier de configuration (un fichier, pas un dossier). |

Les helpers de `PATH` construisent le chemin absolu de chaque dossier : `PATH.root()`, `PATH.public()`, `PATH.private()`, `PATH.tmp()`, `PATH.logs()`, `PATH.databases()`. Ils renvoient le chemin sans barre oblique finale, et le dossier des vues n'a pas de helper. L'exemple place un fichier dans chacun des dossiers que Total.js charge et relit ce qui a été chargé.

```js extensions/marker.js
(MAIN.loaded = MAIN.loaded || []).push('extensions');
```

```js modules/marker.js
(MAIN.loaded = MAIN.loaded || []).push('modules');
module.exports.id = 'modules-file';
```

```js actions/marker.js
(MAIN.loaded = MAIN.loaded || []).push('actions');
```

```js schemas/marker.js
(MAIN.loaded = MAIN.loaded || []).push('schemas');
```

```js models/marker.js
(MAIN.loaded = MAIN.loaded || []).push('models');
```

```js definitions/marker.js
(MAIN.loaded = MAIN.loaded || []).push('definitions');
```

```js controllers/marker.js
(MAIN.loaded = MAIN.loaded || []).push('controllers');
```

```js middleware/marker.js
(MAIN.loaded = MAIN.loaded || []).push('middleware');
```

```js controllers/structure.js
exports.install = function() {
	ROUTE('GET /structure/', structure);
};

function structure($) {
	$.json({
		loaded: MAIN.loaded || [],
		modules: Object.keys(MODS),
		paths: {
			root: PATH.root(),
			public: PATH.public(),
			private: PATH.private(),
			tmp: PATH.tmp(),
			logs: PATH.logs(),
			databases: PATH.databases()
		}
	});
}
```
