const API = require("../../../lib/API") const db = require("../../../plugin/DataBase/db") const AccessControl = require("../../../lib/AccessControl") const { BaseStdResponse } = require("../../../BaseStdResponse") class ApproveSendCountRequest extends API { constructor() { super() this.setPath("/Admin/Goods/SendCountRequest/Approve") this.setMethod("POST") } async onRequest(req, res) { let { uuid, session, id } = req.body id = Number(id) if ([uuid, session, id].some(value => value === "" || value === null || value === undefined || Number.isNaN(id))) return res.json({ ...BaseStdResponse.MISSING_PARAMETER }) if (!Number.isInteger(id) || id <= 0) return res.json({ ...BaseStdResponse.ERR, msg: "参数错误" }) if (!await AccessControl.checkSession(uuid, session)) return res.status(401).json({ ...BaseStdResponse.ACCESS_DENIED }) let permission = await AccessControl.getPermission(uuid) if (!permission.includes("admin") && !permission.includes("service")) return res.json({ ...BaseStdResponse.PERMISSION_DENIED }) const conn = await db.connect() try { await conn.beginTransaction() const [requestRows] = await conn.execute( `SELECT id, receiver_user_id, count, status FROM lepao_send_count_request WHERE id = ? FOR UPDATE`, [id] ) if (!requestRows || requestRows.length !== 1) { await conn.rollback() return res.json({ ...BaseStdResponse.MISSING_FILE, msg: "未找到赠送申请记录!" }) } const request = requestRows[0] if (request.status !== "pending") { await conn.rollback() return res.json({ ...BaseStdResponse.ERR, msg: "该申请已审核,请刷新后重试!" }) } const [incResult] = await conn.execute( "UPDATE users SET lepao_count = lepao_count + ? WHERE id = ?", [request.count, request.receiver_user_id] ) if (!incResult || incResult.affectedRows !== 1) { await conn.rollback() return res.json({ ...BaseStdResponse.ERR, msg: "接收用户不存在,审核通过失败!" }) } const [updateResult] = await conn.execute( `UPDATE lepao_send_count_request SET status = 'approved', reviewer_uuid = ?, reviewed_at = NOW(), reject_reason = NULL WHERE id = ?`, [uuid, id] ) if (!updateResult || updateResult.affectedRows !== 1) { await conn.rollback() return res.json({ ...BaseStdResponse.ERR, msg: "更新审核状态失败,请稍后再试!" }) } await conn.commit() return res.json({ ...BaseStdResponse.OK, msg: "审核通过成功" }) } catch (err) { try { await conn.rollback() } catch (_) { } this.logger.error(`审核通过赠送申请失败!${err.message || "未知错误"}`) return res.json({ ...BaseStdResponse.ERR, msg: "审核通过失败,请稍后再试!" }) } } } module.exports.ApproveSendCountRequest = ApproveSendCountRequest