package controllers import ( "github.com/engigu/baihu-panel/internal/models/vo" "github.com/engigu/baihu-panel/internal/services" "github.com/engigu/baihu-panel/internal/utils" "github.com/gin-gonic/gin" ) type EnvController struct { envService *services.EnvService } func NewEnvController(envService *services.EnvService) *EnvController { return &EnvController{envService: envService} } func (ec *EnvController) CreateEnvVar(c *gin.Context) { userID := c.GetString("userID") var req struct { Name string `json:"name" binding:"required"` Value string `json:"value" binding:"required"` Remark string `json:"remark"` Hidden *bool `json:"hidden"` } if err := c.ShouldBindJSON(&req); err != nil { utils.BadRequest(c, err.Error()) return } hidden := true if req.Hidden != nil { hidden = *req.Hidden } envVar := ec.envService.CreateEnvVar(req.Name, req.Value, req.Remark, hidden, userID) utils.Success(c, vo.ToEnvVO(envVar)) } func (ec *EnvController) GetEnvVars(c *gin.Context) { userID := c.GetString("userID") p := utils.ParsePagination(c) name := c.DefaultQuery("name", "") envVars, total := ec.envService.GetEnvVarsWithPagination(userID, name, p.Page, p.PageSize) utils.PaginatedResponse(c, vo.ToEnvVOListFromModels(envVars), total, p) } func (ec *EnvController) GetAllEnvVars(c *gin.Context) { userID := c.GetString("userID") envVars := ec.envService.GetEnvVarsByUserID(userID) utils.Success(c, vo.ToEnvVOListFromModels(envVars)) } func (ec *EnvController) GetEnvVar(c *gin.Context) { id := c.Param("id") if id == "" { utils.BadRequest(c, "无效的环境变量ID") return } envVar := ec.envService.GetEnvVarByID(id) if envVar == nil { utils.NotFound(c, "环境变量不存在") return } utils.Success(c, vo.ToEnvVO(envVar)) } func (ec *EnvController) UpdateEnvVar(c *gin.Context) { id := c.Param("id") if id == "" { utils.BadRequest(c, "无效的环境变量ID") return } var req struct { Name string `json:"name"` Value string `json:"value"` Remark string `json:"remark"` Hidden *bool `json:"hidden"` } if err := c.ShouldBindJSON(&req); err != nil { utils.BadRequest(c, err.Error()) return } // 对于更新,获取现有数据 existing := ec.envService.GetEnvVarByID(id) if existing == nil { utils.NotFound(c, "环境变量不存在") return } hidden := existing.Hidden if req.Hidden != nil { hidden = *req.Hidden } envVar := ec.envService.UpdateEnvVar(id, req.Name, req.Value, req.Remark, hidden) if envVar == nil { utils.NotFound(c, "环境变量不存在") return } utils.Success(c, vo.ToEnvVO(envVar)) } func (ec *EnvController) DeleteEnvVar(c *gin.Context) { id := c.Param("id") if id == "" { utils.BadRequest(c, "无效的环境变量ID") return } force := c.Query("force") == "true" success, associatedTasks := ec.envService.DeleteEnvVar(id, force) if len(associatedTasks) > 0 { c.JSON(200, utils.Response{ Code: 409, Msg: "该环境变量已被任务引用,请先在任务中删除引用或选择强制删除", Data: vo.ToTaskVOListFromModels(associatedTasks), }) return } if !success { utils.NotFound(c, "环境变量不存在或删除失败") return } utils.SuccessMsg(c, "删除成功") } func (ec *EnvController) GetAssociatedTasks(c *gin.Context) { id := c.Param("id") if id == "" { utils.BadRequest(c, "无效的环境变量ID") return } tasks := ec.envService.GetAssociatedTasks(id) utils.Success(c, vo.ToTaskVOListFromModels(tasks)) }