Aller au contenu principal

DB

Chargement...

Description Générale

Le dossier db/ contient tous les fichiers nécessaires pour gérer la base de données de l'application backend d'AlgoForge. Il regroupe les modèles de données (schemas), les scripts SQL pour l'initialisation et la maintenance de la base de données, ainsi que la configuration de la source de données utilisée par TypeORM.


Structure du Dossier db/

Contenu Principal


1. Dossier schemas/

Description

Le dossier schemas/ contient les modèles de données (schemas) qui définissent la structure des entités de la base de données. Ces schemas sont implémentés à l'aide de TypeORM et permettent de mapper les entités de la base de données à des classes TypeScript.

Utilité

  • Définir la structure des entités : Chaque fichier dans ce dossier représente une table de la base de données.
  • Gérer les relations : Les relations entre les entités (par exemple, OneToMany, ManyToOne) sont définies dans ces fichiers.
  • Faciliter les opérations CRUD : Les schemas permettent d'utiliser TypeORM pour effectuer des opérations sur la base de données sans écrire de requêtes SQL.

Exemple : Algorithme.schema.ts

@Entity({ name: "algorithme" })
export class Algorithme {
@PrimaryGeneratedColumn()
id: number;

@Column({ type: "varchar", length: 255, default: "Nouvel algorithme" })
nom: string;

@Column({ type: "bigint", name: "datecreation" })
dateCreation: number;

@ManyToOne(() => Dossier, (dossier) => dossier.algos)
dossier: Relation<Dossier>;

@OneToMany(() => PermAlgorithme, (permAlgo) => permAlgo.algorithme)
permAlgorithmes: Relation<PermAlgorithme[]>;
}

Points Clés :

  • Annotations TypeORM :
    • @Entity : Définit une entité de la base de données.
    • @Column : Définit une colonne dans la table.
    • @ManyToOne, @OneToMany : Définissent les relations entre les entités.
  • Relations :
    • Un algorithme est associé à un dossier (ManyToOne).
    • Un algorithme peut avoir plusieurs permissions (OneToMany).

2. Dossier scripts/

Description

Le dossier scripts/ contient les fichiers SQL nécessaires pour initialiser ou modifier la base de données. Ces scripts sont utilisés pour créer les tables, définir les relations, et insérer des données initiales si nécessaire.

Utilité

  • Initialisation de la base de données : Le fichier init.sql crée les tables et définit leurs relations.
  • Maintenance : Ce dossier peut également contenir des scripts pour effectuer des migrations ou des modifications sur la base de données.

Exemple : init.sql

CREATE TABLE IF NOT EXISTS utilisateur (
id SERIAL PRIMARY KEY,
adressemail VARCHAR(255) NOT NULL,
pseudo VARCHAR(255) NOT NULL,
mdphash VARCHAR(255) NOT NULL,
dateinscription BIGINT NOT NULL,
theme INT NOT NULL DEFAULT 0,
urlpfp VARCHAR(255),
isverified BOOLEAN NOT NULL DEFAULT FALSE
);

CREATE TABLE IF NOT EXISTS algorithme (
id SERIAL PRIMARY KEY,
nom VARCHAR(255) NOT NULL DEFAULT 'Nouvel algorithme',
datecreation BIGINT NOT NULL,
datemodification BIGINT NOT NULL,
iddossier INT NOT NULL,
FOREIGN KEY (iddossier) REFERENCES dossier(id)
);

Points Clés :

  • Création des Tables :
    • Chaque table correspond à une entité définie dans le dossier schemas/.
  • Relations :
    • Les clés étrangères (FOREIGN KEY) définissent les relations entre les tables.
  • Utilisation :
    • Ce script peut être exécuté manuellement ou automatiquement lors du déploiement pour configurer la base de données.

3. Fichier data-source.ts

Description

Le fichier data-source.ts configure la connexion à la base de données et initialise la source de données utilisée par TypeORM. Il centralise les paramètres de connexion et charge les entités définies dans le dossier schemas/.

Utilité

  • Connexion à la base de données : Configure les paramètres de connexion (type, hôte, port, utilisateur, mot de passe, etc.).
  • Chargement des entités : Charge automatiquement les entités définies dans le dossier schemas/.
  • Synchronisation : Permet de synchroniser les entités avec la base de données en mode développement ou test.

Exemple

export const AppDataSource = new DataSource({
type: process.env.DATABASE_TYPE,
host: process.env.DATABASE_HOST,
port: Number(process.env.DATABASE_PORT),
username: process.env.DATABASE_USER,
password: process.env.DATABASE_PASSWORD,
database: process.env.DATABASE_NAME,
entities: [Utilisateur, Algorithme, Token, Dossier, PermDossier, PermAlgorithme],
synchronize: process.env.BUILD === "dev",
logging: false,
});

Points Clés :

  • Support Multi-Base de Données :
    • Prend en charge MySQL, PostgreSQL, et SQLite en fonction des variables d'environnement.
  • Synchronisation Automatique :
    • En mode développement, les entités sont synchronisées avec la base de données.
  • Utilisation :
    • La source de données (AppDataSource) est utilisée dans tout le projet pour interagir avec la base de données.

Exemple de Flux de Données

  1. Initialisation de la Base de Données :

    • Le script init.sql est exécuté pour créer les tables et définir les relations.
  2. Connexion à la Base de Données :

    • Le fichier data-source.ts configure la connexion et charge les entités.
  3. Utilisation des Entités :

    • Les entités définies dans schemas/ sont utilisées pour effectuer des opérations CRUD via TypeORM.