'use server'; import { jiraAnomalyDetection, JiraAnomaly, AnomalyDetectionConfig, } from '@/services/integrations/jira/anomaly-detection'; import { JiraAnalyticsService, JiraAnalyticsConfig, } from '@/services/integrations/jira/analytics'; import { userPreferencesService } from '@/services/core/user-preferences'; import { getServerSession } from 'next-auth'; import { authOptions } from '@/lib/auth'; export interface AnomalyDetectionResult { success: boolean; data?: JiraAnomaly[]; error?: string; } /** * Détecte les anomalies dans les métriques Jira actuelles */ export async function detectJiraAnomalies( forceRefresh = false ): Promise { try { const session = await getServerSession(authOptions); if (!session?.user?.id) { return { success: false, error: 'Non authentifié' }; } // Récupérer la config Jira const jiraConfig = await userPreferencesService.getJiraConfig( session.user.id ); if ( !jiraConfig?.baseUrl || !jiraConfig?.email || !jiraConfig?.apiToken || !jiraConfig?.projectKey ) { return { success: false, error: 'Configuration Jira incomplète', }; } // Récupérer les analytics actuelles if (!jiraConfig.baseUrl || !jiraConfig.projectKey) { return { success: false, error: 'Configuration Jira incomplète' }; } const analyticsService = new JiraAnalyticsService( jiraConfig as JiraAnalyticsConfig ); const analytics = await analyticsService.getProjectAnalytics(forceRefresh); // Détecter les anomalies const anomalies = await jiraAnomalyDetection.detectAnomalies(analytics); return { success: true, data: anomalies, }; } catch (error) { console.error("❌ Erreur lors de la détection d'anomalies:", error); return { success: false, error: error instanceof Error ? error.message : 'Erreur inconnue', }; } } /** * Met à jour la configuration de détection d'anomalies */ export async function updateAnomalyDetectionConfig( config: Partial ) { try { jiraAnomalyDetection.updateConfig(config); return { success: true, data: jiraAnomalyDetection.getConfig(), }; } catch (error) { console.error('❌ Erreur lors de la mise à jour de la config:', error); return { success: false, error: error instanceof Error ? error.message : 'Erreur inconnue', }; } } /** * Récupère la configuration actuelle de détection d'anomalies */ export async function getAnomalyDetectionConfig() { try { return { success: true, data: jiraAnomalyDetection.getConfig(), }; } catch (error) { console.error('❌ Erreur lors de la récupération de la config:', error); return { success: false, error: error instanceof Error ? error.message : 'Erreur inconnue', }; } }