GetRepoList.js 2.2 KB

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