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