GetMySendCountRequestList.js 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121
  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 GetMySendCountRequestList extends API {
  6. constructor() {
  7. super()
  8. this.setPath("/Goods/SendCountRequest/MyList")
  9. this.setMethod("GET")
  10. }
  11. async onRequest(req, res) {
  12. let { uuid, session, pagesize, current, direction, status } = req.query
  13. if ([uuid, session, pagesize, current].some(value => value === "" || value === null || value === undefined))
  14. return res.json({ ...BaseStdResponse.MISSING_PARAMETER })
  15. if (isNaN(pagesize) || pagesize <= 0 || pagesize > 50 || isNaN(current) || current <= 0)
  16. return res.json({ ...BaseStdResponse.ERR, msg: "参数错误" })
  17. if (!await AccessControl.checkSession(uuid, session))
  18. return res.status(401).json({ ...BaseStdResponse.ACCESS_DENIED })
  19. const directionList = ["sent", "received"]
  20. if (direction && !directionList.includes(direction))
  21. return res.json({ ...BaseStdResponse.ERR, msg: "direction参数错误" })
  22. const statusList = ["pending", "approved", "rejected"]
  23. if (status && !statusList.includes(status))
  24. return res.json({ ...BaseStdResponse.ERR, msg: "status参数错误" })
  25. const userRows = await db.query("SELECT id FROM users WHERE uuid = ?", [uuid])
  26. if (!userRows || userRows.length !== 1)
  27. return res.json({ ...BaseStdResponse.MISSING_FILE, msg: "获取用户信息失败!" })
  28. const userId = userRows[0].id
  29. const offset = (Number(current) - 1) * Number(pagesize)
  30. let sql = `
  31. SELECT
  32. r.id,
  33. r.sender_uuid,
  34. su.username AS sender_username,
  35. su.avatar AS sender_avatar,
  36. r.receiver_user_id,
  37. ru.username AS receiver_username,
  38. ru.avatar AS receiver_avatar,
  39. CASE WHEN r.sender_uuid = ? THEN 'sent' ELSE 'received' END AS direction,
  40. CASE WHEN r.sender_uuid = ? THEN ru.username ELSE su.username END AS counterparty_username,
  41. CASE WHEN r.sender_uuid = ? THEN ru.avatar ELSE su.avatar END AS counterparty_avatar,
  42. r.count,
  43. r.status,
  44. r.created_at,
  45. r.reviewed_at,
  46. r.reject_reason
  47. FROM
  48. lepao_send_count_request r
  49. LEFT JOIN users su ON su.uuid = r.sender_uuid
  50. LEFT JOIN users ru ON ru.id = r.receiver_user_id
  51. WHERE
  52. (r.sender_uuid = ? OR r.receiver_user_id = ?)
  53. `
  54. let countSql = `
  55. SELECT COUNT(*) AS total
  56. FROM
  57. lepao_send_count_request r
  58. WHERE
  59. (r.sender_uuid = ? OR r.receiver_user_id = ?)
  60. `
  61. const params = [uuid, uuid, uuid, uuid, userId]
  62. const countParams = [uuid, userId]
  63. if (direction === "sent") {
  64. sql += ` AND r.sender_uuid = ?`
  65. countSql += ` AND r.sender_uuid = ?`
  66. params.push(uuid)
  67. countParams.push(uuid)
  68. }
  69. if (direction === "received") {
  70. sql += ` AND r.receiver_user_id = ?`
  71. countSql += ` AND r.receiver_user_id = ?`
  72. params.push(userId)
  73. countParams.push(userId)
  74. }
  75. if (status) {
  76. sql += ` AND r.status = ?`
  77. countSql += ` AND r.status = ?`
  78. params.push(status)
  79. countParams.push(status)
  80. }
  81. sql += `
  82. ORDER BY r.id DESC
  83. LIMIT ? OFFSET ?
  84. `
  85. params.push(String(pagesize), String(offset))
  86. const rows = await db.query(sql, params)
  87. const countRows = await db.query(countSql, countParams)
  88. if (!rows || !countRows)
  89. return res.json({ ...BaseStdResponse.MISSING_FILE, msg: "获取赠送记录失败!" })
  90. res.json({
  91. ...BaseStdResponse.OK,
  92. data: rows,
  93. pagination: {
  94. current: Number(current),
  95. pagesize: Number(pagesize),
  96. total: countRows[0]?.total || 0
  97. }
  98. })
  99. }
  100. }
  101. module.exports.GetMySendCountRequestList = GetMySendCountRequestList