DB
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
schemas/
: Contient les modèles de données (schemas) qui définissent la structure des entités de la base de données.scripts/
: Contient les scripts SQL pour l'initialisation et la gestion de la base de données.data-source.ts
: Configure la connexion à la base de données et initialise la source de données utilisée par TypeORM.DB.drawio
: Diagramme de la base de données pour visualiser les relations entre les entités.
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
).
- Un algorithme est associé à un dossier (
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/
.
- Chaque table correspond à une entité définie dans le dossier
- Relations :
- Les clés étrangères (
FOREIGN KEY
) définissent les relations entre les tables.
- Les clés étrangères (
- 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.
- La source de données (
Exemple de Flux de Données
-
Initialisation de la Base de Données :
- Le script
init.sql
est exécuté pour créer les tables et définir les relations.
- Le script
-
Connexion à la Base de Données :
- Le fichier
data-source.ts
configure la connexion et charge les entités.
- Le fichier
-
Utilisation des Entités :
- Les entités définies dans
schemas/
sont utilisées pour effectuer des opérations CRUD via TypeORM.
- Les entités définies dans