feat(preferences): lots of refactoring and changes to #3214

This commit is contained in:
Torkel Ödegaard
2016-03-15 22:49:52 +01:00
parent e06756bcab
commit a88176e060
7 changed files with 66 additions and 102 deletions
@@ -4,20 +4,27 @@ import . "github.com/grafana/grafana/pkg/services/sqlstore/migrator"
func addPreferencesMigrations(mg *Migrator) {
preferencesV1 := Table{
mg.AddMigration("drop preferences table v2", NewDropTableMigration("preferences"))
preferencesV2 := Table{
Name: "preferences",
Columns: []*Column{
{Name: "id", Type: DB_BigInt, IsPrimaryKey: true, IsAutoIncrement: true},
{Name: "org_id", Type: DB_Int, Nullable: false},
{Name: "user_id", Type: DB_NVarchar, Length: 255, Nullable: false},
{Name: "org_id", Type: DB_Int, Nullable: true},
{Name: "user_id", Type: DB_NVarchar, Length: 255, Nullable: true},
{Name: "version", Type: DB_Int, Nullable: false},
{Name: "preference", Type: DB_Text, Nullable: false},
{Name: "home_dashboard_id", Type: DB_BigInt, Nullable: true},
{Name: "timezone", Type: DB_NVarchar, Length: 50, Nullable: true},
{Name: "theme", Type: DB_NVarchar, Length: 20, Nullable: true},
{Name: "created", Type: DB_DateTime, Nullable: false},
{Name: "updated", Type: DB_DateTime, Nullable: false},
},
Indices: []*Index{
{Cols: []string{"org_id"}},
{Cols: []string{"user_id"}},
},
}
// create table
mg.AddMigration("create preferences table v1", NewAddTableMigration(preferencesV1))
mg.AddMigration("create preferences table v2", NewAddTableMigration(preferencesV2))
}
+23 -54
View File
@@ -3,7 +3,6 @@ package sqlstore
import (
"github.com/grafana/grafana/pkg/bus"
m "github.com/grafana/grafana/pkg/models"
"time"
)
func init() {
@@ -13,19 +12,15 @@ func init() {
func GetPreferences(query *m.GetPreferencesQuery) error {
sql := `SELECT * FROM preferences WHERE user_id = ? ` +
`AND org_id = ?`
var prefs m.Preferences
exists, err := x.Where("org_id=? AND user_id=?", query.OrgId, query.UserId).Get(&prefs)
var prefResults = make([]m.Preferences, 0)
resultsErr := x.Sql(sql, query.UserId, query.OrgId).Find(&prefResults)
if resultsErr != nil {
return resultsErr
if err != nil {
return err
}
if len(prefResults) > 0 {
query.Result = &prefResults[0]
if exists {
query.Result = &prefs
} else {
query.Result = new(m.Preferences)
}
@@ -36,51 +31,25 @@ func GetPreferences(query *m.GetPreferencesQuery) error {
func SavePreferences(cmd *m.SavePreferencesCommand) error {
return inTransaction2(func(sess *session) error {
sql := `SELECT * FROM preferences WHERE user_id = ? ` +
`AND org_id = ?`
var prefs m.Preferences
exists, err := sess.Where("org_id=? AND user_id=?", cmd.OrgId, cmd.UserId).Get(&prefs)
var prefResults = make([]m.Preferences, 0)
resultsErr := sess.Sql(sql, cmd.UserId, cmd.OrgId).Find(&prefResults)
if resultsErr != nil {
return resultsErr
}
var savePref m.Preferences
var affectedRows int64
var saveErr error
if len(prefResults) == 0 {
savePref.UserId = cmd.UserId
savePref.OrgId = cmd.OrgId
savePref.Preference = cmd.Preference
savePref = SetPreferencesModel(savePref, false)
affectedRows, saveErr = sess.Insert(&savePref)
if !exists {
prefs = m.Preferences{
UserId: cmd.UserId,
OrgId: cmd.OrgId,
HomeDashboardId: cmd.HomeDashboardId,
Timezone: cmd.Timezone,
Theme: cmd.Theme,
}
_, err = sess.Insert(&prefs)
return err
} else {
savePref = prefResults[0]
savePref.Preference = cmd.Preference
savePref = SetPreferencesModel(savePref, true)
affectedRows, saveErr = sess.Id(savePref.Id).Update(&savePref)
prefs.HomeDashboardId = cmd.HomeDashboardId
prefs.Timezone = cmd.Timezone
prefs.Theme = cmd.Theme
_, err = sess.Id(prefs.Id).Update(&prefs)
return err
}
if affectedRows == 0 {
return m.ErrPreferencesNotFound
}
return saveErr
})
}
func SetPreferencesModel(pref m.Preferences, updating bool) m.Preferences {
if updating {
pref.Version = pref.Version + 1
} else {
pref.Version = 0
pref.Created = time.Now()
}
pref.Updated = time.Now()
return pref
}