From a12e13a18d94c7424795063bc471f13f722b5346 Mon Sep 17 00:00:00 2001 From: Julien Froidefond Date: Wed, 12 Feb 2025 08:50:10 +0100 Subject: [PATCH] =?UTF-8?q?refactor:=20suppression=20des=20routes=20API=20?= =?UTF-8?q?redondantes=20(remplac=C3=A9es=20par=20les=20services=20sp?= =?UTF-8?q?=C3=A9cialis=C3=A9s)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../libraries/[libraryId]/series/route.ts | 21 ----- .../komga/series/[seriesId]/books/route.ts | 78 ------------------- .../series/[seriesId]/read-progress/route.ts | 46 ----------- 3 files changed, 145 deletions(-) delete mode 100644 src/app/api/komga/libraries/[libraryId]/series/route.ts delete mode 100644 src/app/api/komga/series/[seriesId]/books/route.ts delete mode 100644 src/app/api/komga/series/[seriesId]/read-progress/route.ts diff --git a/src/app/api/komga/libraries/[libraryId]/series/route.ts b/src/app/api/komga/libraries/[libraryId]/series/route.ts deleted file mode 100644 index 3b5f147..0000000 --- a/src/app/api/komga/libraries/[libraryId]/series/route.ts +++ /dev/null @@ -1,21 +0,0 @@ -import { NextResponse } from "next/server"; -import { LibraryService } from "@/lib/services/library.service"; - -export async function GET(request: Request, { params }: { params: { libraryId: string } }) { - try { - // Récupérer les paramètres de pagination et de filtre depuis l'URL - const { searchParams } = new URL(request.url); - const page = parseInt(searchParams.get("page") || "0"); - const size = parseInt(searchParams.get("size") || "20"); - const unreadOnly = searchParams.get("unread") === "true"; - - const series = await LibraryService.getLibrarySeries(params.libraryId, page, size, unreadOnly); - return NextResponse.json(series); - } catch (error) { - console.error("API Library Series - Erreur:", error); - return NextResponse.json( - { error: "Erreur lors de la récupération des séries" }, - { status: 500 } - ); - } -} diff --git a/src/app/api/komga/series/[seriesId]/books/route.ts b/src/app/api/komga/series/[seriesId]/books/route.ts deleted file mode 100644 index b0d035c..0000000 --- a/src/app/api/komga/series/[seriesId]/books/route.ts +++ /dev/null @@ -1,78 +0,0 @@ -import { NextResponse } from "next/server"; -import { cookies } from "next/headers"; -import { serverCacheService } from "@/lib/services/server-cache.service"; - -export async function GET(request: Request, { params }: { params: { seriesId: string } }) { - try { - // Récupérer les credentials Komga depuis le cookie - const configCookie = cookies().get("komgaCredentials"); - if (!configCookie) { - return NextResponse.json({ error: "Configuration Komga manquante" }, { status: 401 }); - } - - let config; - try { - config = JSON.parse(atob(configCookie.value)); - } catch (error) { - return NextResponse.json({ error: "Configuration Komga invalide" }, { status: 401 }); - } - - if (!config.credentials?.username || !config.credentials?.password) { - return NextResponse.json({ error: "Credentials Komga manquants" }, { status: 401 }); - } - - // Récupérer les paramètres de pagination et de filtre depuis l'URL - const { searchParams } = new URL(request.url); - const page = searchParams.get("page") || "0"; - const size = searchParams.get("size") || "24"; - const unreadOnly = searchParams.get("unread") === "true"; - - // Clé de cache unique pour cette page de tomes - const cacheKey = `series-${params.seriesId}-books-${page}-${size}-${unreadOnly}`; - - // Fonction pour récupérer les tomes - const fetchBooks = async () => { - // Construire l'URL avec les paramètres - let url = `${config.serverUrl}/api/v1/series/${params.seriesId}/books?page=${page}&size=${size}&sort=metadata.numberSort,asc`; - - // Ajouter le filtre pour les tomes non lus et en cours si nécessaire - if (unreadOnly) { - url += "&read_status=UNREAD&read_status=IN_PROGRESS"; - } - - const response = await fetch(url, { - headers: { - Authorization: `Basic ${Buffer.from( - `${config.credentials.username}:${config.credentials.password}` - ).toString("base64")}`, - }, - }); - - if (!response.ok) { - const errorData = await response.json().catch(() => null); - throw new Error( - JSON.stringify({ - error: "Erreur lors de la récupération des tomes", - details: errorData, - }) - ); - } - - return response.json(); - }; - - // Récupérer les données du cache ou faire l'appel API - const data = await serverCacheService.getOrSet(cacheKey, fetchBooks, 5 * 60); // Cache de 5 minutes - - return NextResponse.json(data); - } catch (error) { - console.error("Erreur lors de la récupération des tomes:", error); - return NextResponse.json( - { - error: "Erreur serveur", - details: error instanceof Error ? error.message : "Erreur inconnue", - }, - { status: 500 } - ); - } -} diff --git a/src/app/api/komga/series/[seriesId]/read-progress/route.ts b/src/app/api/komga/series/[seriesId]/read-progress/route.ts deleted file mode 100644 index 873ade3..0000000 --- a/src/app/api/komga/series/[seriesId]/read-progress/route.ts +++ /dev/null @@ -1,46 +0,0 @@ -import { NextResponse } from "next/server"; -import { cookies } from "next/headers"; -import { serverCacheService } from "@/services/serverCacheService"; - -export async function GET(request: Request, { params }: { params: { seriesId: string } }) { - const configCookie = cookies().get("komgaCredentials"); - - if (!configCookie) { - return NextResponse.json({ error: "Configuration Komga manquante" }, { status: 401 }); - } - - try { - const config = JSON.parse(atob(configCookie.value)); - const cacheKey = `series-${params.seriesId}-read-progress`; - const cachedData = await serverCacheService.get(cacheKey); - - if (cachedData) { - return NextResponse.json(cachedData); - } - - const readProgress = await fetchReadProgress(config, params.seriesId); - await serverCacheService.set(cacheKey, readProgress, 300); // Cache for 5 minutes - - return NextResponse.json(readProgress); - } catch (error) { - return NextResponse.json( - { error: "Erreur lors de la récupération de la progression" }, - { status: 500 } - ); - } -} - -async function fetchReadProgress(config: any, seriesId: string) { - const { serverUrl, credentials } = config; - const response = await fetch(`${serverUrl}/api/v1/series/${seriesId}/read-progress/tachiyomi`, { - headers: { - Authorization: `Basic ${credentials}`, - }, - }); - - if (!response.ok) { - throw new Error(`HTTP error! status: ${response.status}`); - } - - return response.json(); -}