95 lines
2.4 KiB
Go
95 lines
2.4 KiB
Go
package handlers
|
||
|
||
import (
|
||
"context"
|
||
"net/http"
|
||
"time"
|
||
|
||
"go.mongodb.org/mongo-driver/v2/bson"
|
||
"go.mongodb.org/mongo-driver/v2/mongo"
|
||
"go.mongodb.org/mongo-driver/v2/mongo/options"
|
||
|
||
"yh_web/server/config"
|
||
"yh_web/server/models"
|
||
|
||
"github.com/gin-gonic/gin"
|
||
)
|
||
|
||
const smsConfigDocID = "sms_platform"
|
||
|
||
// GetSMSConfig 获取短信平台配置(仅超级用户 role_id=0, role=admin)
|
||
func GetSMSConfig(c *gin.Context) {
|
||
ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
|
||
defer cancel()
|
||
|
||
coll := config.GetDB(config.DBName).Collection("system_config")
|
||
var cfg models.SMSConfig
|
||
err := coll.FindOne(ctx, bson.M{"_id": smsConfigDocID}).Decode(&cfg)
|
||
if err != nil {
|
||
if err == mongo.ErrNoDocuments {
|
||
c.JSON(http.StatusOK, models.SMSConfig{})
|
||
return
|
||
}
|
||
c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()})
|
||
return
|
||
}
|
||
c.JSON(http.StatusOK, cfg)
|
||
}
|
||
|
||
// SMSConfigUpdateInput 短信配置更新
|
||
type SMSConfigUpdateInput struct {
|
||
Provider string `json:"provider"`
|
||
AccessKey string `json:"access_key"`
|
||
SecretKey string `json:"secret_key"`
|
||
SignName string `json:"sign_name"`
|
||
TemplateID string `json:"template_id"`
|
||
Enabled *bool `json:"enabled"`
|
||
}
|
||
|
||
// UpdateSMSConfig 更新短信平台配置(仅超级用户)
|
||
func UpdateSMSConfig(c *gin.Context) {
|
||
var input SMSConfigUpdateInput
|
||
if err := c.ShouldBindJSON(&input); err != nil {
|
||
c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
|
||
return
|
||
}
|
||
|
||
ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
|
||
defer cancel()
|
||
|
||
coll := config.GetDB(config.DBName).Collection("system_config")
|
||
update := bson.M{}
|
||
if input.Provider != "" {
|
||
update["provider"] = input.Provider
|
||
}
|
||
if input.AccessKey != "" {
|
||
update["access_key"] = input.AccessKey
|
||
}
|
||
if input.SecretKey != "" {
|
||
update["secret_key"] = input.SecretKey
|
||
}
|
||
if input.SignName != "" {
|
||
update["sign_name"] = input.SignName
|
||
}
|
||
if input.TemplateID != "" {
|
||
update["template_id"] = input.TemplateID
|
||
}
|
||
if input.Enabled != nil {
|
||
update["enabled"] = *input.Enabled
|
||
}
|
||
|
||
if len(update) == 0 {
|
||
c.JSON(http.StatusBadRequest, gin.H{"error": "无有效更新字段"})
|
||
return
|
||
}
|
||
|
||
opts := options.UpdateOne().SetUpsert(true)
|
||
_, err := coll.UpdateOne(ctx, bson.M{"_id": smsConfigDocID}, bson.M{"$set": update}, opts)
|
||
if err != nil {
|
||
c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()})
|
||
return
|
||
}
|
||
|
||
c.JSON(http.StatusOK, gin.H{"message": "配置已保存"})
|
||
}
|