package controller import ( "net/http" "strconv" "strings" "ezops/model" "github.com/gin-gonic/gin" "gorm.io/gorm" ) // ==================== 云平台(Platform / Cloud)==================== // PlatformHandler 云平台处理器 type PlatformHandler struct { db *gorm.DB } func NewPlatformHandler(db *gorm.DB) *PlatformHandler { return &PlatformHandler{db: db} } // platformRequest 云平台创建/更新请求 type platformRequest struct { Name string `json:"name"` Code string `json:"code"` Type string `json:"type"` Status string `json:"status"` Website string `json:"website"` Description string `json:"description"` } // ListPlatforms 获取云平台列表 func (h *PlatformHandler) ListPlatforms(c *gin.Context) { var platforms []model.Cloud h.db.Find(&platforms) c.JSON(http.StatusOK, model.Response{ Code: 200, Message: "success", Data: model.ListResponse{ List: platforms, Total: int64(len(platforms)), }, }) } // CreatePlatform 创建云平台 func (h *PlatformHandler) CreatePlatform(c *gin.Context) { var req platformRequest if err := c.ShouldBindJSON(&req); err != nil { c.JSON(http.StatusBadRequest, model.Response{Code: 400, Message: "请求参数错误: " + err.Error()}) return } if strings.TrimSpace(req.Name) == "" || strings.TrimSpace(req.Code) == "" { c.JSON(http.StatusBadRequest, model.Response{Code: 400, Message: "平台名称和编码不能为空"}) return } cloudType := strings.TrimSpace(req.Type) if cloudType == "" { cloudType = "public" } status := strings.TrimSpace(req.Status) if status == "" { status = "active" } platform := model.Cloud{ Name: strings.TrimSpace(req.Name), Code: strings.TrimSpace(req.Code), Type: cloudType, Status: status, Website: req.Website, Description: req.Description, } if err := h.db.Create(&platform).Error; err != nil { c.JSON(http.StatusInternalServerError, model.Response{Code: 500, Message: "创建失败,编码可能已存在"}) return } c.JSON(http.StatusOK, model.Response{Code: 200, Message: "创建成功", Data: platform}) } // UpdatePlatform 更新云平台 func (h *PlatformHandler) UpdatePlatform(c *gin.Context) { id, _ := strconv.Atoi(c.Param("id")) var req platformRequest if err := c.ShouldBindJSON(&req); err != nil { c.JSON(http.StatusBadRequest, model.Response{Code: 400, Message: "请求参数错误: " + err.Error()}) return } var platform model.Cloud if err := h.db.First(&platform, id).Error; err != nil { c.JSON(http.StatusNotFound, model.Response{Code: 404, Message: "云平台不存在"}) return } if strings.TrimSpace(req.Name) != "" { platform.Name = strings.TrimSpace(req.Name) } if strings.TrimSpace(req.Code) != "" { platform.Code = strings.TrimSpace(req.Code) } if strings.TrimSpace(req.Type) != "" { platform.Type = strings.TrimSpace(req.Type) } if strings.TrimSpace(req.Status) != "" { platform.Status = strings.TrimSpace(req.Status) } platform.Website = req.Website platform.Description = req.Description if err := h.db.Save(&platform).Error; err != nil { c.JSON(http.StatusInternalServerError, model.Response{Code: 500, Message: "更新失败"}) return } c.JSON(http.StatusOK, model.Response{Code: 200, Message: "更新成功", Data: platform}) } // DeletePlatform 删除云平台 func (h *PlatformHandler) DeletePlatform(c *gin.Context) { id, _ := strconv.Atoi(c.Param("id")) if err := h.db.Delete(&model.Cloud{}, id).Error; err != nil { c.JSON(http.StatusInternalServerError, model.Response{Code: 500, Message: "删除失败"}) return } c.JSON(http.StatusOK, model.Response{Code: 200, Message: "删除成功"}) }