mirror of
https://github.com/grafana/grafana.git
synced 2025-01-16 11:42:35 -06:00
82b63688d2
* Chore: remove xorm from preference * separte feature toggle * fix comments * fix comments * remove the dublicated namedexec
129 lines
3.6 KiB
Go
129 lines
3.6 KiB
Go
package pref
|
|
|
|
import (
|
|
"bytes"
|
|
"database/sql/driver"
|
|
"encoding/json"
|
|
"errors"
|
|
"fmt"
|
|
"time"
|
|
)
|
|
|
|
var ErrPrefNotFound = errors.New("preference not found")
|
|
|
|
type Preference struct {
|
|
ID int64 `xorm:"pk autoincr 'id'" db:"id"`
|
|
OrgID int64 `xorm:"org_id" db:"org_id"`
|
|
UserID int64 `xorm:"user_id" db:"user_id"`
|
|
TeamID int64 `xorm:"team_id" db:"team_id"`
|
|
Teams []int64 `xorm:"extends"`
|
|
Version int `db:"version"`
|
|
HomeDashboardID int64 `xorm:"home_dashboard_id" db:"home_dashboard_id"`
|
|
Timezone string `db:"timezone"`
|
|
WeekStart string `db:"week_start"`
|
|
Theme string `db:"theme"`
|
|
Created time.Time `db:"created"`
|
|
Updated time.Time `db:"updated"`
|
|
JSONData *PreferenceJSONData `xorm:"json_data" db:"json_data"`
|
|
}
|
|
|
|
type GetPreferenceWithDefaultsQuery struct {
|
|
Teams []int64
|
|
OrgID int64
|
|
UserID int64
|
|
}
|
|
|
|
type GetPreferenceQuery struct {
|
|
OrgID int64
|
|
UserID int64
|
|
TeamID int64
|
|
}
|
|
|
|
type SavePreferenceCommand struct {
|
|
UserID int64
|
|
OrgID int64
|
|
TeamID int64
|
|
|
|
HomeDashboardID int64 `json:"homeDashboardId,omitempty"`
|
|
HomeDashboardUID *string `json:"homeDashboardUID,omitempty"`
|
|
Timezone string `json:"timezone,omitempty"`
|
|
WeekStart string `json:"weekStart,omitempty"`
|
|
Theme string `json:"theme,omitempty"`
|
|
Locale string `json:"locale,omitempty"`
|
|
Navbar *NavbarPreference `json:"navbar,omitempty"`
|
|
QueryHistory *QueryHistoryPreference `json:"queryHistory,omitempty"`
|
|
}
|
|
|
|
type PatchPreferenceCommand struct {
|
|
UserID int64
|
|
OrgID int64
|
|
TeamID int64
|
|
|
|
HomeDashboardID *int64 `json:"homeDashboardId,omitempty"`
|
|
HomeDashboardUID *string `json:"homeDashboardUID,omitempty"`
|
|
Timezone *string `json:"timezone,omitempty"`
|
|
WeekStart *string `json:"weekStart,omitempty"`
|
|
Theme *string `json:"theme,omitempty"`
|
|
Locale *string `json:"locale,omitempty"`
|
|
Navbar *NavbarPreference `json:"navbar,omitempty"`
|
|
QueryHistory *QueryHistoryPreference `json:"queryHistory,omitempty"`
|
|
}
|
|
|
|
type NavLink struct {
|
|
ID string `json:"id,omitempty"`
|
|
Text string `json:"text,omitempty"`
|
|
Url string `json:"url,omitempty"`
|
|
Target string `json:"target,omitempty"`
|
|
}
|
|
|
|
type NavbarPreference struct {
|
|
SavedItems []NavLink `json:"savedItems"`
|
|
}
|
|
|
|
type PreferenceJSONData struct {
|
|
Locale string `json:"locale"`
|
|
Navbar NavbarPreference `json:"navbar"`
|
|
QueryHistory QueryHistoryPreference `json:"queryHistory"`
|
|
}
|
|
|
|
type QueryHistoryPreference struct {
|
|
HomeTab string `json:"homeTab"`
|
|
}
|
|
|
|
func (j *PreferenceJSONData) FromDB(data []byte) error {
|
|
dec := json.NewDecoder(bytes.NewBuffer(data))
|
|
dec.UseNumber()
|
|
return dec.Decode(j)
|
|
}
|
|
|
|
func (j *PreferenceJSONData) Scan(val interface{}) error {
|
|
switch v := val.(type) {
|
|
case []byte:
|
|
if len(v) == 0 {
|
|
return nil
|
|
}
|
|
return json.Unmarshal(v, &j)
|
|
case string:
|
|
if len(v) == 0 {
|
|
return nil
|
|
}
|
|
return json.Unmarshal([]byte(v), &j)
|
|
default:
|
|
return fmt.Errorf("unsupported type: %T", v)
|
|
}
|
|
}
|
|
|
|
func (j *PreferenceJSONData) Value() (driver.Value, error) {
|
|
return j.ToDB()
|
|
}
|
|
|
|
func (j *PreferenceJSONData) ToDB() ([]byte, error) {
|
|
if j == nil {
|
|
return nil, nil
|
|
}
|
|
|
|
return json.Marshal(j)
|
|
}
|
|
|
|
func (p Preference) TableName() string { return "preferences" }
|