|
@@ -3,54 +3,67 @@ const AccessControl = require("../../lib/AccessControl")
|
|
|
const { BaseStdResponse } = require("../../BaseStdResponse")
|
|
|
const db = require("../../plugin/DataBase/db")
|
|
|
const redis = require('../../plugin/DataBase/Redis')
|
|
|
-const fs = require('fs')
|
|
|
+const fs = require('fs/promises')
|
|
|
|
|
|
-// 删除仓库
|
|
|
class DeleteRepo extends API {
|
|
|
constructor() {
|
|
|
super()
|
|
|
-
|
|
|
this.setMethod("DELETE")
|
|
|
this.setPath("/Repos")
|
|
|
}
|
|
|
|
|
|
async onRequest(req, res) {
|
|
|
- let { uuid, session, id } = req.body
|
|
|
+ const { uuid, session, id } = req.body
|
|
|
|
|
|
- if ([uuid, session, id].some(value => value === '' || value === null || value === undefined))
|
|
|
- return res.json({
|
|
|
- ...BaseStdResponse.MISSING_PARAMETER
|
|
|
- })
|
|
|
+ if ([uuid, session, id].some(v => v == null || v === '')) {
|
|
|
+ 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 FROM repos WHERE create_user = ? AND id = ?'
|
|
|
- let r = await db.query(sql, [uuid, id])
|
|
|
+ if (!await AccessControl.checkSession(uuid, session)) {
|
|
|
+ return res.status(401).json({ ...BaseStdResponse.ACCESS_DENIED })
|
|
|
+ }
|
|
|
|
|
|
- if (r && r[0].path) {
|
|
|
- const redisKey = [`gitLogs:${r[0].path}`,`contributors:${r[0].path}`,`codeStats:${r[0].path}`]
|
|
|
- await redis.del(redisKey)
|
|
|
+ try {
|
|
|
+ const [repoInfo] = await db.query('SELECT path FROM repos WHERE create_user = ? AND id = ?', [uuid, id])
|
|
|
|
|
|
- fs.rm(r[0].path, { recursive: true, force: true }, (err) => {
|
|
|
- this.logger.error('删除仓库失败!' + err)
|
|
|
- res.json({ ...BaseStdResponse.ERR, endpoint: 7894378, msg: '删除仓库失败!' })
|
|
|
- })
|
|
|
- }
|
|
|
-
|
|
|
- sql = 'DELETE FROM repos WHERE create_user = ? AND id = ?'
|
|
|
+ if (!repoInfo || !repoInfo.path)
|
|
|
+ return res.json({ ...BaseStdResponse.NOT_FOUND, msg: '仓库不存在' })
|
|
|
|
|
|
- let result = await db.query(sql, [uuid, id])
|
|
|
+ const repoPath = repoInfo.path
|
|
|
|
|
|
- if (result && result.affectedRows > 0) {
|
|
|
- res.json({
|
|
|
- ...BaseStdResponse.OK
|
|
|
- })
|
|
|
+ const redisKeys = [
|
|
|
+ `gitLogs:${repoPath}`,
|
|
|
+ `contributors:${repoPath}`,
|
|
|
+ `codeStats:${repoPath}`
|
|
|
+ ]
|
|
|
+ await redis.del(...redisKeys)
|
|
|
+
|
|
|
+ try {
|
|
|
+ await fs.rm(repoPath, { recursive: true, force: true })
|
|
|
+ } catch (err) {
|
|
|
+ this.logger.warn(`仓库文件夹删除失败:${err.message}`)
|
|
|
+ }
|
|
|
+
|
|
|
+ // 执行数据库清理
|
|
|
+ const deleteSQLs = [
|
|
|
+ ['DELETE FROM repos WHERE create_user = ? AND id = ?', [uuid, id]],
|
|
|
+ ['DELETE FROM commit_summary_tasks WHERE create_user = ? AND repo_id = ?', [uuid, id]],
|
|
|
+ ['DELETE FROM file_summary_tasks WHERE create_user = ? AND repo_id = ?', [uuid, id]],
|
|
|
+ ['DELETE FROM scan_tasks WHERE create_user = ? AND repo_id = ?', [uuid, id]],
|
|
|
+ ]
|
|
|
+
|
|
|
+ for (let [sql, params] of deleteSQLs) {
|
|
|
+ await db.query(sql, params)
|
|
|
+ }
|
|
|
|
|
|
- } else {
|
|
|
- res.json({ ...BaseStdResponse.ERR, endpoint: 7894378, msg: '删除仓库失败!' })
|
|
|
+ return res.json({ ...BaseStdResponse.OK })
|
|
|
+
|
|
|
+ } catch (error) {
|
|
|
+ this.logger.error(`删除仓库异常:${error.stack}`)
|
|
|
+ return res.json({
|
|
|
+ ...BaseStdResponse.ERR,
|
|
|
+ msg: '删除仓库失败,请稍后重试'
|
|
|
+ })
|
|
|
}
|
|
|
}
|
|
|
}
|