Upsert.js 3.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. const API = require("../../../lib/API");
  2. const db = require("../../../plugin/DataBase/db");
  3. const AccessControl = require("../../../lib/AccessControl");
  4. const { BaseStdResponse } = require("../../../BaseStdResponse");
  5. class AdminDownloadUpsert extends API {
  6. constructor() {
  7. super();
  8. this.setPath('/Admin/Download');
  9. this.setMethod('POST');
  10. }
  11. async onRequest(req, res) {
  12. const {
  13. uuid, session, id, title, description, download_url, version,
  14. icon, button_text, button_color, platform, extract_code,
  15. changelog_html, sort_order, is_active
  16. } = req.body;
  17. if ([uuid, session, title, download_url].some(v => v === '' || v === null || v === undefined))
  18. return res.json({ ...BaseStdResponse.MISSING_PARAMETER });
  19. if (!await AccessControl.checkSession(uuid, session))
  20. return res.status(401).json({ ...BaseStdResponse.ACCESS_DENIED });
  21. const permission = await AccessControl.getPermission(uuid);
  22. if (!permission.includes('admin') && !permission.includes('service'))
  23. return res.json({ ...BaseStdResponse.PERMISSION_DENIED });
  24. const now = Date.now();
  25. const safeIcon = (icon && String(icon).trim()) ? String(icon).trim().slice(0, 16) : '📦';
  26. const sortOrder = Number(sort_order) || 0;
  27. const active = Number(is_active) === 0 ? 0 : 1;
  28. try {
  29. if (id) {
  30. const r = await db.query(`
  31. UPDATE download_item SET
  32. title = ?, description = ?, download_url = ?, version = ?,
  33. icon = ?, button_text = ?, button_color = ?, platform = ?,
  34. extract_code = ?, changelog_html = ?, sort_order = ?,
  35. is_active = ?, updated_at = ?
  36. WHERE id = ?
  37. `, [
  38. String(title).trim(),
  39. description || '',
  40. String(download_url).trim(),
  41. version || '',
  42. safeIcon,
  43. button_text || '立即下载',
  44. button_color || 'primary',
  45. platform || '',
  46. extract_code || '',
  47. changelog_html || '',
  48. sortOrder,
  49. active,
  50. now,
  51. id
  52. ]);
  53. if (!r || r.affectedRows === 0)
  54. return res.json({ ...BaseStdResponse.ERR, msg: '更新下载项失败' });
  55. return res.json({ ...BaseStdResponse.OK, id });
  56. }
  57. const r = await db.query(`
  58. INSERT INTO download_item
  59. (title, description, download_url, version, icon, button_text,
  60. button_color, platform, extract_code, changelog_html,
  61. sort_order, is_active, created_at, updated_at)
  62. VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
  63. `, [
  64. String(title).trim(),
  65. description || '',
  66. String(download_url).trim(),
  67. version || '',
  68. safeIcon,
  69. button_text || '立即下载',
  70. button_color || 'primary',
  71. platform || '',
  72. extract_code || '',
  73. changelog_html || '',
  74. sortOrder,
  75. active,
  76. now,
  77. now
  78. ]);
  79. if (!r || r.affectedRows === 0)
  80. return res.json({ ...BaseStdResponse.ERR, msg: '创建下载项失败' });
  81. return res.json({ ...BaseStdResponse.OK, id: r.insertId });
  82. } catch (err) {
  83. this.logger.error(`保存下载项失败!${err.stack}`);
  84. res.json({ ...BaseStdResponse.ERR, msg: '保存下载项失败!' });
  85. }
  86. }
  87. }
  88. module.exports.AdminDownloadUpsert = AdminDownloadUpsert;