125 lines
5.3 KiB
JavaScript
125 lines
5.3 KiB
JavaScript
const fs = require('fs');
|
|
const path = require('path');
|
|
const db = require('./db'); // Assurez-vous d'importer le fichier db.js
|
|
|
|
const PROJECTS_DIR = path.join(__dirname, '../storage');
|
|
|
|
// Fonction pour créer un dossier pour un projet
|
|
function createProjectDirectory(projectId) {
|
|
const projectPath = path.join(PROJECTS_DIR, projectId.toString());
|
|
|
|
console.log(`Tentative de création du dossier pour le projet ${projectId} à ${projectPath}`);
|
|
fs.mkdir(projectPath, { recursive: true }, (err) => {
|
|
if (err) {
|
|
console.error(`Erreur lors de la création du dossier du projet ${projectId}:`, err);
|
|
return;
|
|
}
|
|
console.log(`Dossier créé pour le projet ${projectId} à ${projectPath}`);
|
|
});
|
|
}
|
|
|
|
// Fonction pour récupérer la liste des projets existants et générer leurs dossiers s'ils n'existent pas
|
|
function initializeProjectDirectories() {
|
|
console.log('Initialisation des dossiers de projets existants...');
|
|
db.query('SELECT id FROM public.projects', (err, result) => {
|
|
if (err) {
|
|
console.error('Erreur lors de la récupération des projets existants:', err);
|
|
return;
|
|
}
|
|
console.log('Projets existants récupérés:', result.rows);
|
|
result.rows.forEach(row => {
|
|
const projectId = row.id;
|
|
const projectPath = path.join(PROJECTS_DIR, projectId.toString());
|
|
if (!fs.existsSync(projectPath)) {
|
|
console.log(`Le dossier pour le projet ${projectId} n'existe pas. Création en cours...`);
|
|
createProjectDirectory(projectId);
|
|
} else {
|
|
console.log(`Le dossier pour le projet ${projectId} existe déjà.`);
|
|
}
|
|
});
|
|
});
|
|
}
|
|
|
|
// Fonction pour supprimer les dossiers qui ne font pas partie de la base de données
|
|
function cleanUpProjectDirectories() {
|
|
console.log('Nettoyage des dossiers de projets...');
|
|
fs.readdir(PROJECTS_DIR, (err, files) => {
|
|
if (err) {
|
|
console.error('Erreur lors de la lecture du dossier des projets:', err);
|
|
return;
|
|
}
|
|
console.log('Dossiers de projets trouvés:', files);
|
|
db.query('SELECT id FROM public.projects', (err, result) => {
|
|
if (err) {
|
|
console.error('Erreur lors de la récupération des projets existants:', err);
|
|
return;
|
|
}
|
|
const projectIds = result.rows.map(row => row.id.toString());
|
|
console.log('Projets dans la base de données:', projectIds);
|
|
files.forEach(file => {
|
|
const projectPath = path.join(PROJECTS_DIR, file);
|
|
if (fs.statSync(projectPath).isDirectory() && !projectIds.includes(file)) {
|
|
console.log(`Le dossier ${file} ne correspond à aucun projet dans la base de données. Suppression en cours...`);
|
|
fs.rmdir(projectPath, { recursive: true }, (err) => {
|
|
if (err) {
|
|
console.error(`Erreur lors de la suppression du dossier du projet ${file}:`, err);
|
|
return;
|
|
}
|
|
console.log(`Dossier supprimé pour le projet ${file} à ${projectPath}`);
|
|
});
|
|
}
|
|
});
|
|
});
|
|
});
|
|
}
|
|
|
|
// Nettoyer les dossiers des projets qui ne sont pas dans la base de données
|
|
cleanUpProjectDirectories();
|
|
|
|
// Fonction pour surveiller les changements dans le dossier de projets
|
|
function watchProjects() {
|
|
console.log('Surveillance des changements dans le dossier de projets...');
|
|
fs.watch(PROJECTS_DIR, (eventType, filename) => {
|
|
console.log(`Changement détecté: ${eventType} sur ${filename}`);
|
|
if (eventType === 'rename') {
|
|
const projectId = path.basename(filename);
|
|
if (fs.existsSync(path.join(PROJECTS_DIR, filename))) {
|
|
// Un nouveau projet a été créé
|
|
console.log(`Nouveau projet détecté: ${projectId}`);
|
|
createProjectDirectory(projectId);
|
|
// Ajouter une entrée dans la base de données
|
|
db.query('INSERT INTO public.projects (id, name, status) VALUES ($1, $2, $3)', [projectId, projectId, 0], (err) => {
|
|
if (err) {
|
|
console.error('Erreur lors de l\'ajout du projet à la base de données:', err);
|
|
} else {
|
|
console.log(`Projet ${projectId} ajouté à la base de données.`);
|
|
}
|
|
});
|
|
} else {
|
|
// Un projet a été supprimé
|
|
console.log(`Projet supprimé: ${projectId}`);
|
|
// Supprimer les mesures associées au projet
|
|
db.query('DELETE FROM public.measurements WHERE project_id = $1', [projectId], (err) => {
|
|
if (err) {
|
|
console.error('Erreur lors de la suppression des mesures du projet de la base de données:', err);
|
|
return;
|
|
}
|
|
// Supprimer l'entrée de la base de données
|
|
db.query('DELETE FROM public.projects WHERE id = $1', [projectId], (err) => {
|
|
if (err) {
|
|
console.error('Erreur lors de la suppression du projet de la base de données:', err);
|
|
} else {
|
|
console.log(`Projet ${projectId} supprimé de la base de données.`);
|
|
}
|
|
});
|
|
});
|
|
}
|
|
}
|
|
});
|
|
}
|
|
|
|
// Initialiser les dossiers des projets existants
|
|
initializeProjectDirectories();
|
|
|
|
// Démarrer la surveillance des projets
|
|
watchProjects(); |