feat: integrate Jira ticket linking in TaskCard

- Added functionality to generate Jira ticket URLs based on user preferences, enhancing task interactivity.
- Updated UserPreferences to include Jira configuration, ensuring seamless integration with Jira settings.
- Refactored TaskCard to conditionally render Jira links, improving user experience when interacting with Jira tasks.
This commit is contained in:
Julien Froidefond
2025-09-17 14:50:32 +02:00
parent b0dc1bec11
commit 21500269e1
3 changed files with 68 additions and 8 deletions

View File

@@ -1,5 +1,6 @@
import { TaskStatus, KanbanFilters, ViewPreferences, ColumnVisibility, UserPreferences } from '@/lib/types';
import { TaskStatus, KanbanFilters, ViewPreferences, ColumnVisibility, UserPreferences, JiraConfig } from '@/lib/types';
import { prisma } from './database';
import { getConfig } from '@/lib/config';
// Valeurs par défaut
const DEFAULT_PREFERENCES: UserPreferences = {
@@ -21,6 +22,9 @@ const DEFAULT_PREFERENCES: UserPreferences = {
},
columnVisibility: {
hiddenStatuses: []
},
jiraConfig: {
enabled: false
}
};
@@ -161,31 +165,51 @@ class UserPreferencesService {
}
}
/**
* Récupère la configuration Jira depuis les variables d'environnement
*/
async getJiraConfig(): Promise<JiraConfig> {
try {
const config = getConfig();
return {
baseUrl: config.integrations.jira.baseUrl,
email: config.integrations.jira.email,
enabled: config.integrations.jira.enabled
};
} catch (error) {
console.warn('Erreur lors de la récupération de la config Jira:', error);
return DEFAULT_PREFERENCES.jiraConfig;
}
}
/**
* Récupère toutes les préférences utilisateur
*/
async getAllPreferences(): Promise<UserPreferences> {
const [kanbanFilters, viewPreferences, columnVisibility] = await Promise.all([
const [kanbanFilters, viewPreferences, columnVisibility, jiraConfig] = await Promise.all([
this.getKanbanFilters(),
this.getViewPreferences(),
this.getColumnVisibility()
this.getColumnVisibility(),
this.getJiraConfig()
]);
return {
kanbanFilters,
viewPreferences,
columnVisibility
columnVisibility,
jiraConfig
};
}
/**
* Sauvegarde toutes les préférences utilisateur
* Sauvegarde toutes les préférences utilisateur (jiraConfig ignorée car elle vient des env vars)
*/
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
]);
}