feat: jira config in database

This commit is contained in:
Julien Froidefond
2025-09-17 18:04:13 +02:00
parent 83e48d5972
commit 0223611b3f
10 changed files with 383 additions and 50 deletions

View File

@@ -24,7 +24,10 @@ const DEFAULT_PREFERENCES: UserPreferences = {
hiddenStatuses: []
},
jiraConfig: {
enabled: false
enabled: false,
baseUrl: '',
email: '',
apiToken: ''
}
};
@@ -47,6 +50,7 @@ class UserPreferencesService {
kanbanFilters: DEFAULT_PREFERENCES.kanbanFilters,
viewPreferences: DEFAULT_PREFERENCES.viewPreferences,
columnVisibility: DEFAULT_PREFERENCES.columnVisibility,
jiraConfig: DEFAULT_PREFERENCES.jiraConfig as any,
}
});
@@ -165,15 +169,43 @@ class UserPreferencesService {
}
}
// === CONFIGURATION JIRA ===
/**
* Récupère la configuration Jira depuis les variables d'environnement
* Sauvegarde la configuration Jira
*/
async saveJiraConfig(config: JiraConfig): Promise<void> {
try {
const userPrefs = await this.getOrCreateUserPreferences();
await prisma.userPreferences.update({
where: { id: userPrefs.id },
data: { jiraConfig: config as any }
});
} catch (error) {
console.warn('Erreur lors de la sauvegarde de la config Jira:', error);
throw error;
}
}
/**
* Récupère la configuration Jira depuis la base de données avec fallback sur les variables d'environnement
*/
async getJiraConfig(): Promise<JiraConfig> {
try {
const userPrefs = await this.getOrCreateUserPreferences();
const dbConfig = (userPrefs as any).jiraConfig as JiraConfig | null;
// Si config en DB, l'utiliser
if (dbConfig && (dbConfig.baseUrl || dbConfig.email || dbConfig.apiToken)) {
return { ...DEFAULT_PREFERENCES.jiraConfig, ...dbConfig };
}
// Sinon fallback sur les variables d'environnement (existant)
const config = getConfig();
return {
baseUrl: config.integrations.jira.baseUrl,
email: config.integrations.jira.email,
apiToken: '', // On ne retourne pas le token des env vars pour la sécurité
enabled: config.integrations.jira.enabled
};
} catch (error) {
@@ -202,14 +234,14 @@ class UserPreferencesService {
}
/**
* Sauvegarde toutes les préférences utilisateur (jiraConfig ignorée car elle vient des env vars)
* Sauvegarde toutes les préférences utilisateur
*/
async saveAllPreferences(preferences: UserPreferences): Promise<void> {
await Promise.all([
this.saveKanbanFilters(preferences.kanbanFilters),
this.saveViewPreferences(preferences.viewPreferences),
this.saveColumnVisibility(preferences.columnVisibility)
// jiraConfig n'est pas sauvegardée car elle vient des variables d'environnement
this.saveColumnVisibility(preferences.columnVisibility),
this.saveJiraConfig(preferences.jiraConfig)
]);
}
@@ -225,6 +257,7 @@ class UserPreferencesService {
kanbanFilters: DEFAULT_PREFERENCES.kanbanFilters,
viewPreferences: DEFAULT_PREFERENCES.viewPreferences,
columnVisibility: DEFAULT_PREFERENCES.columnVisibility,
jiraConfig: DEFAULT_PREFERENCES.jiraConfig as any,
}
});
} catch (error) {