Browse Source

✨ feat: 完善仓库操作相关接口

Pchen. 3 months ago
parent
commit
39cce7ca98
5 changed files with 82 additions and 10 deletions
  1. 17 2
      apis/Repos/AddRepo.js
  2. 47 0
      apis/Repos/DeleteRepo.js
  3. 14 6
      apis/Repos/GetRepoList.js
  4. 2 1
      config-example.json
  5. 2 1
      package.json

+ 17 - 2
apis/Repos/AddRepo.js

@@ -2,6 +2,8 @@ const API = require("../../lib/API")
 const AccessControl = require("../../lib/AccessControl")
 const { BaseStdResponse } = require("../../BaseStdResponse")
 const db = require("../../plugin/DataBase/db")
+const axios = require('axios')
+const { core_url } = require('../../config.json')
 
 // 添加仓库
 class AddRepo extends API {
@@ -25,7 +27,7 @@ class AddRepo extends API {
                 ...BaseStdResponse.MISSING_PARAMETER
             })
 
-        if (!this.checkUsername(username))
+        if (!this.checkName(name))
             return res.json({
                 ...BaseStdResponse.ERR,
                 msg: '仓库名称不合法!'
@@ -37,8 +39,17 @@ class AddRepo extends API {
                 ...BaseStdResponse.ACCESS_DENIED
             })
 
+        // 检查仓库是否重复
+        let sql = 'SELECT id FROM repos WHERE create_user = ? AND url = ?'
+        let r = await db.query(sql, [uuid, url])
+        if(r && r.length > 0)
+            return res.json({
+                ...BaseStdResponse.ERR,
+                msg: '用户已添加该仓库!'
+            })
+
         const time = new Date().getTime()
-        let sql = 'INSERT INTO repos (name, url, create_user, create_time) VALUES (?, ?, ?, ?)'
+        sql = 'INSERT INTO repos (name, url, create_user, create_time) VALUES (?, ?, ?, ?)'
 
         let result = await db.query(sql, [name, url, uuid, time])
 
@@ -46,6 +57,10 @@ class AddRepo extends API {
             res.json({
                 ...BaseStdResponse.OK
             })
+
+            // 发起克隆
+            const url = core_url + '/git/clone'
+            await axios.post(url, { uuid, repo_url: url })
         } else {
             res.json({ ...BaseStdResponse.ERR, endpoint: 7894378, msg: '添加仓库失败!' })
         }

+ 47 - 0
apis/Repos/DeleteRepo.js

@@ -0,0 +1,47 @@
+const API = require("../../lib/API")
+const AccessControl = require("../../lib/AccessControl")
+const { BaseStdResponse } = require("../../BaseStdResponse")
+const db = require("../../plugin/DataBase/db")
+
+// 删除仓库
+class DeleteRepo extends API {
+    constructor() {
+        super()
+
+        this.setMethod("DELETE")
+        this.setPath("/Repos")
+    }
+
+    async onRequest(req, res) {
+        let { uuid, session, id } = req.body
+
+        if ([uuid, session, id].some(value => value === '' || value === null || value === undefined))
+            return res.json({
+                ...BaseStdResponse.MISSING_PARAMETER
+            })
+
+        // 检查 session
+        if (!await AccessControl.checkSession(uuid, session))
+            return res.status(401).json({
+                ...BaseStdResponse.ACCESS_DENIED
+            })
+
+        let sql = 'DELETE FROM repos WHERE create_user = ? AND id = ?'
+
+        let result = await db.query(sql, [uuid, id])
+
+        if (result && result.affectedRows > 0) {
+            res.json({
+                ...BaseStdResponse.OK
+            })
+
+            // TODO 删除仓库
+            
+
+        } else {
+            res.json({ ...BaseStdResponse.ERR, endpoint: 7894378, msg: '删除仓库失败!' })
+        }
+    }
+}
+
+module.exports.DeleteRepo = DeleteRepo

+ 14 - 6
apis/Repos/GetRepoList.js

@@ -14,7 +14,8 @@ class GetRepoList extends API {
     async onRequest(req, res) {
         let {
             uuid,
-            session
+            session,
+            keyword
         } = req.query
 
         if ([uuid, session].some(value => value === '' || value === null || value === undefined))
@@ -29,12 +30,19 @@ class GetRepoList extends API {
             })
 
         let sql = 'SELECT * FROM repos WHERE create_user = ?'
-        let rows = await db.query(sql, [uuid])
-
-        if (!rows)
+        let params = [uuid]
+        
+        if ((keyword ?? '').trim() !== '') {
+            sql += ' AND name LIKE ?'
+            params.push(`%${keyword}%`)
+        }
+        
+        let rows = await db.query(sql, params)
+        
+        if (!rows || rows.length === 0)
             return res.json({
-                ...BaseStdResponse.MISSING_FILE,
-                msg: '获取仓库列表失败!'
+                ...BaseStdResponse.OK,
+                data: []
             })
 
         res.json({

+ 2 - 1
config-example.json

@@ -19,5 +19,6 @@
         "user": "",
         "password": ""
     },
-    "url": "https://cd1-api.gitnexus.cn/"
+    "url": "https://cd1-api.gitnexus.cn/",
+    "core_url": "http://cd2-api.gitnexus.cn"
 }

+ 2 - 1
package.json

@@ -19,7 +19,8 @@
     "nodemailer": "^6.9.14",
     "puppeteer": "^23.9.0",
     "redis": "^4.7.0",
+    "simple-git": "^3.27.0",
     "svg-captcha": "^1.4.0",
     "uuid": "^11.0.3"
   }
-}
+}