Feat: get admin setting

pull/21/head
zijiren233 2 years ago
parent f8ab5d4da6
commit 3085eb800b

@ -41,6 +41,7 @@ func FirstOrCreateSettingItemValue(s *model.Setting) error {
return db.Where("name = ?", s.Name).Attrs(model.Setting{ return db.Where("name = ?", s.Name).Attrs(model.Setting{
Value: s.Value, Value: s.Value,
Type: s.Type, Type: s.Type,
Group: s.Group,
}).FirstOrCreate(s).Error }).FirstOrCreate(s).Error
} }

@ -9,8 +9,16 @@ const (
SettingTypeString SettingType = "string" SettingTypeString SettingType = "string"
) )
type SettingGroup string
const (
SettingGroupRoom SettingGroup = "room"
SettingGroupUser SettingGroup = "user"
)
type Setting struct { type Setting struct {
Name string `gorm:"primaryKey"` Name string `gorm:"primaryKey"`
Value string Value string
Type SettingType `gorm:"not null;default:string"` Type SettingType `gorm:"not null;default:string"`
Group SettingGroup `gorm:"not null"`
} }

@ -24,13 +24,14 @@ func initSettings(i ...Setting) error {
s := &model.Setting{ s := &model.Setting{
Name: b.Name(), Name: b.Name(),
Value: b.Raw(), Value: b.Raw(),
Type: model.SettingTypeBool, Type: b.Type(),
Group: b.Group(),
} }
err := db.FirstOrCreateSettingItemValue(s) err := db.FirstOrCreateSettingItemValue(s)
if err != nil { if err != nil {
return err return err
} }
b.SetRaw(s.Value) b.InitRaw(s.Value)
} }
return nil return nil
} }

@ -5,19 +5,43 @@ import (
"github.com/synctv-org/synctv/internal/model" "github.com/synctv-org/synctv/internal/model"
) )
var BoolSettings map[string]BoolSetting var (
BoolSettings map[string]BoolSetting
)
type Setting interface { type Setting interface {
Name() string Name() string
SetRaw(string) InitRaw(string)
Raw() string Raw() string
Type() model.SettingType Type() model.SettingType
Group() model.SettingGroup
Interface() (any, error)
}
func GetSettingByGroup(group model.SettingGroup) []Setting {
return settingByGroup(group, ToSettings(BoolSettings)...)
}
func settingByGroup(group model.SettingGroup, settings ...Setting) []Setting {
s := make([]Setting, 0, len(settings))
for _, bs := range settings {
if bs.Group() == group {
s = append(s, bs)
}
}
return s
} }
func ToSettings[s Setting](settings map[string]s) []Setting { func ToSettings[s Setting](settings ...map[string]s) []Setting {
var ss []Setting l := 0
for _, v := range settings { for _, v := range settings {
ss = append(ss, v) l += len(v)
}
var ss []Setting = make([]Setting, 0, l)
for _, v := range settings {
for _, s := range v {
ss = append(ss, s)
}
} }
return ss return ss
} }
@ -44,7 +68,7 @@ func (b *Bool) Name() string {
return b.name return b.name
} }
func (b *Bool) SetRaw(s string) { func (b *Bool) InitRaw(s string) {
if b.value == s { if b.value == s {
return return
} }
@ -78,6 +102,14 @@ func (b *Bool) Type() model.SettingType {
return model.SettingTypeBool return model.SettingTypeBool
} }
func (b *Bool) Group() model.SettingGroup {
return model.SettingGroupRoom
}
func (b *Bool) Interface() (any, error) {
return b.Get()
}
type Int64Setting interface { type Int64Setting interface {
Set(int64) error Set(int64) error
Get() (int64, error) Get() (int64, error)

@ -10,7 +10,7 @@ import (
"github.com/synctv-org/synctv/server/model" "github.com/synctv-org/synctv/server/model"
) )
func AdminSettings(ctx *gin.Context) { func EditAdminSettings(ctx *gin.Context) {
// user := ctx.MustGet("user").(*op.User) // user := ctx.MustGet("user").(*op.User)
req := model.AdminSettingsReq{} req := model.AdminSettingsReq{}
@ -38,3 +38,25 @@ func AdminSettings(ctx *gin.Context) {
ctx.Status(http.StatusNoContent) ctx.Status(http.StatusNoContent)
} }
func AdminSettings(ctx *gin.Context) {
// user := ctx.MustGet("user").(*op.User)
group := ctx.Query("group")
if group == "" {
ctx.AbortWithStatusJSON(http.StatusBadRequest, model.NewApiErrorStringResp("group is required"))
return
}
s := op.GetSettingByGroup(dbModel.SettingGroup(group))
resp := make(gin.H, len(s))
for _, v := range s {
i, err := v.Interface()
if err != nil {
ctx.AbortWithError(http.StatusInternalServerError, err)
return
}
resp[v.Name()] = i
}
ctx.JSON(http.StatusOK, model.NewApiDataResp(resp))
}

@ -41,7 +41,9 @@ func Init(e *gin.Engine) {
admin := api.Group("/admin") admin := api.Group("/admin")
admin.Use(middlewares.AuthAdminMiddleware) admin.Use(middlewares.AuthAdminMiddleware)
admin.POST("/settings", AdminSettings) admin.GET("/settings", AdminSettings)
admin.POST("/settings", EditAdminSettings)
} }
{ {

Loading…
Cancel
Save