Version: 2.1.2 (latest)

Le Modèle Todo

Créons votre premier modèle. La CLI fournit une commande utile pour générer un nouveau fichier avec un modèle vide.

foal generate entity todo

FoalTS utilise TypeORM, un Object-Relational Mapper complet, pour communiquer avec la (les) base(s) de données. Dans TypeORM, les modèles simples sont appelés entités et sont des classes décorées avec le décorateur Entity.

Chaque nouveau projet dans FoalTS utilise une base de données SQLite car elle ne nécessite aucune installation supplémentaire. Mais TypeORM prend en charge de nombreuses autres bases de données. Nous garderons celle-ci dans ce tutoriel pour plus de simplicité.

Ouvrez le fichier todo.entity.ts dans le répertoire src/app/entities et ajoutez une colonne text.

import { BaseEntity, Column, Entity, PrimaryGeneratedColumn } from 'typeorm';
@Entity()
export class Todo extends BaseEntity {
@PrimaryGeneratedColumn()
id: number;
@Column()
text: string;
}

Cette classe est la représentation de la table SQL todo. Actuellement, cette table n'existe pas dans la base de données. Vous allez devoir la créer.

Vous pouvez le faire manuellement, en utilisant un logiciel de base de données par exemple, ou utiliser les migrations, une façon programmatique de mettre à jour un schéma de base de données. L'avantage de l'utilisation des migrations est que vous pouvez créer, mettre à jour et supprimer vos tables directement à partir de la définition de vos entités. Elles permettent également de s'assurer que tous vos environnements (prod, dev) et vos co-développeurs ont les mêmes définitions de tables.

Voyons comment les utiliser.

Exécutez d’abord la commande suivante pour générer votre fichier de migration. TypeORM va comparer votre schéma de base de données actuel avec la définition de vos entités et générer les requêtes SQL appropriées.

npm run makemigrations

Un nouveau fichier apparaît dans le répertoire src/migrations/. Ouvrez-le.

import {MigrationInterface, QueryRunner} from "typeorm";
export class migration1562755564200 implements MigrationInterface {
public async up(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query(`CREATE TABLE "todo" ("id" integer PRIMARY KEY AUTOINCREMENT NOT NULL, "text" varchar NOT NULL)`, undefined);
await queryRunner.query(`CREATE TABLE "user" ("id" integer PRIMARY KEY AUTOINCREMENT NOT NULL)`, undefined);
}
public async down(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query(`DROP TABLE "user"`, undefined);
await queryRunner.query(`DROP TABLE "todo"`, undefined);
}
}

La méthode up contient toutes les requêtes SQL qui seront exécutées pendant la migration.

Exécutez ensuite la migration.

npm run migrations

TypeORM examine toutes les migrations qui ont été exécutées précédemment (aucune dans ce cas) et exécute les nouvelles.

Votre base de données (db.sqlite3) contient maintenant une nouvelle table nommée todo :

+------------+-----------+-------------------------------------+
| todo |
+------------+-----------+-------------------------------------+
| id | integer | PRIMARY KEY AUTO_INCREMENT NOT NULL |
| text | varchar | NOT NULL |
+------------+-----------+-------------------------------------+

Vous pouvez également utiliser l'option synchronize dans votre fichier de configuration config/default.json. Lorsque cette option est définie sur true, le schéma de la base de données est automatiquement créé à partir de la définition des entités à chaque lancement de l'application. Vous n'avez pas besoin de migrations dans ce cas. Cependant, bien que ce comportement puisse être utile pendant le débogage et le développement, il n'est pas adapté à un environnement de production (vous pourriez perdre des données de production).