Files
chopin/backend/src/utils/Database/Database.js

87 lines
2.3 KiB
JavaScript

const fs = require('fs');
const path = require('path');
const { LogType } = require('loguix');
const { __glob } = require("../GlobalVars")
const AllDatabases = {}
const clog = new LogType("DataBase")
function getDatabase(name) {
return AllDatabases[name]
}
class Database {
data;
path;
name;
empty;
constructor(name, path, empty) {
if(name == undefined || path == undefined) throw clog.error("Impossible de créer une base de données sans nom ou sans chemin")
clog.log(`Enregistrement de la base de données '${name}' contenu dans ${path}`)
this.name = name;
this.path = path;
this.data = {};
if(empty) this.empty = empty; else this.empty = {}
this.load()
AllDatabases[name] = this
}
load() {
clog.log(`Chargement de la base de données '${this.name}'`)
try {
this.create()
this.update()
} catch(e) {
clog.error(`Erreur lors du chargement de la base de données '${this.name}'`)
clog.error(e)
}
}
create() {
try {
if(!fs.existsSync(this.path)) {
clog.warn(`Le fichier de la base de données '${this.name}' n'existe pas, création du fichier`)
fs.writeFileSync(this.path, JSON.stringify(this.empty, null, 2))
}
} catch(e) {
clog.error(`Erreur lors de la création de la base de données '${this.name}'`)
clog.error(e)
}
}
save() {
try {
clog.log(`Sauvegarde de la base de données '${this.name}'`)
fs.writeFileSync(this.path, JSON.stringify(this.data, null, 2))
} catch(e) {
clog.error(`Erreur lors de la sauvegarde de la base de données '${this.name}'`)
clog.error(e)
}
}
update() {
try{
clog.log(`Mise à jour de la base de données '${this.name}'`)
let rawdata = fs.readFileSync(this.path);
this.data = JSON.parse(rawdata);
clog.log(`Base de donnée '${this.name}' chargée avec succès`)
} catch(e) {
clog.error(`Erreur lors de la mise à jour de la base de données '${this.name}'`)
clog.error(e)
}
}
}
module.exports = {Database, getDatabase}