const API = require('../../../../lib/API.js') const { BaseStdResponse } = require('../../../../BaseStdResponse.js') const AccessControl = require('../../../../lib/AccessControl.js') const db = require('../../../../plugin/DataBase/db.js') const MAX_IDS = 300 /** * POST /Admin/Lepao/Proxy/Logs/Delete * ids: number[] — 批量按主键删除 * purge_all: 1/true — 清空整张日志表(危险操作) */ class AdminLepaoProxyLogsDelete extends API { constructor() { super() this.setPath('/Admin/Lepao/Proxy/Logs/Delete') this.setMethod('POST') } async onRequest(req, res) { const { uuid, session, ids, purge_all } = req.body if ([uuid, session].some((v) => v === '' || v == null)) { return res.json({ ...BaseStdResponse.MISSING_PARAMETER }) } if (!await AccessControl.checkSession(uuid, session)) { return res.status(401).json({ ...BaseStdResponse.ACCESS_DENIED }) } const permission = await AccessControl.getPermission(uuid) if (!permission.includes('admin') && !permission.includes('service')) { return res.json({ ...BaseStdResponse.PERMISSION_DENIED }) } const purge = purge_all === true || purge_all === 1 || purge_all === '1' try { if (purge) { await db.query('DELETE FROM lepao_proxy_log') return res.json({ ...BaseStdResponse.OK, data: { mode: 'purge_all' } }) } if (!Array.isArray(ids) || ids.length === 0) { return res.json({ ...BaseStdResponse.ERR, msg: '请传入 ids 数组或勾选 purge_all' }) } const clean = [...new Set(ids.map((id) => Math.floor(Number(id))).filter((n) => Number.isFinite(n) && n > 0))] if (clean.length === 0) { return res.json({ ...BaseStdResponse.ERR, msg: '无效的 id' }) } if (clean.length > MAX_IDS) { return res.json({ ...BaseStdResponse.ERR, msg: `单次最多删除 ${MAX_IDS} 条` }) } const ph = clean.map(() => '?').join(',') await db.query(`DELETE FROM lepao_proxy_log WHERE id IN (${ph})`, clean) return res.json({ ...BaseStdResponse.OK, data: { deleted: clean.length } }) } catch (e) { this.logger?.error?.(`AdminLepaoProxyLogsDelete: ${e.stack || e}`) return res.json({ ...BaseStdResponse.ERR, msg: '删除日志失败' }) } } } module.exports.AdminLepaoProxyLogsDelete = AdminLepaoProxyLogsDelete