GetRepoList.js 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  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. const axios = require("axios")
  6. const { core_url } = require('../../config.json')
  7. class GetRepoList extends API {
  8. constructor() {
  9. super()
  10. this.setPath('/Repos/List')
  11. this.setMethod('GET')
  12. }
  13. async onRequest(req, res) {
  14. let {
  15. uuid,
  16. session,
  17. keyword
  18. } = req.query
  19. if ([uuid, session].some(value => value === '' || value === null || value === undefined))
  20. return res.json({
  21. ...BaseStdResponse.MISSING_PARAMETER
  22. })
  23. // 检查 session
  24. if (!await AccessControl.checkSession(uuid, session))
  25. return res.status(401).json({
  26. ...BaseStdResponse.ACCESS_DENIED
  27. })
  28. let sql = 'SELECT id, name, url, create_time, state, logo, update_time FROM repos WHERE create_user = ?'
  29. let params = [uuid]
  30. if ((keyword ?? '').trim() !== '') {
  31. sql += ' AND name LIKE ?'
  32. params.push(`%${keyword}%`)
  33. }
  34. sql += ' ORDER BY update_time DESC'
  35. let rows = await db.query(sql, params)
  36. if (!rows || rows.length === 0)
  37. return res.json({
  38. ...BaseStdResponse.OK,
  39. data: []
  40. })
  41. const status_url = core_url + '/git/status'
  42. try {
  43. // 并行执行所有请求
  44. const statusPromises = rows.map(item =>
  45. axios.post(status_url, { uuid, repo_url: item.url, repo_id: item.id })
  46. .then(res => ({ ...item, status: res.data }))
  47. .catch(() => ({ ...item, status: null }))
  48. )
  49. const items = await Promise.all(statusPromises)
  50. res.json({
  51. ...BaseStdResponse.OK,
  52. data: items
  53. })
  54. } catch (error) {
  55. res.json({
  56. ...BaseStdResponse.ERR,
  57. message: '获取仓库状态失败'
  58. })
  59. }
  60. }
  61. }
  62. module.exports.GetRepoList = GetRepoList