From fbc858b43c8bd4ed3e77bbb5396c4c12c2d009bb Mon Sep 17 00:00:00 2001 From: Noah Hsu Date: Tue, 12 Jul 2022 14:03:03 +0800 Subject: [PATCH] chore: optimize get settings --- internal/bootstrap/data/setting.go | 4 +-- internal/conf/const.go | 2 +- internal/db/settingitem.go | 16 ++++++++++++ server/handles/setting.go | 42 +++++++++++++++++++++++------- 4 files changed, 52 insertions(+), 12 deletions(-) diff --git a/internal/bootstrap/data/setting.go b/internal/bootstrap/data/setting.go index e8f3e866..94773c32 100644 --- a/internal/bootstrap/data/setting.go +++ b/internal/bootstrap/data/setting.go @@ -71,10 +71,10 @@ func initialSettings() { {Key: conf.ApiUrl, Value: "", Type: conf.TypeString, Group: model.SITE}, {Key: conf.BasePath, Value: "", Type: conf.TypeString, Group: model.SITE}, {Key: conf.SiteTitle, Value: "AList", Type: conf.TypeString, Group: model.SITE}, - {Key: conf.SiteLogo, Value: "https://cdn.jsdelivr.net/gh/alist-org/logo@main/logo.svg", Type: conf.TypeString, Group: model.SITE}, - {Key: conf.Favicon, Value: "https://cdn.jsdelivr.net/gh/alist-org/logo@main/logo.svg", Type: conf.TypeString, Group: model.SITE}, {Key: conf.Announcement, Value: "https://github.com/alist-org/alist", Type: conf.TypeString, Group: model.SITE}, // style settings + {Key: conf.Logo, Value: "https://cdn.jsdelivr.net/gh/alist-org/logo@main/logo.svg", Type: conf.TypeString, Group: model.STYLE}, + {Key: conf.Favicon, Value: "https://cdn.jsdelivr.net/gh/alist-org/logo@main/logo.svg", Type: conf.TypeString, Group: model.STYLE}, {Key: conf.IconColor, Value: "#1890ff", Type: conf.TypeString, Group: model.STYLE}, // preview settings {Key: conf.TextTypes, Value: "txt,htm,html,xml,java,properties,sql,js,md,json,conf,ini,vue,php,py,bat,gitignore,yml,go,sh,c,cpp,h,hpp,tsx,vtt,srt,ass,rs,lrc", Type: conf.TypeText, Group: model.PREVIEW, Flag: model.PRIVATE}, diff --git a/internal/conf/const.go b/internal/conf/const.go index 447502a7..5ce1fb58 100644 --- a/internal/conf/const.go +++ b/internal/conf/const.go @@ -13,7 +13,7 @@ const ( ApiUrl = "api_url" BasePath = "base_path" SiteTitle = "site_title" - SiteLogo = "site_logo" + Logo = "logo" Favicon = "favicon" Announcement = "announcement" IconColor = "icon_color" diff --git a/internal/db/settingitem.go b/internal/db/settingitem.go index 773b5181..48a9dea0 100644 --- a/internal/db/settingitem.go +++ b/internal/db/settingitem.go @@ -54,6 +54,14 @@ func GetSettingItemByKey(key string) (*model.SettingItem, error) { return &settingItem, nil } +func GetSettingItemInKeys(keys []string) ([]model.SettingItem, error) { + var settingItem []model.SettingItem + if err := db.Where(fmt.Sprintf("%s in ?", columnName("key")), keys).Find(&settingItem).Error; err != nil { + return nil, errors.WithStack(err) + } + return settingItem, nil +} + func GetPublicSettingItems() ([]model.SettingItem, error) { var settingItems []model.SettingItem if err := db.Where(fmt.Sprintf("%s in ?", columnName("flag")), []int{model.PUBLIC, model.READONLY}).Find(&settingItems).Error; err != nil { @@ -70,6 +78,14 @@ func GetSettingItemsByGroup(group int) ([]model.SettingItem, error) { return settingItems, nil } +func GetSettingItemsInGroups(groups []int) ([]model.SettingItem, error) { + var settingItems []model.SettingItem + if err := db.Where(fmt.Sprintf("%s in ?", columnName("group")), groups).Find(&settingItems).Error; err != nil { + return nil, errors.WithStack(err) + } + return settingItems, nil +} + func SaveSettingItems(items []model.SettingItem) error { settingsMap = nil return errors.WithStack(db.Save(items).Error) diff --git a/server/handles/setting.go b/server/handles/setting.go index a1eb94bd..3c0e016c 100644 --- a/server/handles/setting.go +++ b/server/handles/setting.go @@ -9,6 +9,7 @@ import ( "github.com/alist-org/alist/v3/server/common" "github.com/gin-gonic/gin" "strconv" + "strings" ) func ResetToken(c *gin.Context) { @@ -24,12 +25,22 @@ func ResetToken(c *gin.Context) { func GetSetting(c *gin.Context) { key := c.Query("key") - item, err := db.GetSettingItemByKey(key) - if err != nil { - common.ErrorResp(c, err, 400) - return + keys := c.Query("keys") + if key != "" { + item, err := db.GetSettingItemByKey(key) + if err != nil { + common.ErrorResp(c, err, 400) + return + } + common.SuccessResp(c, item) + } else { + items, err := db.GetSettingItemInKeys(strings.Split(keys, ",")) + if err != nil { + common.ErrorResp(c, err, 400) + return + } + common.SuccessResp(c, items) } - common.SuccessResp(c, item) } func SaveSettings(c *gin.Context) { @@ -47,15 +58,28 @@ func SaveSettings(c *gin.Context) { func ListSettings(c *gin.Context) { groupStr := c.Query("group") + groupsStr := c.Query("groups") var settings []model.SettingItem var err error - if groupStr == "" { + if groupsStr == "" && groupStr == "" { settings, err = db.GetSettingItems() } else { - group, err := strconv.Atoi(groupStr) - if err == nil { - settings, err = db.GetSettingItemsByGroup(group) + var groupStrings []string + if groupsStr != "" { + groupStrings = strings.Split(groupsStr, ",") + } else { + groupStrings = append(groupStrings, groupStr) } + var groups []int + for _, str := range groupStrings { + group, err := strconv.Atoi(str) + if err != nil { + common.ErrorResp(c, err, 400) + return + } + groups = append(groups, group) + } + settings, err = db.GetSettingItemsInGroups(groups) } if err != nil { common.ErrorResp(c, err, 400)