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 && (
|