package handler import ( "net/http" "github.com/gin-gonic/gin" "gorm.io/gorm" "nex/backend/internal/config" ) // ModelHandler 模型管理处理器 type ModelHandler struct{} // NewModelHandler 创建模型处理器 func NewModelHandler() *ModelHandler { return &ModelHandler{} } // CreateModel 创建模型 func (h *ModelHandler) CreateModel(c *gin.Context) { var req struct { ID string `json:"id" binding:"required"` ProviderID string `json:"provider_id" binding:"required"` ModelName string `json:"model_name" binding:"required"` } if err := c.ShouldBindJSON(&req); err != nil { c.JSON(http.StatusBadRequest, gin.H{ "error": "缺少必需字段: id, provider_id, model_name", }) return } // 创建模型对象 model := &config.Model{ ID: req.ID, ProviderID: req.ProviderID, ModelName: req.ModelName, Enabled: true, // 默认启用 } // 保存到数据库 err := config.CreateModel(model) if err != nil { if err.Error() == "供应商不存在" { c.JSON(http.StatusBadRequest, gin.H{ "error": "供应商不存在", }) return } c.JSON(http.StatusInternalServerError, gin.H{ "error": "创建模型失败: " + err.Error(), }) return } c.JSON(http.StatusCreated, model) } // ListModels 列出模型 func (h *ModelHandler) ListModels(c *gin.Context) { providerID := c.Query("provider_id") models, err := config.ListModels(providerID) if err != nil { c.JSON(http.StatusInternalServerError, gin.H{ "error": "查询模型失败: " + err.Error(), }) return } c.JSON(http.StatusOK, models) } // GetModel 获取模型 func (h *ModelHandler) GetModel(c *gin.Context) { id := c.Param("id") model, err := config.GetModel(id) if err != nil { if err == gorm.ErrRecordNotFound { c.JSON(http.StatusNotFound, gin.H{ "error": "模型未找到", }) return } c.JSON(http.StatusInternalServerError, gin.H{ "error": "查询模型失败: " + err.Error(), }) return } c.JSON(http.StatusOK, model) } // UpdateModel 更新模型 func (h *ModelHandler) UpdateModel(c *gin.Context) { id := c.Param("id") var req map[string]interface{} if err := c.ShouldBindJSON(&req); err != nil { c.JSON(http.StatusBadRequest, gin.H{ "error": "无效的请求格式", }) return } // 更新模型 err := config.UpdateModel(id, req) if err != nil { if err == gorm.ErrRecordNotFound { c.JSON(http.StatusNotFound, gin.H{ "error": "模型未找到", }) return } if err.Error() == "供应商不存在" { c.JSON(http.StatusBadRequest, gin.H{ "error": "供应商不存在", }) return } c.JSON(http.StatusInternalServerError, gin.H{ "error": "更新模型失败: " + err.Error(), }) return } // 返回更新后的模型 model, err := config.GetModel(id) if err != nil { c.JSON(http.StatusInternalServerError, gin.H{ "error": "查询更新后的模型失败: " + err.Error(), }) return } c.JSON(http.StatusOK, model) } // DeleteModel 删除模型 func (h *ModelHandler) DeleteModel(c *gin.Context) { id := c.Param("id") err := config.DeleteModel(id) if err != nil { if err == gorm.ErrRecordNotFound { c.JSON(http.StatusNotFound, gin.H{ "error": "模型未找到", }) return } c.JSON(http.StatusInternalServerError, gin.H{ "error": "删除模型失败: " + err.Error(), }) return } c.Status(http.StatusNoContent) }