DeleteAccount.js 3.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. const API = require("../../../lib/API");
  2. const db = require("../../../plugin/DataBase/db");
  3. const Redis = require("../../../plugin/DataBase/Redis");
  4. const jkesRedisKeys = require("../../../plugin/jkes/redisKeys");
  5. const AccessControl = require("../../../lib/AccessControl");
  6. const { BaseStdResponse } = require("../../../BaseStdResponse");
  7. class DeleteAccount extends API {
  8. constructor() {
  9. super();
  10. this.setPath('/Lepao/Account')
  11. this.setMethod('DELETE')
  12. }
  13. async onRequest(req, res) {
  14. let { uuid, session, id } = req.body
  15. if ([uuid, session, id].some(value => value === '' || value === null || value === undefined))
  16. return res.json({
  17. ...BaseStdResponse.MISSING_PARAMETER
  18. })
  19. // 检查 session
  20. if (!await AccessControl.checkSession(uuid, session))
  21. return res.status(401).json({
  22. ...BaseStdResponse.ACCESS_DENIED
  23. })
  24. let selectSql = 'SELECT create_user FROM lepao_account WHERE id = ?'
  25. let selectRows = await db.query(selectSql, [id])
  26. if (!selectRows || selectRows.length === 0)
  27. return res.json({
  28. ...BaseStdResponse.ERR,
  29. msg: '解绑账号失败!未找到账户信息'
  30. })
  31. if (selectRows[0].create_user !== uuid) {
  32. let permission = await AccessControl.getPermission(uuid)
  33. if (!permission.includes("admin") && !permission.includes("service"))
  34. return res.json({
  35. ...BaseStdResponse.ERR,
  36. msg: '解绑账号失败!未找到账户信息'
  37. })
  38. }
  39. let snRows = await db.query('SELECT student_num FROM lepao_account WHERE id = ?', [id])
  40. const sn = snRows?.[0]?.student_num
  41. const progressKey = jkesRedisKeys.lepaoProgress(req.account)
  42. const inProgress = await Redis.get(progressKey)
  43. if (inProgress)
  44. return res.json({
  45. ...BaseStdResponse.ERR,
  46. msg: '该账号已进入乐跑任务队列,请等待乐跑完成后再进行解绑操作'
  47. })
  48. let sql = 'UPDATE lepao_account SET create_user = NULL, auto_run = 0 WHERE id = ?'
  49. let r = await db.query(sql, [id])
  50. try {
  51. if (r && r.affectedRows > 0) {
  52. if (sn) {
  53. try {
  54. await Redis.del(jkesRedisKeys.runnerFlag(sn))
  55. } catch (e) {
  56. this.logger.error(`解绑清理 jkes_runner 失败 ${sn}: ${e.message || e}`)
  57. }
  58. }
  59. res.json({
  60. ...BaseStdResponse.OK
  61. })
  62. } else {
  63. return res.json({
  64. ...BaseStdResponse.ERR,
  65. msg: '解绑账号失败!数据库错误'
  66. })
  67. }
  68. } catch (err) {
  69. this.logger.error(`解绑账号失败!${err.stack}`)
  70. res.json({
  71. ...BaseStdResponse.ERR,
  72. msg: "解绑账号失败!",
  73. });
  74. }
  75. }
  76. }
  77. module.exports.DeleteAccount = DeleteAccount