diff --git a/docs/server-actions-plan.md b/docs/server-actions-plan.md index 9a1bbaf..bac4cc2 100644 --- a/docs/server-actions-plan.md +++ b/docs/server-actions-plan.md @@ -13,6 +13,7 @@ | `PUT /api/preferences` | `updatePreferences()` | ✅ Done | | `POST /api/komga/libraries/[libraryId]/scan` | `scanLibrary()` | ✅ Done | | `POST /api/komga/config` | `saveKomgaConfig()` | ✅ Done | +| `POST /api/komga/test` | `testKomgaConnection()` | ✅ Done | | `PUT /api/user/password` | `changePassword()` | ✅ Done | | `POST /api/auth/register` | `registerUser()` | ✅ Done | | `PATCH /api/admin/users/[userId]` | `updateUserRoles()` | ✅ Done | diff --git a/src/app/actions/config.ts b/src/app/actions/config.ts index 65111d4..12407ab 100644 --- a/src/app/actions/config.ts +++ b/src/app/actions/config.ts @@ -2,9 +2,10 @@ import { revalidatePath } from "next/cache"; import { ConfigDBService } from "@/lib/services/config-db.service"; +import { TestService } from "@/lib/services/test.service"; import { ERROR_CODES } from "@/constants/errorCodes"; import { AppError } from "@/utils/errors"; -import type { KomgaConfig, KomgaConfigData } from "@/types/komga"; +import type { KomgaConfig, KomgaConfigData, KomgaLibrary } from "@/types/komga"; interface SaveConfigInput { url: string; @@ -13,6 +14,34 @@ interface SaveConfigInput { authHeader?: string; } +/** + * Teste la connexion à Komga + */ +export async function testKomgaConnection( + serverUrl: string, + username: string, + password: string +): Promise<{ success: boolean; message: string }> { + try { + const authHeader = Buffer.from(`${username}:${password}`).toString("base64"); + + const { libraries }: { libraries: KomgaLibrary[] } = await TestService.testConnection({ + serverUrl, + authHeader, + }); + + return { + success: true, + message: `Connexion réussie ! ${libraries.length} bibliothèque${libraries.length > 1 ? "s" : ""} trouvée${libraries.length > 1 ? "s" : ""}`, + }; + } catch (error) { + if (error instanceof AppError) { + return { success: false, message: error.message }; + } + return { success: false, message: "Erreur lors de la connexion" }; + } +} + /** * Sauvegarde la configuration Komga */ diff --git a/src/app/api/komga/test/route.ts b/src/app/api/komga/test/route.ts deleted file mode 100644 index d5aab3b..0000000 --- a/src/app/api/komga/test/route.ts +++ /dev/null @@ -1,37 +0,0 @@ -import { NextResponse } from "next/server"; -import { TestService } from "@/lib/services/test.service"; -import { ERROR_CODES } from "@/constants/errorCodes"; -import { getErrorMessage } from "@/utils/errors"; -import type { KomgaLibrary } from "@/types/komga"; -import type { NextRequest } from "next/server"; -import logger from "@/lib/logger"; - -export async function POST(request: NextRequest) { - try { - const { serverUrl, username, password } = await request.json(); - const authHeader = Buffer.from(`${username}:${password}`).toString("base64"); - - const { libraries }: { libraries: KomgaLibrary[] } = await TestService.testConnection({ - serverUrl, - authHeader, - }); - - return NextResponse.json({ - message: `✅ Connexion réussie ! ${libraries.length} bibliothèque${ - libraries.length > 1 ? "s" : "" - } trouvée${libraries.length > 1 ? "s" : ""}`, - }); - } catch (error) { - logger.error({ err: error }, "Erreur lors du test de connexion:"); - return NextResponse.json( - { - error: { - code: ERROR_CODES.KOMGA.CONNECTION_ERROR, - name: "Connection error", - message: getErrorMessage(ERROR_CODES.KOMGA.CONNECTION_ERROR), - }, - }, - { status: 400 } - ); - } -} diff --git a/src/components/settings/KomgaSettings.tsx b/src/components/settings/KomgaSettings.tsx index 9c1437b..856275f 100644 --- a/src/components/settings/KomgaSettings.tsx +++ b/src/components/settings/KomgaSettings.tsx @@ -7,7 +7,7 @@ import { Network, Loader2 } from "lucide-react"; import type { KomgaConfig } from "@/types/komga"; import { Card, CardContent, CardHeader, CardTitle, CardDescription } from "@/components/ui/card"; import logger from "@/lib/logger"; -import { saveKomgaConfig } from "@/app/actions/config"; +import { saveKomgaConfig, testKomgaConnection } from "@/app/actions/config"; interface KomgaSettingsProps { initialConfig: KomgaConfig | null; @@ -41,21 +41,10 @@ export function KomgaSettings({ initialConfig }: KomgaSettingsProps) { const password = formData.get("password") as string; try { - const response = await fetch("/api/komga/test", { - method: "POST", - headers: { - "Content-Type": "application/json", - }, - body: JSON.stringify({ - serverUrl: serverUrl.trim(), - username, - password: password || config.password, - }), - }); + const result = await testKomgaConnection(serverUrl.trim(), username, password || config.password); - if (!response.ok) { - const data = await response.json(); - throw new Error(data.error || t("settings.komga.error.message")); + if (!result.success) { + throw new Error(result.message); } toast({