This commit is contained in:
2025-07-07 14:29:06 +02:00
parent 881f2f32f4
commit ab1ddb7bd1

View File

@@ -6,6 +6,7 @@ package repository
import ( import (
"encoding/json" "encoding/json"
"maps"
"sync" "sync"
"time" "time"
@@ -24,7 +25,7 @@ var (
type UserCfgRepo struct { type UserCfgRepo struct {
DB *sqlx.DB DB *sqlx.DB
Lookup *sqlx.Stmt Lookup *sqlx.Stmt
uiDefaults map[string]interface{} uiDefaults map[string]any
cache *lrucache.Cache cache *lrucache.Cache
lock sync.RWMutex lock sync.RWMutex
} }
@@ -51,22 +52,18 @@ func GetUserCfgRepo() *UserCfgRepo {
// Return the personalised UI config for the currently authenticated // Return the personalised UI config for the currently authenticated
// user or return the plain default config. // user or return the plain default config.
func (uCfg *UserCfgRepo) GetUIConfig(user *schema.User) (map[string]interface{}, error) { func (uCfg *UserCfgRepo) GetUIConfig(user *schema.User) (map[string]any, error) {
if user == nil { if user == nil {
uCfg.lock.RLock() uCfg.lock.RLock()
copy := make(map[string]interface{}, len(uCfg.uiDefaults)) copy := make(map[string]any, len(uCfg.uiDefaults))
for k, v := range uCfg.uiDefaults { maps.Copy(copy, uCfg.uiDefaults)
copy[k] = v
}
uCfg.lock.RUnlock() uCfg.lock.RUnlock()
return copy, nil return copy, nil
} }
data := uCfg.cache.Get(user.Username, func() (interface{}, time.Duration, int) { data := uCfg.cache.Get(user.Username, func() (any, time.Duration, int) {
uiconfig := make(map[string]interface{}, len(uCfg.uiDefaults)) uiconfig := make(map[string]any, len(uCfg.uiDefaults))
for k, v := range uCfg.uiDefaults { maps.Copy(uiconfig, uCfg.uiDefaults)
uiconfig[k] = v
}
rows, err := uCfg.Lookup.Query(user.Username) rows, err := uCfg.Lookup.Query(user.Username)
if err != nil { if err != nil {
@@ -83,7 +80,7 @@ func (uCfg *UserCfgRepo) GetUIConfig(user *schema.User) (map[string]interface{},
return err, 0, 0 return err, 0, 0
} }
var val interface{} var val any
if err := json.Unmarshal([]byte(rawval), &val); err != nil { if err := json.Unmarshal([]byte(rawval), &val); err != nil {
cclog.Warn("Error while unmarshaling raw user uiconfig json") cclog.Warn("Error while unmarshaling raw user uiconfig json")
return err, 0, 0 return err, 0, 0
@@ -104,7 +101,7 @@ func (uCfg *UserCfgRepo) GetUIConfig(user *schema.User) (map[string]interface{},
return nil, err return nil, err
} }
return data.(map[string]interface{}), nil return data.(map[string]any), nil
} }
// If the context does not have a user, update the global ui configuration // If the context does not have a user, update the global ui configuration
@@ -115,7 +112,7 @@ func (uCfg *UserCfgRepo) UpdateConfig(
user *schema.User, user *schema.User,
) error { ) error {
if user == nil { if user == nil {
var val interface{} var val any
if err := json.Unmarshal([]byte(value), &val); err != nil { if err := json.Unmarshal([]byte(value), &val); err != nil {
cclog.Warn("Error while unmarshaling raw user config json") cclog.Warn("Error while unmarshaling raw user config json")
return err return err