webui: Make some user preferences configurable
This extends 09f0237560.
- Extend user_pref with configurable profile fields and automatic migration defaults
- Move user info responses to read from user_pref instead of hardcoded values
- Add admin profile page for editing UI values after login
Signed-off-by: Sean Du <do4suki@gmail.com>
This commit is contained in:
@@ -1,5 +1,22 @@
|
||||
package usermodel
|
||||
|
||||
import (
|
||||
"strconv"
|
||||
"strings"
|
||||
)
|
||||
|
||||
const CurrentUserPrefProfileVersion = 1
|
||||
|
||||
const (
|
||||
DefaultUserLevel = 1028
|
||||
DefaultUserExp = 1089696
|
||||
DefaultUserNextExp = 1207185
|
||||
DefaultUserGameCoin = 112124104
|
||||
DefaultUserSnsCoin = 10000
|
||||
DefaultUserEnergyMax = 417
|
||||
DefaultUserOverMaxEnergy = 0
|
||||
)
|
||||
|
||||
type UserPref struct {
|
||||
ID int `xorm:"id pk autoincr"`
|
||||
UserID int `xorm:"user_id"`
|
||||
@@ -10,9 +27,76 @@ type UserPref struct {
|
||||
UserLevel int `xorm:"user_level"`
|
||||
UserDesc string `xorm:"user_desc"`
|
||||
InviteCode string `xorm:"invite_code"`
|
||||
UserExp int `xorm:"user_exp"`
|
||||
NextExp int `xorm:"next_exp"`
|
||||
GameCoin int `xorm:"game_coin"`
|
||||
SnsCoin int `xorm:"sns_coin"`
|
||||
EnergyMax int `xorm:"energy_max"`
|
||||
OverMaxEnergy int `xorm:"over_max_energy"`
|
||||
ProfileVersion int `xorm:"profile_version"`
|
||||
UpdateTime int64 `xorm:"update_time"`
|
||||
}
|
||||
|
||||
func (u *UserPref) ApplyProfileDefaults() {
|
||||
if u.UserLevel <= 0 {
|
||||
u.UserLevel = DefaultUserLevel
|
||||
}
|
||||
if strings.TrimSpace(u.InviteCode) == "" && u.UserID > 0 {
|
||||
u.InviteCode = strconv.Itoa(u.UserID)
|
||||
}
|
||||
if u.UserExp < 0 || u.UserExp == 0 {
|
||||
u.UserExp = DefaultUserExp
|
||||
}
|
||||
if u.NextExp < 0 || u.NextExp == 0 {
|
||||
u.NextExp = DefaultUserNextExp
|
||||
}
|
||||
if u.GameCoin < 0 || u.GameCoin == 0 {
|
||||
u.GameCoin = DefaultUserGameCoin
|
||||
}
|
||||
if u.SnsCoin < 0 || u.SnsCoin == 0 {
|
||||
u.SnsCoin = DefaultUserSnsCoin
|
||||
}
|
||||
if u.EnergyMax <= 0 {
|
||||
u.EnergyMax = DefaultUserEnergyMax
|
||||
}
|
||||
if u.OverMaxEnergy < 0 {
|
||||
u.OverMaxEnergy = DefaultUserOverMaxEnergy
|
||||
}
|
||||
u.ProfileVersion = CurrentUserPrefProfileVersion
|
||||
}
|
||||
|
||||
func (u UserPref) NeedsProfileMigration() bool {
|
||||
return u.ProfileVersion < CurrentUserPrefProfileVersion
|
||||
}
|
||||
|
||||
func (u UserPref) EffectiveEnergyMax() int {
|
||||
if u.EnergyMax > 0 {
|
||||
return u.EnergyMax
|
||||
}
|
||||
return DefaultUserEnergyMax
|
||||
}
|
||||
|
||||
func (u UserPref) EffectiveCurrentEnergy() int {
|
||||
if u.OverMaxEnergy > 0 {
|
||||
return u.OverMaxEnergy
|
||||
}
|
||||
return u.EffectiveEnergyMax()
|
||||
}
|
||||
|
||||
func UserPrefProfileColumns() []string {
|
||||
return []string{
|
||||
"user_level",
|
||||
"invite_code",
|
||||
"user_exp",
|
||||
"next_exp",
|
||||
"game_coin",
|
||||
"sns_coin",
|
||||
"energy_max",
|
||||
"over_max_energy",
|
||||
"profile_version",
|
||||
}
|
||||
}
|
||||
|
||||
func (UserPref) TableName() string {
|
||||
return "user_pref"
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user