Files
AIRouter/backend/api/provider_handlers.go

102 lines
2.6 KiB
Go

package api
import (
"ai-gateway/internal/db"
"ai-gateway/internal/models"
"fmt"
"net/http"
"github.com/gin-gonic/gin"
)
// GetProvidersHandler 处理 GET /api/providers 请求
func (h *APIHandler) GetProvidersHandler(c *gin.Context) {
providers, err := db.GetProviders(h.DB)
if err != nil {
c.JSON(http.StatusInternalServerError, gin.H{
"error": gin.H{
"message": "Failed to retrieve providers",
"type": "internal_error",
},
})
return
}
c.JSON(http.StatusOK, providers)
}
// GetProviderHandler 处理 GET /api/providers/:id 请求
func (h *APIHandler) GetProviderHandler(c *gin.Context) {
id := c.Param("id")
var providerID uint
if _, err := fmt.Sscanf(id, "%d", &providerID); err != nil {
c.JSON(http.StatusBadRequest, gin.H{"error": "Invalid provider ID"})
return
}
provider, err := db.GetProviderByID(h.DB, providerID)
if err != nil {
c.JSON(http.StatusNotFound, gin.H{"error": "Provider not found"})
return
}
c.JSON(http.StatusOK, provider)
}
// CreateProviderHandler 处理 POST /api/providers 请求
func (h *APIHandler) CreateProviderHandler(c *gin.Context) {
var provider models.Provider
if err := c.ShouldBindJSON(&provider); err != nil {
c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
return
}
if err := db.CreateProvider(h.DB, &provider); err != nil {
c.JSON(http.StatusInternalServerError, gin.H{"error": "Failed to create provider"})
return
}
c.JSON(http.StatusCreated, provider)
}
// UpdateProviderHandler 处理 PUT /api/providers/:id 请求
func (h *APIHandler) UpdateProviderHandler(c *gin.Context) {
id := c.Param("id")
var providerID uint
if _, err := fmt.Sscanf(id, "%d", &providerID); err != nil {
c.JSON(http.StatusBadRequest, gin.H{"error": "Invalid provider ID"})
return
}
var provider models.Provider
if err := c.ShouldBindJSON(&provider); err != nil {
c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
return
}
provider.ID = providerID
if err := db.UpdateProvider(h.DB, &provider); err != nil {
c.JSON(http.StatusInternalServerError, gin.H{"error": "Failed to update provider"})
return
}
c.JSON(http.StatusOK, provider)
}
// DeleteProviderHandler 处理 DELETE /api/providers/:id 请求
func (h *APIHandler) DeleteProviderHandler(c *gin.Context) {
id := c.Param("id")
var providerID uint
if _, err := fmt.Sscanf(id, "%d", &providerID); err != nil {
c.JSON(http.StatusBadRequest, gin.H{"error": "Invalid provider ID"})
return
}
if err := db.DeleteProvider(h.DB, providerID); err != nil {
c.JSON(http.StatusInternalServerError, gin.H{"error": "Failed to delete provider"})
return
}
c.JSON(http.StatusNoContent, nil)
}