package handler import ( "encoding/json" "net/http" "soul-api/internal/database" "soul-api/internal/model" "github.com/gin-gonic/gin" ) // GetConfig GET /api/config 从 system_config 读取并合并(与 app/api/config 结构一致) func GetConfig(c *gin.Context) { var list []model.SystemConfig if err := database.DB().Order("config_key ASC").Find(&list).Error; err != nil { c.JSON(http.StatusOK, gin.H{ "success": true, "paymentMethods": gin.H{}, "liveQRCodes": []interface{}{}, "siteConfig": gin.H{}, "menuConfig": gin.H{}, "pageConfig": gin.H{}, }) return } out := gin.H{ "success": true, "paymentMethods": gin.H{}, "liveQRCodes": []interface{}{}, "siteConfig": gin.H{}, "menuConfig": gin.H{}, "pageConfig": gin.H{}, "authorInfo": gin.H{}, "marketing": gin.H{}, "system": gin.H{}, } for _, row := range list { var val interface{} _ = json.Unmarshal(row.ConfigValue, &val) switch row.ConfigKey { case "site_config", "siteConfig": if m, ok := val.(map[string]interface{}); ok { out["siteConfig"] = m } case "menu_config", "menuConfig": out["menuConfig"] = val case "page_config", "pageConfig": if m, ok := val.(map[string]interface{}); ok { out["pageConfig"] = m } case "payment_methods", "paymentMethods": if m, ok := val.(map[string]interface{}); ok { out["paymentMethods"] = m } case "live_qr_codes", "liveQRCodes": out["liveQRCodes"] = val case "author_info", "authorInfo": if m, ok := val.(map[string]interface{}); ok { out["authorInfo"] = m } case "marketing": if m, ok := val.(map[string]interface{}); ok { out["marketing"] = m } case "system": if m, ok := val.(map[string]interface{}); ok { out["system"] = m } } } c.JSON(http.StatusOK, out) }