feat: complete mise env base code
This commit is contained in:
@@ -24,8 +24,9 @@ func NewDependencyController() *DependencyController {
|
||||
|
||||
// List 获取依赖列表
|
||||
func (c *DependencyController) List(ctx *gin.Context) {
|
||||
depType := ctx.Query("type")
|
||||
deps, err := c.service.List(depType)
|
||||
language := ctx.Query("language")
|
||||
langVersion := ctx.Query("lang_version")
|
||||
deps, err := c.service.List(language, langVersion)
|
||||
if err != nil {
|
||||
utils.ServerError(ctx, "获取依赖列表失败")
|
||||
return
|
||||
@@ -40,10 +41,11 @@ func (c *DependencyController) List(ctx *gin.Context) {
|
||||
// Create 添加依赖
|
||||
func (c *DependencyController) Create(ctx *gin.Context) {
|
||||
var req struct {
|
||||
Name string `json:"name" binding:"required"`
|
||||
Version string `json:"version"`
|
||||
Type string `json:"type" binding:"required"`
|
||||
Remark string `json:"remark"`
|
||||
Name string `json:"name" binding:"required"`
|
||||
Version string `json:"version"`
|
||||
Language string `json:"language" binding:"required"`
|
||||
LangVersion string `json:"lang_version"`
|
||||
Remark string `json:"remark"`
|
||||
}
|
||||
|
||||
if err := ctx.ShouldBindJSON(&req); err != nil {
|
||||
@@ -51,16 +53,12 @@ func (c *DependencyController) Create(ctx *gin.Context) {
|
||||
return
|
||||
}
|
||||
|
||||
if req.Type != "py" && req.Type != "node" {
|
||||
utils.BadRequest(ctx, "类型必须是 py 或 node")
|
||||
return
|
||||
}
|
||||
|
||||
dep := &models.Dependency{
|
||||
Name: req.Name,
|
||||
Version: req.Version,
|
||||
Type: req.Type,
|
||||
Remark: req.Remark,
|
||||
Name: req.Name,
|
||||
Version: req.Version,
|
||||
Language: req.Language,
|
||||
LangVersion: req.LangVersion,
|
||||
Remark: req.Remark,
|
||||
}
|
||||
|
||||
if err := c.service.Create(dep); err != nil {
|
||||
@@ -87,13 +85,13 @@ func (c *DependencyController) Delete(ctx *gin.Context) {
|
||||
utils.SuccessMsg(ctx, "删除成功")
|
||||
}
|
||||
|
||||
// Install 安装依赖
|
||||
func (c *DependencyController) Install(ctx *gin.Context) {
|
||||
var req struct {
|
||||
Name string `json:"name" binding:"required"`
|
||||
Version string `json:"version"`
|
||||
Type string `json:"type" binding:"required"`
|
||||
Remark string `json:"remark"`
|
||||
Name string `json:"name" binding:"required"`
|
||||
Version string `json:"version"`
|
||||
Language string `json:"language"`
|
||||
LangVersion string `json:"lang_version"`
|
||||
Remark string `json:"remark"`
|
||||
}
|
||||
|
||||
if err := ctx.ShouldBindJSON(&req); err != nil {
|
||||
@@ -101,11 +99,21 @@ func (c *DependencyController) Install(ctx *gin.Context) {
|
||||
return
|
||||
}
|
||||
|
||||
language := req.Language
|
||||
if language == "" {
|
||||
language = ctx.Query("language")
|
||||
}
|
||||
langVersion := req.LangVersion
|
||||
if langVersion == "" {
|
||||
langVersion = ctx.Query("lang_version")
|
||||
}
|
||||
|
||||
dep := &models.Dependency{
|
||||
Name: req.Name,
|
||||
Version: req.Version,
|
||||
Type: req.Type,
|
||||
Remark: req.Remark,
|
||||
Name: req.Name,
|
||||
Version: req.Version,
|
||||
Language: language,
|
||||
LangVersion: langVersion,
|
||||
Remark: req.Remark,
|
||||
}
|
||||
|
||||
if err := c.service.Install(dep); err != nil {
|
||||
@@ -119,6 +127,63 @@ func (c *DependencyController) Install(ctx *gin.Context) {
|
||||
utils.SuccessMsg(ctx, "安装成功")
|
||||
}
|
||||
|
||||
// GetInstallCommand 获取安装命令
|
||||
func (c *DependencyController) GetInstallCommand(ctx *gin.Context) {
|
||||
var req struct {
|
||||
Name string `json:"name" binding:"required"`
|
||||
Version string `json:"version"`
|
||||
Language string `json:"language"`
|
||||
LangVersion string `json:"lang_version"`
|
||||
}
|
||||
|
||||
if err := ctx.ShouldBindJSON(&req); err != nil {
|
||||
utils.BadRequest(ctx, "参数错误")
|
||||
return
|
||||
}
|
||||
|
||||
language := req.Language
|
||||
if language == "" {
|
||||
language = ctx.Query("language")
|
||||
}
|
||||
langVersion := req.LangVersion
|
||||
if langVersion == "" {
|
||||
langVersion = ctx.Query("lang_version")
|
||||
}
|
||||
|
||||
dep := &models.Dependency{
|
||||
Name: req.Name,
|
||||
Version: req.Version,
|
||||
Language: language,
|
||||
LangVersion: langVersion,
|
||||
}
|
||||
|
||||
cmd, err := c.service.GetInstallCommand(dep)
|
||||
if err != nil {
|
||||
utils.ServerError(ctx, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
utils.Success(ctx, gin.H{"command": cmd})
|
||||
}
|
||||
|
||||
// GetReinstallAllCommand 获取全部重装命令
|
||||
func (c *DependencyController) GetReinstallAllCommand(ctx *gin.Context) {
|
||||
language := ctx.Query("language")
|
||||
langVersion := ctx.Query("lang_version")
|
||||
if language == "" {
|
||||
utils.BadRequest(ctx, "缺少 language 参数")
|
||||
return
|
||||
}
|
||||
|
||||
cmd, err := c.service.GetReinstallAllCommand(language, langVersion)
|
||||
if err != nil {
|
||||
utils.ServerError(ctx, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
utils.Success(ctx, gin.H{"command": cmd})
|
||||
}
|
||||
|
||||
// Uninstall 卸载依赖
|
||||
func (c *DependencyController) Uninstall(ctx *gin.Context) {
|
||||
id, err := strconv.Atoi(ctx.Param("id"))
|
||||
@@ -128,7 +193,7 @@ func (c *DependencyController) Uninstall(ctx *gin.Context) {
|
||||
}
|
||||
|
||||
// 获取依赖信息
|
||||
deps, _ := c.service.List("")
|
||||
deps, _ := c.service.List("", "")
|
||||
var dep *models.Dependency
|
||||
for _, d := range deps {
|
||||
if d.ID == id {
|
||||
@@ -162,7 +227,7 @@ func (c *DependencyController) Reinstall(ctx *gin.Context) {
|
||||
}
|
||||
|
||||
// 获取依赖信息
|
||||
deps, _ := c.service.List("")
|
||||
deps, _ := c.service.List("", "")
|
||||
var dep *models.Dependency
|
||||
for _, d := range deps {
|
||||
if d.ID == id {
|
||||
@@ -186,13 +251,14 @@ func (c *DependencyController) Reinstall(ctx *gin.Context) {
|
||||
|
||||
// ReinstallAll 重新安装所有依赖
|
||||
func (c *DependencyController) ReinstallAll(ctx *gin.Context) {
|
||||
depType := ctx.Query("type")
|
||||
if depType == "" {
|
||||
utils.BadRequest(ctx, "缺少 type 参数")
|
||||
language := ctx.Query("language")
|
||||
langVersion := ctx.Query("lang_version")
|
||||
if language == "" {
|
||||
utils.BadRequest(ctx, "缺少 language 参数")
|
||||
return
|
||||
}
|
||||
|
||||
deps, err := c.service.List(depType)
|
||||
deps, err := c.service.List(language, langVersion)
|
||||
if err != nil {
|
||||
utils.ServerError(ctx, "获取依赖列表失败")
|
||||
return
|
||||
@@ -215,13 +281,14 @@ func (c *DependencyController) ReinstallAll(ctx *gin.Context) {
|
||||
|
||||
// GetInstalled 获取已安装的包
|
||||
func (c *DependencyController) GetInstalled(ctx *gin.Context) {
|
||||
depType := ctx.Query("type")
|
||||
if depType == "" {
|
||||
utils.BadRequest(ctx, "缺少 type 参数")
|
||||
language := ctx.Query("language")
|
||||
langVersion := ctx.Query("lang_version")
|
||||
if language == "" {
|
||||
utils.BadRequest(ctx, "缺少 language 参数")
|
||||
return
|
||||
}
|
||||
|
||||
packages, err := c.service.GetInstalledPackages(depType)
|
||||
packages, err := c.service.GetInstalledPackages(language, langVersion)
|
||||
if err != nil {
|
||||
utils.ServerError(ctx, "获取已安装包失败: "+err.Error())
|
||||
return
|
||||
|
||||
@@ -0,0 +1,62 @@
|
||||
package controllers
|
||||
|
||||
import (
|
||||
"github.com/engigu/baihu-panel/internal/services"
|
||||
"github.com/engigu/baihu-panel/internal/utils"
|
||||
|
||||
"github.com/gin-gonic/gin"
|
||||
)
|
||||
|
||||
type MiseController struct {
|
||||
service *services.MiseService
|
||||
}
|
||||
|
||||
func NewMiseController(service *services.MiseService) *MiseController {
|
||||
return &MiseController{
|
||||
service: service,
|
||||
}
|
||||
}
|
||||
|
||||
// List 获取语言列表
|
||||
func (c *MiseController) List(ctx *gin.Context) {
|
||||
langs, err := c.service.List()
|
||||
if err != nil {
|
||||
utils.ServerError(ctx, "获取语言列表失败: "+err.Error())
|
||||
return
|
||||
}
|
||||
utils.Success(ctx, langs)
|
||||
}
|
||||
|
||||
// Sync 同步本地环境到数据库
|
||||
func (c *MiseController) Sync(ctx *gin.Context) {
|
||||
if err := c.service.Sync(); err != nil {
|
||||
utils.ServerError(ctx, "同步本地环境失败: "+err.Error())
|
||||
return
|
||||
}
|
||||
utils.Success(ctx, nil)
|
||||
}
|
||||
|
||||
// Plugins 获取可用插件列表
|
||||
func (c *MiseController) Plugins(ctx *gin.Context) {
|
||||
plugins, err := c.service.Plugins()
|
||||
if err != nil {
|
||||
utils.ServerError(ctx, "获取插件列表失败: "+err.Error())
|
||||
return
|
||||
}
|
||||
utils.Success(ctx, plugins)
|
||||
}
|
||||
|
||||
// Versions 获取指定插件的可用版本列表
|
||||
func (c *MiseController) Versions(ctx *gin.Context) {
|
||||
plugin := ctx.Query("plugin")
|
||||
if plugin == "" {
|
||||
utils.BadRequest(ctx, "参数 plugin 不能为空")
|
||||
return
|
||||
}
|
||||
versions, err := c.service.Versions(plugin)
|
||||
if err != nil {
|
||||
utils.ServerError(ctx, "获取版本列表失败: "+err.Error())
|
||||
return
|
||||
}
|
||||
utils.Success(ctx, versions)
|
||||
}
|
||||
@@ -61,6 +61,8 @@ func (tc *TaskController) CreateTask(c *gin.Context) {
|
||||
WorkDir string `json:"work_dir"`
|
||||
CleanConfig string `json:"clean_config"`
|
||||
Envs string `json:"envs"`
|
||||
Language string `json:"language"`
|
||||
LangVersion string `json:"lang_version"`
|
||||
AgentID *uint `json:"agent_id"`
|
||||
}
|
||||
|
||||
@@ -86,7 +88,7 @@ func (tc *TaskController) CreateTask(c *gin.Context) {
|
||||
workDir = resolveWorkDir(req.WorkDir)
|
||||
}
|
||||
|
||||
task := tc.taskService.CreateTask(req.Name, req.Command, req.Schedule, req.Timeout, workDir, req.CleanConfig, req.Envs, req.Type, req.Config, req.AgentID)
|
||||
task := tc.taskService.CreateTask(req.Name, req.Command, req.Schedule, req.Timeout, workDir, req.CleanConfig, req.Envs, req.Type, req.Config, req.AgentID, req.Language, req.LangVersion)
|
||||
|
||||
// 如果是 Agent 任务,通知 Agent;否则添加到本地 cron
|
||||
if task.AgentID != nil && *task.AgentID > 0 {
|
||||
@@ -156,6 +158,8 @@ func (tc *TaskController) UpdateTask(c *gin.Context) {
|
||||
CleanConfig string `json:"clean_config"`
|
||||
Envs string `json:"envs"`
|
||||
Enabled bool `json:"enabled"`
|
||||
Language string `json:"language"`
|
||||
LangVersion string `json:"lang_version"`
|
||||
AgentID *uint `json:"agent_id"`
|
||||
}
|
||||
|
||||
@@ -177,7 +181,7 @@ func (tc *TaskController) UpdateTask(c *gin.Context) {
|
||||
workDir = resolveWorkDir(req.WorkDir)
|
||||
}
|
||||
|
||||
task := tc.taskService.UpdateTask(id, req.Name, req.Command, req.Schedule, req.Timeout, workDir, req.CleanConfig, req.Envs, req.Enabled, req.Type, req.Config, req.AgentID)
|
||||
task := tc.taskService.UpdateTask(id, req.Name, req.Command, req.Schedule, req.Timeout, workDir, req.CleanConfig, req.Envs, req.Enabled, req.Type, req.Config, req.AgentID, req.Language, req.LangVersion)
|
||||
if task == nil {
|
||||
utils.NotFound(c, "任务不存在")
|
||||
return
|
||||
|
||||
Reference in New Issue
Block a user