From 858a5b34bf36bbeec3b18e87623e9b009e69ebcd Mon Sep 17 00:00:00 2001
From: MasutaYunikon
Date: Sat, 23 May 2026 19:29:47 +0200
Subject: [PATCH] =?UTF-8?q?feat(demandes):=20ajout=20d'un=20bouton=20suppr?=
=?UTF-8?q?im=C3=A9=20pour=20les=20admin=20et=20supprime=20les=20demandes?=
=?UTF-8?q?=20"disponible"=20si=20la=20serie=20a=20=C3=A9t=C3=A9=20supprim?=
=?UTF-8?q?=C3=A9=20apres?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
server/routes/import.ts | 9 +++++++++
server/routes/requests.ts | 10 ++++++++++
src/views/RequestsView.vue | 15 +++++++++++++++
3 files changed, 34 insertions(+)
diff --git a/server/routes/import.ts b/server/routes/import.ts
index aabeb8e..5974d5e 100644
--- a/server/routes/import.ts
+++ b/server/routes/import.ts
@@ -10,6 +10,7 @@ import { readSerieData, loadEnrichedSeriesData } from '../lib/github-cache.js'
import { resolveEpNaming, computeExpectedName } from '../lib/serie-helpers.js'
import { GITLAB_API_NFO, GITLAB_RAW_NFO } from '../lib/nfo.js'
import { dispatchRemove } from '../torrent-clients/index.js'
+import { readRequests, deleteRequest } from '../requests.js'
const router = Router()
@@ -280,6 +281,14 @@ router.delete('/organized/:serieId', requireAuth, async (req, res) => {
dispatchRemove(hash, false).catch(err => logger.warn('api', `Impossible de retirer le torrent ${hash.slice(0, 8)}… du client : ${err instanceof Error ? err.message : err}`))
}
}
+ // Supprimer les demandes "disponible" liées à cette série
+ const completedRequests = readRequests().filter(r => r.serieId === Number(serieId) && r.status === 'completed')
+ for (const r of completedRequests) {
+ try { deleteRequest(r.id) } catch {}
+ }
+ if (completedRequests.length > 0)
+ logger.info('api', `Désimport série ${serieId} — ${completedRequests.length} demande(s) "disponible" supprimée(s)`)
+
logger.info('api', `Désimport série ${serieId} — ${removed} épisode(s) retirés${deleteFile && emptyHashes.length ? `, ${emptyHashes.length} torrent(s) retirés du client` : ''}`)
res.json({ ok: true, removed, errors })
})
diff --git a/server/routes/requests.ts b/server/routes/requests.ts
index 8d37293..4f96ce9 100644
--- a/server/routes/requests.ts
+++ b/server/routes/requests.ts
@@ -208,6 +208,16 @@ export async function autoDownloadRequest(req: SerieRequest, override?: { season
logger.info('requests', `Auto-dl "${req.serieName}" — ${sent}/${toDownload.length} torrent(s) envoyé(s)`)
}
+// DELETE /api/requests — admin : supprimer toutes les demandes
+router.delete('/requests', requireAdmin, (_req, res) => {
+ const all = readRequests()
+ for (const r of all) {
+ try { deleteRequest(r.id) } catch {}
+ }
+ logger.info('requests', `Toutes les demandes supprimées (${all.length})`)
+ res.json({ deleted: all.length })
+})
+
// DELETE /api/requests/:id — admin seulement
router.delete('/requests/:id', requireAdmin, (req, res) => {
try {
diff --git a/src/views/RequestsView.vue b/src/views/RequestsView.vue
index 1dac2fd..8803363 100644
--- a/src/views/RequestsView.vue
+++ b/src/views/RequestsView.vue
@@ -8,6 +8,13 @@
{{ auth.isAdmin ? 'Toutes les demandes des utilisateurs.' : 'Vos demandes de séries.' }}
+
+
+
+