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.' }}

+ +
+ +