From f4c6b1181f718ecfba3c9081af3a4a8c787462c4 Mon Sep 17 00:00:00 2001 From: Julien Froidefond Date: Fri, 3 Oct 2025 07:51:57 +0200 Subject: [PATCH] feat: enhance TFS and Jira field tests with user-specific configurations - Updated `testJiraFields` and `testStoryPoints` to accept a `userId` from command line arguments, allowing for user-specific Jira configurations. - Modified TFS sync and test routes to include user authentication checks and pass the logged-in user's ID for task synchronization and connection testing. - Refactored `TfsService` methods to utilize user-specific configurations, improving flexibility and accuracy in TFS operations. --- scripts/test-jira-fields.ts | 5 +++-- scripts/test-story-points.ts | 5 +++-- src/app/api/tfs/sync/route.ts | 26 ++++++++++++++++++++++---- src/app/api/tfs/test/route.ts | 18 ++++++++++++++---- src/services/integrations/tfs.ts | 17 +++++++++-------- 5 files changed, 51 insertions(+), 20 deletions(-) diff --git a/scripts/test-jira-fields.ts b/scripts/test-jira-fields.ts index cad9ca5..b2be8a7 100644 --- a/scripts/test-jira-fields.ts +++ b/scripts/test-jira-fields.ts @@ -12,8 +12,9 @@ async function testJiraFields() { console.log('🔍 Identification des champs personnalisés Jira\n'); try { - // Récupérer la config Jira - const jiraConfig = await userPreferencesService.getJiraConfig('default'); + // Récupérer la config Jira pour l'utilisateur spécifié ou 'default' + const userId = process.argv[2] || 'default'; + const jiraConfig = await userPreferencesService.getJiraConfig(userId); if (!jiraConfig.enabled || !jiraConfig.baseUrl || !jiraConfig.email || !jiraConfig.apiToken) { console.log('❌ Configuration Jira manquante'); diff --git a/scripts/test-story-points.ts b/scripts/test-story-points.ts index b06388c..7a33cca 100644 --- a/scripts/test-story-points.ts +++ b/scripts/test-story-points.ts @@ -12,8 +12,9 @@ async function testStoryPoints() { console.log('🧪 Test de récupération des story points Jira\n'); try { - // Récupérer la config Jira - const jiraConfig = await userPreferencesService.getJiraConfig('default'); + // Récupérer la config Jira pour l'utilisateur spécifié ou 'default' + const userId = process.argv[2] || 'default'; + const jiraConfig = await userPreferencesService.getJiraConfig(userId); if (!jiraConfig.enabled || !jiraConfig.baseUrl || !jiraConfig.email || !jiraConfig.apiToken) { console.log('❌ Configuration Jira manquante'); diff --git a/src/app/api/tfs/sync/route.ts b/src/app/api/tfs/sync/route.ts index 265a1e9..d07dc9f 100644 --- a/src/app/api/tfs/sync/route.ts +++ b/src/app/api/tfs/sync/route.ts @@ -1,5 +1,7 @@ import { NextResponse } from 'next/server'; import { tfsService } from '@/services/integrations/tfs'; +import { getServerSession } from 'next-auth'; +import { authOptions } from '@/lib/auth'; /** * Route POST /api/tfs/sync @@ -8,10 +10,18 @@ import { tfsService } from '@/services/integrations/tfs'; // eslint-disable-next-line @typescript-eslint/no-unused-vars export async function POST(_request: Request) { try { + const session = await getServerSession(authOptions); + if (!session?.user?.id) { + return NextResponse.json( + { success: false, error: 'Non authentifié' }, + { status: 401 } + ); + } + console.log('🔄 Début de la synchronisation TFS manuelle...'); - // Effectuer la synchronisation via le service singleton - const result = await tfsService.syncTasks(); + // Effectuer la synchronisation via le service singleton avec l'utilisateur connecté + const result = await tfsService.syncTasks(session.user.id); if (result.success) { return NextResponse.json({ @@ -46,8 +56,16 @@ export async function POST(_request: Request) { */ export async function GET() { try { - // Tester la connexion via le service singleton - const isConnected = await tfsService.testConnection(); + const session = await getServerSession(authOptions); + if (!session?.user?.id) { + return NextResponse.json( + { success: false, error: 'Non authentifié' }, + { status: 401 } + ); + } + + // Tester la connexion via le service singleton avec l'utilisateur connecté + const isConnected = await tfsService.testConnection(session.user.id); if (isConnected) { return NextResponse.json({ diff --git a/src/app/api/tfs/test/route.ts b/src/app/api/tfs/test/route.ts index ea3ee4c..1313d0d 100644 --- a/src/app/api/tfs/test/route.ts +++ b/src/app/api/tfs/test/route.ts @@ -1,5 +1,7 @@ import { NextResponse } from 'next/server'; import { tfsService } from '@/services/integrations/tfs'; +import { getServerSession } from 'next-auth'; +import { authOptions } from '@/lib/auth'; /** * Route GET /api/tfs/test @@ -7,10 +9,18 @@ import { tfsService } from '@/services/integrations/tfs'; */ 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 - const configValidation = await tfsService.validateConfig(); + // 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( { @@ -22,8 +32,8 @@ export async function GET() { ); } - // Tester la connexion - const isConnected = await tfsService.testConnection(); + // 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 diff --git a/src/services/integrations/tfs.ts b/src/services/integrations/tfs.ts index 1cc4cfa..58b7768 100644 --- a/src/services/integrations/tfs.ts +++ b/src/services/integrations/tfs.ts @@ -1053,13 +1053,14 @@ class TfsServiceInstance extends TfsService { super({ enabled: false }); // Config vide par défaut } - private async getConfig(): Promise { - const userConfig = await userPreferencesService.getTfsConfig('default'); + private async getConfig(userId?: string): Promise { + const targetUserId = userId || 'default'; + const userConfig = await userPreferencesService.getTfsConfig(targetUserId); return userConfig; } - async testConnection(): Promise { - const config = await this.getConfig(); + async testConnection(userId?: string): Promise { + const config = await this.getConfig(userId); if (!config.enabled || !config.organizationUrl || !config.personalAccessToken) { return false; } @@ -1068,14 +1069,14 @@ class TfsServiceInstance extends TfsService { return service.testConnection(); } - async validateConfig(): Promise<{ valid: boolean; error?: string }> { - const config = await this.getConfig(); + async validateConfig(userId?: string): Promise<{ valid: boolean; error?: string }> { + const config = await this.getConfig(userId); const service = new TfsService(config); return service.validateConfig(); } - async syncTasks(): Promise { - const config = await this.getConfig(); + async syncTasks(userId?: string): Promise { + const config = await this.getConfig(userId); const service = new TfsService(config); return service.syncTasks(); }