Commit 660d3fa1 by utkarshcmu

Implemented savePreferences API

parent 1ef332e8
......@@ -96,7 +96,7 @@ func Register(r *macaron.Macaron) {
r.Delete("/stars/dashboard/:id", wrap(UnstarDashboard))
r.Put("/password", bind(m.ChangeUserPasswordCommand{}), wrap(ChangeUserPassword))
r.Get("/quotas", wrap(GetUserQuotas))
r.Put("/prefs", bind(m.SavePreferenceCommand{}), wrap(SaveUserPreferences))
r.Put("/prefs", bind(m.SavePreferencesCommand{}), wrap(SaveUserPreferences))
})
// users (admin permission required)
......
package api
import (
"github.com/grafana/grafana/pkg/bus"
"github.com/grafana/grafana/pkg/middleware"
m "github.com/grafana/grafana/pkg/models"
)
// PUT /api/user/prefs
func SaveUserPreferences(c *middleware.Context, cmd m.SavePreferencesCommand) Response {
cmd.PrefId = c.UserId
cmd.PrefType = `user`
if err := bus.Dispatch(&cmd); err != nil {
return ApiError(500, "Failed to saved user preferences", err)
}
return ApiSuccess("User preferences saved")
}
......@@ -5,7 +5,6 @@ import (
"github.com/grafana/grafana/pkg/middleware"
m "github.com/grafana/grafana/pkg/models"
"github.com/grafana/grafana/pkg/util"
"github.com/grafana/grafana/pkg/log"
)
// GET /api/user (current authenticated user)
......@@ -111,7 +110,7 @@ func UserSetUsingOrg(c *middleware.Context) Response {
}
func ChangeUserPassword(c *middleware.Context, cmd m.ChangeUserPasswordCommand) Response {
userQuery := m.GetUserByIdQuery{Id: c.UserId}
userQuery := m.GetUserByIdQuery{Id: c.UserId}
if err := bus.Dispatch(&userQuery); err != nil {
return ApiError(500, "Could not read user from database", err)
......@@ -145,18 +144,3 @@ func SearchUsers(c *middleware.Context) Response {
return Json(200, query.Result)
}
func SaveUserPreferences(c *middleware.Context, cmd m.SavePreferenceCommand) Response {
log.Info("%v", cmd.PrefData)
cmd.PrefId = c.UserId
cmd.PrefType = `user`
if err := bus.Dispatch(&cmd); err != nil {
return ApiError(500, "Failed to saved user preferences", err)
}
return ApiSuccess("User preferences saved")
}
......@@ -9,20 +9,18 @@ var (
ErrPreferenceNotFound = errors.New("Preference not found")
)
type Preference struct {
Id int64
PrefId int64
PrefType string
PrefData map[string]interface{}
type Preferences struct {
Id int64
PrefId int64
PrefType string
PrefData map[string]interface{}
}
// ---------------------
// COMMANDS
type SavePreferenceCommand struct {
PrefData map[string]interface{} `json:"prefData"`
PrefId int64 `json:"-"`
type SavePreferencesCommand struct {
PrefData map[string]interface{} `json:"prefData" binding:"Required"`
PrefId int64 `json:"-"`
PrefType string `json:"-"`
}
package sqlstore
import (
"github.com/grafana/grafana/pkg/bus"
m "github.com/grafana/grafana/pkg/models"
)
func init() {
bus.AddHandler("sql", SavePreferences)
}
func SavePreferences(cmd *m.SavePreferencesCommand) error {
return inTransaction2(func(sess *session) error {
sql := `SELECT * FROM preferences WHERE pref_id = ? ` +
`AND pref_type = ?`
var prefResults = make([]m.Preferences, 0)
resultsErr := sess.Sql(sql, cmd.PrefId, cmd.PrefType).Find(&prefResults)
if resultsErr != nil {
return resultsErr
}
var matchedPref m.Preferences
matchedPref = prefResults[0]
matchedPref.PrefData = cmd.PrefData
affectedRows, updateErr := sess.Id(matchedPref.Id).Update(&matchedPref)
if affectedRows == 0 {
return m.ErrPreferenceNotFound
}
return updateErr
})
}
......@@ -11,7 +11,6 @@ import (
m "github.com/grafana/grafana/pkg/models"
"github.com/grafana/grafana/pkg/setting"
"github.com/grafana/grafana/pkg/util"
"github.com/grafana/grafana/pkg/log"
)
func init() {
......@@ -28,7 +27,6 @@ func init() {
bus.AddHandler("sql", DeleteUser)
bus.AddHandler("sql", SetUsingOrg)
bus.AddHandler("sql", UpdateUserPermissions)
bus.AddHandler("sql", SaveUserPreferences)
}
func getOrgIdForNewUser(cmd *m.CreateUserCommand, sess *session) (int64, error) {
......@@ -348,26 +346,3 @@ func UpdateUserPermissions(cmd *m.UpdateUserPermissionsCommand) error {
return err
})
}
func SaveUserPreferences(cmd *m.SavePreferenceCommand) error {
return inTransaction2(func(sess *session) error {
log.Info("%v", cmd)
pref := m.Preference{
PrefId: cmd.PrefId,
PrefType: cmd.PrefType,
PrefData: cmd.PrefData,
}
sess.Table("preferences").Where("pref_id", pref.PrefId).And("pref_type", pref.PrefType)
if _, err := sess.Update(&pref); err != nil {
return err
}
log.Info("%v", pref)
return nil
})
}
......@@ -9,17 +9,17 @@
<form name="userForm" class="gf-form-group">
<div class="gf-form">
<span class="gf-form-label width-10">Home Dashboard</span>
<input class="gf-form-input max-width-21" type="text" ng-model="command.homeDashboard">
<input class="gf-form-input max-width-21" type="text" ng-model="prefData.homeDashboard">
</div>
<div class="gf-form">
<span class="gf-form-label width-10">Time Range</span>
<input class="gf-form-input max-width-21" type="text" ng-model="command.timeRange">
<input class="gf-form-input max-width-21" type="text" ng-model="prefData.timeRange">
</div>
<div class="gf-form">
<span class="gf-form-label width-10">Theme</span>
<input class="gf-form-input max-width-21" type="text" ng-model="command.theme">
<input class="gf-form-input max-width-21" type="text" ng-model="prefData.theme">
</div>
<div class="gf-form-button-row">
......
......@@ -9,14 +9,14 @@ function (angular) {
module.controller('PreferencesCtrl', function($scope, backendSrv, $location) {
$scope.command = {};
$scope.prefData = {};
$scope.setUserPreferences = function() {
if (!$scope.userForm.$valid) { return; }
console.log($scope.command);
backendSrv.put('/api/user/prefs', $scope.command).then(function() {
backendSrv.put('/api/user/prefs', { prefData : $scope.prefData }).then(function() {
$location.path("profile");
});
};
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment