feat: initialize project with core configuration files and Docker setup
This commit is contained in:
102
src/config/config.js
Normal file
102
src/config/config.js
Normal file
@@ -0,0 +1,102 @@
|
||||
require('dotenv').config();
|
||||
const fs = require('fs');
|
||||
const path = require('path');
|
||||
|
||||
/**
|
||||
* Configuration centralisée de l'application
|
||||
*/
|
||||
const config = {
|
||||
// Configuration Discord
|
||||
discord: {
|
||||
token: process.env.DISCORD_TOKEN,
|
||||
guildId: process.env.DISCORD_GUILD_ID,
|
||||
},
|
||||
|
||||
// Configuration GitLab
|
||||
gitlab: {
|
||||
url: process.env.GITLAB_URL,
|
||||
token: process.env.GITLAB_TOKEN,
|
||||
},
|
||||
|
||||
// Configuration Bot
|
||||
bot: {
|
||||
syncIntervalMinutes: parseInt(process.env.SYNC_INTERVAL_MINUTES) || 5,
|
||||
logLevel: process.env.LOG_LEVEL || 'info',
|
||||
},
|
||||
|
||||
// Configuration des projets et boards (format JSON)
|
||||
projects: [],
|
||||
|
||||
// Initialise la configuration des projets
|
||||
init() {
|
||||
try {
|
||||
// Méthode 1: Fichier JSON dédié
|
||||
const projectsJsonPath = path.join(__dirname, '../../config/projects.json');
|
||||
if (fs.existsSync(projectsJsonPath)) {
|
||||
console.log('Chargement depuis config/projects.json...');
|
||||
const projectsData = fs.readFileSync(projectsJsonPath, 'utf8');
|
||||
this.projects = JSON.parse(projectsData);
|
||||
console.log('Projets chargés depuis le fichier:', this.projects);
|
||||
}
|
||||
// Méthode 2: Configuration legacy (rétrocompatibilité)
|
||||
else if (process.env.GITLAB_PROJECT_ID && process.env.DISCORD_CATEGORY_ID) {
|
||||
console.log('Utilisation de la configuration legacy...');
|
||||
this.projects = [{
|
||||
name: "Default Project",
|
||||
projectId: process.env.GITLAB_PROJECT_ID,
|
||||
categoryId: process.env.DISCORD_CATEGORY_ID,
|
||||
boardIds: []
|
||||
}];
|
||||
console.log('Configuration legacy créée:', this.projects);
|
||||
}
|
||||
// Aucune configuration trouvée
|
||||
else {
|
||||
throw new Error('Aucune configuration trouvée. Créez le fichier config/projects.json ou définissez les variables legacy (GITLAB_PROJECT_ID + DISCORD_CATEGORY_ID)');
|
||||
}
|
||||
|
||||
// Validation des projets avant encoding
|
||||
if (!this.projects || this.projects.length === 0) {
|
||||
throw new Error('Aucun projet configuré');
|
||||
}
|
||||
|
||||
// Encode les project IDs
|
||||
this.projects = this.projects.map(project => ({
|
||||
...project,
|
||||
projectId: encodeURIComponent(project.projectId)
|
||||
}));
|
||||
|
||||
} catch (error) {
|
||||
throw new Error(`Erreur lors de l'initialisation des projets: ${error.message}`);
|
||||
}
|
||||
},
|
||||
|
||||
// Validation de la configuration
|
||||
validate() {
|
||||
const required = [
|
||||
'DISCORD_TOKEN',
|
||||
'DISCORD_GUILD_ID',
|
||||
'GITLAB_URL',
|
||||
'GITLAB_TOKEN'
|
||||
];
|
||||
|
||||
const missing = required.filter(key => !process.env[key]);
|
||||
|
||||
if (missing.length > 0) {
|
||||
throw new Error(`Variables d'environnement manquantes: ${missing.join(', ')}`);
|
||||
}
|
||||
|
||||
// Validation des projets
|
||||
if (this.projects.length === 0) {
|
||||
throw new Error('Aucun projet configuré. Définissez PROJECTS_CONFIG ou les variables legacy.');
|
||||
}
|
||||
|
||||
// Validation de chaque projet
|
||||
for (const project of this.projects) {
|
||||
if (!project.name || !project.projectId || !project.categoryId) {
|
||||
throw new Error(`Configuration projet invalide: ${JSON.stringify(project)}`);
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
module.exports = config;
|
||||
Reference in New Issue
Block a user