'use server'; import { JiraAnalyticsService, JiraAnalyticsConfig } from '@/services/jira-analytics'; import { JiraAdvancedFiltersService } from '@/services/jira-advanced-filters'; import { userPreferencesService } from '@/services/user-preferences'; import { AvailableFilters, JiraAnalyticsFilters, JiraAnalytics } from '@/lib/types'; export interface FiltersResult { success: boolean; data?: AvailableFilters; error?: string; } export interface FilteredAnalyticsResult { success: boolean; data?: JiraAnalytics; error?: string; } /** * Récupère les filtres disponibles depuis les données Jira */ export async function getAvailableJiraFilters(): Promise { try { // Récupérer la config Jira const jiraConfig = await userPreferencesService.getJiraConfig(); if (!jiraConfig?.baseUrl || !jiraConfig?.email || !jiraConfig?.apiToken || !jiraConfig?.projectKey) { return { success: false, error: 'Configuration Jira incomplète' }; } // Récupérer toutes les issues du projet pour extraire les filtres if (!jiraConfig.baseUrl || !jiraConfig.projectKey) { return { success: false, error: 'Configuration Jira incomplète' }; } const analyticsService = new JiraAnalyticsService(jiraConfig as JiraAnalyticsConfig); // Récupérer la liste des issues pour extraire les filtres const allIssues = await analyticsService.getAllProjectIssues(); // Extraire les filtres disponibles const availableFilters = JiraAdvancedFiltersService.extractAvailableFilters(allIssues); return { success: true, data: availableFilters }; } catch (error) { console.error('❌ Erreur lors de la récupération des filtres:', error); return { success: false, error: error instanceof Error ? error.message : 'Erreur inconnue' }; } } /** * Applique des filtres aux analytics et retourne les données filtrées */ export async function getFilteredJiraAnalytics(filters: Partial): Promise { try { // Récupérer la config Jira const jiraConfig = await userPreferencesService.getJiraConfig(); if (!jiraConfig?.baseUrl || !jiraConfig?.email || !jiraConfig?.apiToken || !jiraConfig?.projectKey) { return { success: false, error: 'Configuration Jira incomplète' }; } // Récupérer les analytics originales if (!jiraConfig.baseUrl || !jiraConfig.projectKey) { return { success: false, error: 'Configuration Jira incomplète' }; } const analyticsService = new JiraAnalyticsService(jiraConfig as JiraAnalyticsConfig); const originalAnalytics = await analyticsService.getProjectAnalytics(); // Si aucun filtre actif, retourner les données originales if (!JiraAdvancedFiltersService.hasActiveFilters(filters)) { return { success: true, data: originalAnalytics }; } // Récupérer toutes les issues pour appliquer les filtres const allIssues = await analyticsService.getAllProjectIssues(); // Appliquer les filtres const filteredAnalytics = JiraAdvancedFiltersService.applyFiltersToAnalytics( originalAnalytics, filters, allIssues ); return { success: true, data: filteredAnalytics }; } catch (error) { console.error('❌ Erreur lors du filtrage des analytics:', error); return { success: false, error: error instanceof Error ? error.message : 'Erreur inconnue' }; } }