import { NextResponse } from 'next/server'; import { tfsService } from '@/services/integrations/tfs/tfs'; import { getServerSession } from 'next-auth'; import { authOptions } from '@/lib/auth'; /** * Route GET /api/tfs/test * Teste uniquement la connexion TFS/Azure DevOps sans effectuer de synchronisation */ export async function GET() { try { const session = await getServerSession(authOptions); if (!session?.user?.id) { return NextResponse.json( { success: false, error: 'Non authentifié' }, { status: 401 } ); } console.log('🔄 Test de connexion TFS...'); // Valider la configuration via le service singleton avec l'utilisateur connecté const configValidation = await tfsService.validateConfig(session.user.id); if (!configValidation.valid) { return NextResponse.json( { error: 'Configuration TFS invalide', connected: false, details: configValidation.error, }, { status: 400 } ); } // Tester la connexion avec l'utilisateur connecté const isConnected = await tfsService.testConnection(session.user.id); if (isConnected) { // Test approfondi : récupérer des métadonnées try { const repositories = await tfsService.getMetadata(); return NextResponse.json({ message: 'Connexion Azure DevOps réussie', connected: true, details: { repositoriesCount: repositories.repositories.length, }, }); } catch (repoError) { return NextResponse.json( { error: 'Connexion OK mais accès aux repositories limité', connected: false, details: `Vérifiez les permissions du token PAT: ${repoError instanceof Error ? repoError.message : 'Erreur inconnue'}`, }, { status: 403 } ); } } else { return NextResponse.json( { error: 'Connexion Azure DevOps échouée', connected: false, details: "Vérifiez l'URL d'organisation et le token PAT", }, { status: 401 } ); } } catch (error) { console.error('❌ Erreur test connexion TFS:', error); return NextResponse.json( { error: 'Erreur interne', connected: false, details: error instanceof Error ? error.message : 'Erreur inconnue', }, { status: 500 } ); } }