- Add testKomgaConnection to config.ts - Update KomgaSettings to use Server Action - Remove api/komga/test route
4.0 KiB
4.0 KiB
Plan de conversion API Routes → Server Actions
État des lieux
✅ Converti
| Ancienne Route | Server Action | Status |
|---|---|---|
PATCH /api/komga/books/[bookId]/read-progress |
updateReadProgress() |
✅ Done |
DELETE /api/komga/books/[bookId]/read-progress |
deleteReadProgress() |
✅ Done |
POST /api/komga/favorites |
addToFavorites() |
✅ Done |
DELETE /api/komga/favorites |
removeFromFavorites() |
✅ Done |
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 |
DELETE /api/admin/users/[userId] |
deleteUser() |
✅ Done |
PUT /api/admin/users/[userId]/password |
resetUserPassword() |
✅ Done |
À convertir (priorité haute)
1. Scan de bibliothèque
Route actuelle : api/komga/libraries/[libraryId]/scan/route.ts
// Action à créer : src/app/actions/library.ts
export async function scanLibrary(libraryId: string)
Appelants à migrer :
components/library/ScanButton.tsx(POST fetch)
À convertir (priorité moyenne)
2. Configuration Komga
Route actuelle : api/komga/config/route.ts
// Action à créer : src/app/actions/config.ts
export async function saveKomgaConfig(config: KomgaConfigData)
export async function getKomgaConfig()
3. Mot de passe utilisateur
Route actuelle : api/user/password/route.ts
// Action à créer : src/app/actions/password.ts
export async function changePassword(currentPassword: string, newPassword: string)
4. Inscription
Route actuelle : api/auth/register/route.ts
// Action à créer : src/app/actions/auth.ts
export async function registerUser(email: string, password: string)
À convertir (priorité basse - admin)
5. Gestion des utilisateurs (admin)
Routes :
api/admin/users/[userId]/route.ts(PATCH, DELETE)api/admin/users/[userId]/password/route.ts(PUT)
// Actions à créer : src/app/actions/admin.ts
export async function updateUserRoles(userId: string, roles: string[])
export async function deleteUser(userId: string)
export async function resetUserPassword(userId: string, newPassword: string)
À garder en API Routes
Ces routes ne doivent PAS être converties :
| Route | Raison |
|---|---|
api/komga/home |
GET - called from Server Components |
api/komga/books/[bookId] |
GET - fetch données livre |
api/komga/series/* |
GET - fetch séries |
api/komga/libraries/* |
GET - fetch bibliothèques |
api/komga/random-book |
GET - fetch aléatoire |
api/komga/images/* |
GET - servir images (streaming) |
api/auth/[...nextauth]/* |
NextAuth handler externe |
api/admin/users |
GET - fetch liste users |
api/admin/stats |
GET - fetch stats |
api/user/profile |
GET - fetch profile |
Pattern à suivre
// src/app/actions/[feature].ts
"use server";
import { revalidatePath, revalidateTag } from "next/cache";
import { Service } from "@/lib/services/service";
export async function actionName(params): Promise<{ success: boolean; message: string }> {
try {
await Service.doSomething(params);
// Invalider le cache si nécessaire
revalidateTag("cache-tag", "min");
revalidatePath("/");
return { success: true, message: "Succès" };
} catch (error) {
return { success: false, message: error.message };
}
}
// src/components/feature/Component.tsx
"use client";
import { actionName } from "@/app/actions/feature";
const handleAction = async () => {
const result = await actionName(params);
if (!result.success) {
// handle error
}
};