Browse Source

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

Pchen. 3 months ago
parent
commit
43585c8b88
4 changed files with 114 additions and 3 deletions
  1. 7 3
      apis/Repos/AddRepo.js
  2. 38 0
      apis/Repos/GitCodeStats.js
  3. 54 0
      apis/Repos/UpdateRepoInfo.js
  4. 15 0
      lib/MessageContral.js

+ 7 - 3
apis/Repos/AddRepo.js

@@ -42,7 +42,7 @@ class AddRepo extends API {
         // 检查仓库是否重复
         let sql = 'SELECT id FROM repos WHERE create_user = ? AND url = ?'
         let r = await db.query(sql, [uuid, url])
-        if(r && r.length > 0)
+        if (r && r.length > 0)
             return res.json({
                 ...BaseStdResponse.ERR,
                 msg: '用户已添加该仓库!'
@@ -59,8 +59,12 @@ class AddRepo extends API {
             })
 
             // 发起克隆
-            const url = core_url + '/git/clone'
-            await axios.post(url, { uuid, repo_url: url })
+            try {
+                const clone_url = core_url + '/git/clone'
+                await axios.post(clone_url, { uuid, repo_url: url })
+            } catch (error) {
+                this.logger.error('克隆仓库失败!' + error.stack)
+            }
         } else {
             res.json({ ...BaseStdResponse.ERR, endpoint: 7894378, msg: '添加仓库失败!' })
         }

+ 38 - 0
apis/Repos/GitCodeStats.js

@@ -0,0 +1,38 @@
+const API = require("../../lib/API")
+const AccessControl = require("../../lib/AccessControl")
+const { BaseStdResponse } = require("../../BaseStdResponse")
+const db = require("../../plugin/DataBase/db")
+const simpleGit = require('simple-git')
+const fs = require("fs")
+const path = require("path")
+
+class gitCodeStats extends API {
+    constructor() {
+        super()
+
+        this.setMethod("POST")
+        this.setPath("/Repos/CodeStats")
+    }
+
+    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 = 'SELECT path, url FROM repos WHERE create_user = ? AND id = ?'
+
+        let r = await db.query(sql, [uuid, id])
+        
+    }
+}
+
+module.exports.gitCodeStats = gitCodeStats

+ 54 - 0
apis/Repos/UpdateRepoInfo.js

@@ -0,0 +1,54 @@
+const API = require("../../lib/API")
+const AccessControl = require("../../lib/AccessControl")
+const { BaseStdResponse } = require("../../BaseStdResponse")
+const db = require("../../plugin/DataBase/db")
+
+// 更新仓库信息
+class UpdateRepoInfo extends API {
+    constructor() {
+        super()
+
+        this.setMethod("POST")
+        this.setPath("/Repos/UpdateInfo")
+    }
+
+    checkName(name) {
+        const regex = /^(?!\.)(?!.*\/{2,})(?!.*\.git$)[\u4E00-\u9FA5A-Za-z0-9._-]+(?<!\/)$/
+        return regex.test(name)
+    }
+
+    async onRequest(req, res) {
+        let { uuid, session, name, id } = req.body
+
+        if ([uuid, session, name, id].some(value => value === '' || value === null || value === undefined))
+            return res.json({
+                ...BaseStdResponse.MISSING_PARAMETER
+            })
+
+        if (!this.checkName(name))
+            return res.json({
+                ...BaseStdResponse.ERR,
+                msg: '仓库名称不合法!'
+            })
+
+        // 检查 session
+        if (!await AccessControl.checkSession(uuid, session))
+            return res.status(401).json({
+                ...BaseStdResponse.ACCESS_DENIED
+            })
+
+        let sql = 'UPDATE repos SET \`name\` = ? WHERE create_user = ? AND id = ?'
+
+        let result = await db.query(sql, [name, uuid, id])
+
+        if (result && result.affectedRows > 0) {
+            res.json({
+                ...BaseStdResponse.OK
+            })
+        } else {
+            res.json({ ...BaseStdResponse.ERR, endpoint: 7894378, msg: '更新仓库信息失败!' })
+        }
+    }
+}
+
+module.exports.UpdateRepoInfo = UpdateRepoInfo

+ 15 - 0
lib/MessageContral.js

@@ -0,0 +1,15 @@
+const Logger = require('./Logger')
+const path = require('path')
+const db = require("../../plugin/DataBase/db")
+
+class MessageContral {
+    constructor() {
+        this.logger = new Logger(path.join(__dirname, '../logs/Message.log'), 'INFO');
+    }
+
+    sendMessage(uuid, title, content, type) {
+        
+    }
+}
+
+module.exports = MessageContral