GetRepoList.js 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  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. let rows = await db.query(sql, params)
  35. if (!rows || rows.length === 0)
  36. return res.json({
  37. ...BaseStdResponse.OK,
  38. data: []
  39. })
  40. const status_url = core_url + '/git/status'
  41. try {
  42. // 并行执行所有请求
  43. const statusPromises = rows.map(item =>
  44. axios.post(status_url, { uuid, repo_url: item.url, repo_id: item.id })
  45. .then(res => ({ ...item, status: res.data }))
  46. .catch(() => ({ ...item, status: null }))
  47. )
  48. const items = await Promise.all(statusPromises)
  49. res.json({
  50. ...BaseStdResponse.OK,
  51. data: items
  52. })
  53. } catch (error) {
  54. res.json({
  55. ...BaseStdResponse.ERR,
  56. message: '获取仓库状态失败'
  57. })
  58. }
  59. }
  60. }
  61. module.exports.GetRepoList = GetRepoList