219 lines
6.6 KiB
Go
219 lines
6.6 KiB
Go
package system
|
||
|
||
import (
|
||
"fmt"
|
||
"os"
|
||
"path/filepath"
|
||
|
||
"git.echol.cn/loser/st/server/global"
|
||
"git.echol.cn/loser/st/server/model/common/response"
|
||
"git.echol.cn/loser/st/server/model/system/request"
|
||
systemRes "git.echol.cn/loser/st/server/model/system/response"
|
||
"git.echol.cn/loser/st/server/plugin/plugin-tool/utils"
|
||
"github.com/gin-gonic/gin"
|
||
"go.uber.org/zap"
|
||
)
|
||
|
||
type AutoCodePluginApi struct{}
|
||
|
||
// Install
|
||
// @Tags AutoCodePlugin
|
||
// @Summary 安装插件
|
||
// @Security ApiKeyAuth
|
||
// @accept multipart/form-data
|
||
// @Produce application/json
|
||
// @Param plug formData file true "this is a test file"
|
||
// @Success 200 {object} response.Response{data=[]interface{},msg=string} "安装插件成功"
|
||
// @Router /autoCode/installPlugin [post]
|
||
func (a *AutoCodePluginApi) Install(c *gin.Context) {
|
||
header, err := c.FormFile("plug")
|
||
if err != nil {
|
||
response.FailWithMessage(err.Error(), c)
|
||
return
|
||
}
|
||
web, server, err := autoCodePluginService.Install(header)
|
||
webStr := "web插件安装成功"
|
||
serverStr := "server插件安装成功"
|
||
if web == -1 {
|
||
webStr = "web端插件未成功安装,请按照文档自行解压安装,如果为纯后端插件请忽略此条提示"
|
||
}
|
||
if server == -1 {
|
||
serverStr = "server端插件未成功安装,请按照文档自行解压安装,如果为纯前端插件请忽略此条提示"
|
||
}
|
||
if err != nil {
|
||
response.FailWithMessage(err.Error(), c)
|
||
return
|
||
}
|
||
response.OkWithData([]interface{}{
|
||
gin.H{
|
||
"code": web,
|
||
"msg": webStr,
|
||
},
|
||
gin.H{
|
||
"code": server,
|
||
"msg": serverStr,
|
||
}}, c)
|
||
}
|
||
|
||
// Packaged
|
||
// @Tags AutoCodePlugin
|
||
// @Summary 打包插件
|
||
// @Security ApiKeyAuth
|
||
// @accept application/json
|
||
// @Produce application/json
|
||
// @Param plugName query string true "插件名称"
|
||
// @Success 200 {object} response.Response{data=map[string]interface{},msg=string} "打包插件成功"
|
||
// @Router /autoCode/pubPlug [post]
|
||
func (a *AutoCodePluginApi) Packaged(c *gin.Context) {
|
||
plugName := c.Query("plugName")
|
||
zipPath, err := autoCodePluginService.PubPlug(plugName)
|
||
if err != nil {
|
||
global.GVA_LOG.Error("打包失败!", zap.Error(err))
|
||
response.FailWithMessage("打包失败"+err.Error(), c)
|
||
return
|
||
}
|
||
response.OkWithMessage(fmt.Sprintf("打包成功,文件路径为:%s", zipPath), c)
|
||
}
|
||
|
||
// InitMenu
|
||
// @Tags AutoCodePlugin
|
||
// @Summary 打包插件
|
||
// @Security ApiKeyAuth
|
||
// @accept application/json
|
||
// @Produce application/json
|
||
// @Success 200 {object} response.Response{data=map[string]interface{},msg=string} "打包插件成功"
|
||
// @Router /autoCode/initMenu [post]
|
||
func (a *AutoCodePluginApi) InitMenu(c *gin.Context) {
|
||
var menuInfo request.InitMenu
|
||
err := c.ShouldBindJSON(&menuInfo)
|
||
if err != nil {
|
||
response.FailWithMessage(err.Error(), c)
|
||
return
|
||
}
|
||
err = autoCodePluginService.InitMenu(menuInfo)
|
||
if err != nil {
|
||
global.GVA_LOG.Error("创建初始化Menu失败!", zap.Error(err))
|
||
response.FailWithMessage("创建初始化Menu失败"+err.Error(), c)
|
||
return
|
||
}
|
||
response.OkWithMessage("文件变更成功", c)
|
||
}
|
||
|
||
// InitAPI
|
||
// @Tags AutoCodePlugin
|
||
// @Summary 打包插件
|
||
// @Security ApiKeyAuth
|
||
// @accept application/json
|
||
// @Produce application/json
|
||
// @Success 200 {object} response.Response{data=map[string]interface{},msg=string} "打包插件成功"
|
||
// @Router /autoCode/initAPI [post]
|
||
func (a *AutoCodePluginApi) InitAPI(c *gin.Context) {
|
||
var apiInfo request.InitApi
|
||
err := c.ShouldBindJSON(&apiInfo)
|
||
if err != nil {
|
||
response.FailWithMessage(err.Error(), c)
|
||
return
|
||
}
|
||
err = autoCodePluginService.InitAPI(apiInfo)
|
||
if err != nil {
|
||
global.GVA_LOG.Error("创建初始化API失败!", zap.Error(err))
|
||
response.FailWithMessage("创建初始化API失败"+err.Error(), c)
|
||
return
|
||
}
|
||
response.OkWithMessage("文件变更成功", c)
|
||
}
|
||
|
||
// InitDictionary
|
||
// @Tags AutoCodePlugin
|
||
// @Summary 打包插件
|
||
// @Security ApiKeyAuth
|
||
// @accept application/json
|
||
// @Produce application/json
|
||
// @Success 200 {object} response.Response{data=map[string]interface{},msg=string} "打包插件成功"
|
||
// @Router /autoCode/initDictionary [post]
|
||
func (a *AutoCodePluginApi) InitDictionary(c *gin.Context) {
|
||
var dictInfo request.InitDictionary
|
||
err := c.ShouldBindJSON(&dictInfo)
|
||
if err != nil {
|
||
response.FailWithMessage(err.Error(), c)
|
||
return
|
||
}
|
||
err = autoCodePluginService.InitDictionary(dictInfo)
|
||
if err != nil {
|
||
global.GVA_LOG.Error("创建初始化Dictionary失败!", zap.Error(err))
|
||
response.FailWithMessage("创建初始化Dictionary失败"+err.Error(), c)
|
||
return
|
||
}
|
||
response.OkWithMessage("文件变更成功", c)
|
||
}
|
||
|
||
// GetPluginList
|
||
// @Tags AutoCodePlugin
|
||
// @Summary 获取插件列表
|
||
// @Security ApiKeyAuth
|
||
// @Produce application/json
|
||
// @Success 200 {object} response.Response{data=[]systemRes.PluginInfo} "获取插件列表成功"
|
||
// @Router /autoCode/getPluginList [get]
|
||
func (a *AutoCodePluginApi) GetPluginList(c *gin.Context) {
|
||
serverDir := filepath.Join(global.GVA_CONFIG.AutoCode.Root, global.GVA_CONFIG.AutoCode.Server, "plugin")
|
||
webDir := filepath.Join(global.GVA_CONFIG.AutoCode.Root, global.GVA_CONFIG.AutoCode.Web, "plugin")
|
||
|
||
serverEntries, _ := os.ReadDir(serverDir)
|
||
webEntries, _ := os.ReadDir(webDir)
|
||
|
||
configMap := make(map[string]string)
|
||
|
||
for _, entry := range serverEntries {
|
||
if entry.IsDir() {
|
||
configMap[entry.Name()] = "server"
|
||
}
|
||
}
|
||
|
||
for _, entry := range webEntries {
|
||
if entry.IsDir() {
|
||
if val, ok := configMap[entry.Name()]; ok {
|
||
if val == "server" {
|
||
configMap[entry.Name()] = "full"
|
||
}
|
||
} else {
|
||
configMap[entry.Name()] = "web"
|
||
}
|
||
}
|
||
}
|
||
|
||
var list []systemRes.PluginInfo
|
||
for k, v := range configMap {
|
||
apis, menus, dicts := utils.GetPluginData(k)
|
||
list = append(list, systemRes.PluginInfo{
|
||
PluginName: k,
|
||
PluginType: v,
|
||
Apis: apis,
|
||
Menus: menus,
|
||
Dictionaries: dicts,
|
||
})
|
||
}
|
||
|
||
response.OkWithDetailed(list, "获取成功", c)
|
||
}
|
||
|
||
// Remove
|
||
// @Tags AutoCodePlugin
|
||
// @Summary 删除插件
|
||
// @Security ApiKeyAuth
|
||
// @Produce application/json
|
||
// @Param pluginName query string true "插件名称"
|
||
// @Param pluginType query string true "插件类型"
|
||
// @Success 200 {object} response.Response{msg=string} "删除插件成功"
|
||
// @Router /autoCode/removePlugin [post]
|
||
func (a *AutoCodePluginApi) Remove(c *gin.Context) {
|
||
pluginName := c.Query("pluginName")
|
||
pluginType := c.Query("pluginType")
|
||
err := autoCodePluginService.Remove(pluginName, pluginType)
|
||
if err != nil {
|
||
global.GVA_LOG.Error("删除失败!", zap.Error(err))
|
||
response.FailWithMessage("删除失败"+err.Error(), c)
|
||
return
|
||
}
|
||
response.OkWithMessage("删除成功", c)
|
||
}
|