From 130b52c41598385bb5087c6fd97a5fa46cedce4c Mon Sep 17 00:00:00 2001 From: j2rong4cn <253551464@qq.com> Date: Fri, 31 May 2024 23:02:27 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=EF=BC=9A=E6=95=B0=E6=8D=AE?= =?UTF-8?q?=E5=BA=93=E4=B8=8D=E6=98=AFsqlite3=E6=97=B6=E4=BC=9A=E4=B9=B1?= =?UTF-8?q?=E5=BA=8F=E7=9A=84bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- internal/bootstrap/data/setting.go | 1 + internal/db/meta.go | 2 +- internal/db/settingitem.go | 3 ++- internal/db/storage.go | 9 +++------ internal/db/user.go | 2 +- internal/db/util.go | 5 +++++ internal/model/setting.go | 1 + 7 files changed, 14 insertions(+), 9 deletions(-) diff --git a/internal/bootstrap/data/setting.go b/internal/bootstrap/data/setting.go index 93a588e7622..9ec11e2b915 100644 --- a/internal/bootstrap/data/setting.go +++ b/internal/bootstrap/data/setting.go @@ -34,6 +34,7 @@ func initSettings() { // create or save setting for i := range initialSettingItems { item := &initialSettingItems[i] + item.Index = uint(i) if item.PreDefault == "" { item.PreDefault = item.Value } diff --git a/internal/db/meta.go b/internal/db/meta.go index 8b6a605e809..14532637a7b 100644 --- a/internal/db/meta.go +++ b/internal/db/meta.go @@ -34,7 +34,7 @@ func GetMetas(pageIndex, pageSize int) (metas []model.Meta, count int64, err err if err = metaDB.Count(&count).Error; err != nil { return nil, 0, errors.Wrapf(err, "failed get metas count") } - if err = metaDB.Offset((pageIndex - 1) * pageSize).Limit(pageSize).Find(&metas).Error; err != nil { + if err = metaDB.Order(columnName("id")).Offset((pageIndex - 1) * pageSize).Limit(pageSize).Find(&metas).Error; err != nil { return nil, 0, errors.Wrapf(err, "failed get find metas") } return metas, count, nil diff --git a/internal/db/settingitem.go b/internal/db/settingitem.go index 2ba0c665acd..9e61bfca00b 100644 --- a/internal/db/settingitem.go +++ b/internal/db/settingitem.go @@ -49,7 +49,8 @@ func GetSettingItemsByGroup(group int) ([]model.SettingItem, error) { 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 { + err := db.Order(columnName("index")).Where(fmt.Sprintf("%s in ?", columnName("group")), groups).Find(&settingItems).Error + if err != nil { return nil, errors.WithStack(err) } return settingItems, nil diff --git a/internal/db/storage.go b/internal/db/storage.go index d4e0730f064..376d42d7bf9 100644 --- a/internal/db/storage.go +++ b/internal/db/storage.go @@ -2,7 +2,6 @@ package db import ( "fmt" - "sort" "github.com/alist-org/alist/v3/internal/model" "github.com/pkg/errors" @@ -36,7 +35,7 @@ func GetStorages(pageIndex, pageSize int) ([]model.Storage, int64, error) { return nil, 0, errors.Wrapf(err, "failed get storages count") } var storages []model.Storage - if err := storageDB.Order(columnName("order")).Offset((pageIndex - 1) * pageSize).Limit(pageSize).Find(&storages).Error; err != nil { + if err := addStorageOrder(storageDB).Order(columnName("order")).Offset((pageIndex - 1) * pageSize).Limit(pageSize).Find(&storages).Error; err != nil { return nil, 0, errors.WithStack(err) } return storages, count, nil @@ -63,11 +62,9 @@ func GetStorageByMountPath(mountPath string) (*model.Storage, error) { func GetEnabledStorages() ([]model.Storage, error) { var storages []model.Storage - if err := db.Where(fmt.Sprintf("%s = ?", columnName("disabled")), false).Find(&storages).Error; err != nil { + err := addStorageOrder(db).Where(fmt.Sprintf("%s = ?", columnName("disabled")), false).Find(&storages).Error + if err != nil { return nil, errors.WithStack(err) } - sort.Slice(storages, func(i, j int) bool { - return storages[i].Order < storages[j].Order - }) return storages, nil } diff --git a/internal/db/user.go b/internal/db/user.go index 822926664c9..8c9641b2c55 100644 --- a/internal/db/user.go +++ b/internal/db/user.go @@ -54,7 +54,7 @@ func GetUsers(pageIndex, pageSize int) (users []model.User, count int64, err err if err := userDB.Count(&count).Error; err != nil { return nil, 0, errors.Wrapf(err, "failed get users count") } - if err := userDB.Offset((pageIndex - 1) * pageSize).Limit(pageSize).Find(&users).Error; err != nil { + if err := userDB.Order(columnName("id")).Offset((pageIndex - 1) * pageSize).Limit(pageSize).Find(&users).Error; err != nil { return nil, 0, errors.Wrapf(err, "failed get find users") } return users, count, nil diff --git a/internal/db/util.go b/internal/db/util.go index 38a06bcdacc..57f615bdeb1 100644 --- a/internal/db/util.go +++ b/internal/db/util.go @@ -4,6 +4,7 @@ import ( "fmt" "github.com/alist-org/alist/v3/internal/conf" + "gorm.io/gorm" ) func columnName(name string) string { @@ -12,3 +13,7 @@ func columnName(name string) string { } return fmt.Sprintf("`%s`", name) } + +func addStorageOrder(db *gorm.DB) *gorm.DB { + return db.Order(fmt.Sprintf("%s, %s", columnName("order"), columnName("id"))) +} diff --git a/internal/model/setting.go b/internal/model/setting.go index 9893124890e..c474935ed49 100644 --- a/internal/model/setting.go +++ b/internal/model/setting.go @@ -29,6 +29,7 @@ type SettingItem struct { Options string `json:"options"` // values for select Group int `json:"group"` // use to group setting in frontend Flag int `json:"flag"` // 0 = public, 1 = private, 2 = readonly, 3 = deprecated, etc. + Index uint `json:"index"` } func (s SettingItem) IsDeprecated() bool {