Browse Source

Implemented savePreferences API

utkarshcmu 9 năm trước cách đây
mục cha
commit
660d3fa1e9

+ 1 - 1
pkg/api/api.go

@@ -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)

+ 21 - 0
pkg/api/preferences.go

@@ -0,0 +1,21 @@
+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")
+
+}

+ 1 - 17
pkg/api/user.go

@@ -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")
-
-}

+ 8 - 10
pkg/models/preferences.go

@@ -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:"-"`
-
 }

+ 37 - 0
pkg/services/sqlstore/preferences.go

@@ -0,0 +1,37 @@
+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
+	})
+}

+ 0 - 25
pkg/services/sqlstore/user.go

@@ -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
-  })  
-}

+ 3 - 3
public/app/features/profile/partials/preferences.html

@@ -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">

+ 2 - 2
public/app/features/profile/preferencesCtrl.js

@@ -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");
       });
     };