import { NextRequest, NextResponse } from 'next/server'; import { userPreferencesService } from '@/services/core/user-preferences'; import { JiraConfig } from '@/lib/types'; /** * GET /api/user-preferences/jira-config * Récupère la configuration Jira */ export async function GET() { try { const jiraConfig = await userPreferencesService.getJiraConfig(); return NextResponse.json({ jiraConfig }); } catch (error) { console.error('Erreur lors de la récupération de la config Jira:', error); return NextResponse.json( { error: 'Erreur lors de la récupération de la configuration Jira' }, { status: 500 } ); } } /** * PUT /api/user-preferences/jira-config * Sauvegarde la configuration Jira */ export async function PUT(request: NextRequest) { try { const body = await request.json(); const { baseUrl, email, apiToken, projectKey, ignoredProjects } = body; // Validation des données requises if (!baseUrl || !email || !apiToken) { return NextResponse.json( { error: 'baseUrl, email et apiToken sont requis' }, { status: 400 } ); } // Validation du format URL try { new URL(baseUrl); } catch { return NextResponse.json( { error: 'baseUrl doit être une URL valide' }, { status: 400 } ); } // Validation du format email const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/; if (!emailRegex.test(email)) { return NextResponse.json( { error: 'email doit être un email valide' }, { status: 400 } ); } const jiraConfig: JiraConfig = { baseUrl: baseUrl.trim(), email: email.trim(), apiToken: apiToken.trim(), enabled: true, projectKey: projectKey ? projectKey.trim().toUpperCase() : undefined, ignoredProjects: Array.isArray(ignoredProjects) ? ignoredProjects.map((p: string) => p.trim().toUpperCase()).filter((p: string) => p.length > 0) : [] }; await userPreferencesService.saveJiraConfig(jiraConfig); return NextResponse.json({ success: true, message: 'Configuration Jira sauvegardée avec succès', jiraConfig: { ...jiraConfig, apiToken: '••••••••' // Masquer le token dans la réponse } }); } catch (error) { console.error('Erreur lors de la sauvegarde de la config Jira:', error); return NextResponse.json( { error: 'Erreur lors de la sauvegarde de la configuration Jira' }, { status: 500 } ); } } /** * DELETE /api/user-preferences/jira-config * Supprime la configuration Jira (remet à zéro) */ export async function DELETE() { try { const defaultConfig: JiraConfig = { baseUrl: '', email: '', apiToken: '', enabled: false, ignoredProjects: [] }; await userPreferencesService.saveJiraConfig(defaultConfig); return NextResponse.json({ success: true, message: 'Configuration Jira réinitialisée avec succès' }); } catch (error) { console.error('Erreur lors de la suppression de la config Jira:', error); return NextResponse.json( { error: 'Erreur lors de la suppression de la configuration Jira' }, { status: 500 } ); } }