From 8f42bec270428bd1714258dd7cd0d8e60d7d87af Mon Sep 17 00:00:00 2001 From: utkarshcmu Date: Sun, 6 Mar 2016 11:42:15 -0800 Subject: [PATCH] Implemented GetUserPreferences API --- pkg/api/api.go | 2 +- pkg/api/preferences.go | 11 +++++++++++ pkg/models/preferences.go | 19 +++++++++++++++++++ pkg/services/sqlstore/preferences.go | 22 ++++++++++++++++++++++ 4 files changed, 53 insertions(+), 1 deletion(-) diff --git a/pkg/api/api.go b/pkg/api/api.go index a3d206c4956..c02629ddd8f 100644 --- a/pkg/api/api.go +++ b/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.SavePreferencesCommand{}), wrap(SaveUserPreferences)) + r.Combo("/prefs").Get(GetUserPreferences).Put(bind(m.SavePreferencesCommand{}), wrap(SaveUserPreferences)) }) // users (admin permission required) diff --git a/pkg/api/preferences.go b/pkg/api/preferences.go index 849ed4aa8aa..3a72467acb0 100644 --- a/pkg/api/preferences.go +++ b/pkg/api/preferences.go @@ -19,3 +19,14 @@ func SaveUserPreferences(c *middleware.Context, cmd m.SavePreferencesCommand) Re return ApiSuccess("User preferences saved") } + +func GetUserPreferences(c *middleware.Context) Response { + + query := m.GetPreferencesQuery{PrefId: c.UserId, PrefType: `user`} + + if err := bus.Dispatch(&query); err != nil { + return ApiError(500, "Failed to get user", err) + } + + return Json(200, query.Result) +} diff --git a/pkg/models/preferences.go b/pkg/models/preferences.go index 8476ec49429..d54bbcda9bc 100644 --- a/pkg/models/preferences.go +++ b/pkg/models/preferences.go @@ -16,6 +16,16 @@ type Preferences struct { PrefData map[string]interface{} } +// --------------------- +// QUERIES + +type GetPreferencesQuery struct { + PrefId int64 + PrefType string + + Result PreferencesDTO +} + // --------------------- // COMMANDS @@ -24,3 +34,12 @@ type SavePreferencesCommand struct { PrefId int64 `json:"-"` PrefType string `json:"-"` } + +// ---------------------- +// DTO & Projections + +type PreferencesDTO struct { + PrefId int64 `json:"prefId"` + PrefType string `json:"prefType"` + PrefData map[string]interface{} `json:"prefData"` +} diff --git a/pkg/services/sqlstore/preferences.go b/pkg/services/sqlstore/preferences.go index 756048360ec..7d210749a7d 100644 --- a/pkg/services/sqlstore/preferences.go +++ b/pkg/services/sqlstore/preferences.go @@ -6,9 +6,31 @@ import ( ) func init() { + bus.AddHandler("sql", GetPreferences) bus.AddHandler("sql", SavePreferences) } +func GetPreferences(query *m.GetPreferencesQuery) error { + + sql := `SELECT * FROM preferences WHERE pref_id = ? ` + + `AND pref_type = ?` + + var prefResults = make([]m.Preferences, 0) + + resultsErr := x.Sql(sql, query.PrefId, query.PrefType).Find(&prefResults) + + if resultsErr != nil { + return resultsErr + } + query.Result = m.PreferencesDTO{ + PrefId: prefResults[0].PrefId, + PrefType: prefResults[0].PrefType, + PrefData: prefResults[0].PrefData, + } + + return nil +} + func SavePreferences(cmd *m.SavePreferencesCommand) error { return inTransaction2(func(sess *session) error {