diff --git a/apps/admin-ui/src/app/nodes/page.tsx b/apps/admin-ui/src/app/nodes/page.tsx index bd10394..2ee66c3 100644 --- a/apps/admin-ui/src/app/nodes/page.tsx +++ b/apps/admin-ui/src/app/nodes/page.tsx @@ -154,6 +154,35 @@ export default function NodesPage() { alert("Rescan aangevraagd"); } + async function resetLibraryNode(id: string, name: string) { + if ( + !confirm( + `Bibliotheek van “${name}” volledig wissen uit de database en opnieuw scannen?\n\n` + + `Alle films/series-bestanden van deze node verdwijnen uit Master. ` + + `Titels die alleen op deze node stonden worden opgeruimd. Daarna start een volle rescan.\n\n` + + `Dit kan niet ongedaan worden gemaakt.` + ) + ) { + return; + } + if (!confirm(`Laatste check: echt resetten voor “${name}”?`)) return; + + const res = await fetch(`/api/v1/admin/nodes/${id}/reset-library`, { + method: "POST", + credentials: "include", + }); + const data = await res.json(); + if (!res.ok) { + alert(data.error?.message ?? "Reset mislukt"); + return; + } + alert( + data.message ?? + `Klaar: ${data.filesRemoved ?? 0} files, ${data.moviesRemoved ?? 0} films, ${data.seriesRemoved ?? 0} series verwijderd. Rescan gestart.` + ); + loadNodes(); + } + async function restartNode(id: string) { if (!confirm("Node herstarten? De container komt terug via restart-policy.")) return; const res = await fetch(`/api/v1/admin/nodes/${id}/restart`, { @@ -554,6 +583,13 @@ export default function NodesPage() { + {node.version !== targetNodeVersion && (