mirror of https://github.com/grafana/grafana
parent
706481b1a3
commit
ad3d15e28d
@ -1 +1 @@ |
||||
Subproject commit 66d9c4f1afb689eb2a1640561a06cb166e28c062 |
||||
Subproject commit 1e3970c6e56af810047ab815acd7fd5e681b5139 |
@ -1,35 +0,0 @@ |
||||
package api |
||||
|
||||
import ( |
||||
"github.com/torkelo/grafana-pro/pkg/bus" |
||||
"github.com/torkelo/grafana-pro/pkg/middleware" |
||||
m "github.com/torkelo/grafana-pro/pkg/models" |
||||
) |
||||
|
||||
func AddAsFavorite(c *middleware.Context) { |
||||
var cmd = m.AddAsFavoriteCommand{ |
||||
UserId: c.UserId, |
||||
DashboardId: c.ParamsInt64(":id"), |
||||
} |
||||
|
||||
if err := bus.Dispatch(&cmd); err != nil { |
||||
c.JsonApiErr(500, "Failed to add favorite", err) |
||||
return |
||||
} |
||||
|
||||
c.JsonOK("Dashboard marked as favorite") |
||||
} |
||||
|
||||
func RemoveAsFavorite(c *middleware.Context) { |
||||
var cmd = m.RemoveAsFavoriteCommand{ |
||||
UserId: c.UserId, |
||||
DashboardId: c.ParamsInt64(":id"), |
||||
} |
||||
|
||||
if err := bus.Dispatch(&cmd); err != nil { |
||||
c.JsonApiErr(500, "Failed to remove favorite", err) |
||||
return |
||||
} |
||||
|
||||
c.JsonOK("Favorite removed") |
||||
} |
@ -0,0 +1,45 @@ |
||||
package api |
||||
|
||||
import ( |
||||
"github.com/torkelo/grafana-pro/pkg/bus" |
||||
"github.com/torkelo/grafana-pro/pkg/middleware" |
||||
m "github.com/torkelo/grafana-pro/pkg/models" |
||||
) |
||||
|
||||
func StarDashboard(c *middleware.Context) { |
||||
var cmd = m.StarDashboardCommand{ |
||||
UserId: c.UserId, |
||||
DashboardId: c.ParamsInt64(":id"), |
||||
} |
||||
|
||||
if cmd.DashboardId <= 0 { |
||||
c.JsonApiErr(400, "Missing dashboard id", nil) |
||||
return |
||||
} |
||||
|
||||
if err := bus.Dispatch(&cmd); err != nil { |
||||
c.JsonApiErr(500, "Failed to star dashboard", err) |
||||
return |
||||
} |
||||
|
||||
c.JsonOK("Dashboard starred!") |
||||
} |
||||
|
||||
func UnstarDashboard(c *middleware.Context) { |
||||
var cmd = m.UnstarDashboardCommand{ |
||||
UserId: c.UserId, |
||||
DashboardId: c.ParamsInt64(":id"), |
||||
} |
||||
|
||||
if cmd.DashboardId <= 0 { |
||||
c.JsonApiErr(400, "Missing dashboard id", nil) |
||||
return |
||||
} |
||||
|
||||
if err := bus.Dispatch(&cmd); err != nil { |
||||
c.JsonApiErr(500, "Failed to unstar dashboard", err) |
||||
return |
||||
} |
||||
|
||||
c.JsonOK("Dashboard unstarred") |
||||
} |
@ -1,29 +0,0 @@ |
||||
package models |
||||
|
||||
type Favorite struct { |
||||
Id int64 |
||||
UserId int64 |
||||
DashboardId int64 |
||||
} |
||||
|
||||
// ----------------------
|
||||
// COMMANDS
|
||||
|
||||
type AddAsFavoriteCommand struct { |
||||
UserId int64 |
||||
DashboardId int64 |
||||
} |
||||
|
||||
type RemoveAsFavoriteCommand struct { |
||||
UserId int64 |
||||
DashboardId int64 |
||||
} |
||||
|
||||
// ---------------------
|
||||
// QUERIES
|
||||
|
||||
type GetUserFavoritesQuery struct { |
||||
UserId int64 |
||||
|
||||
Result []Favorite |
||||
} |
@ -0,0 +1,40 @@ |
||||
package models |
||||
|
||||
import "errors" |
||||
|
||||
var ErrCommandValidationFailed = errors.New("Command missing required fields") |
||||
|
||||
type Star struct { |
||||
Id int64 |
||||
UserId int64 |
||||
DashboardId int64 |
||||
} |
||||
|
||||
// ----------------------
|
||||
// COMMANDS
|
||||
|
||||
type StarDashboardCommand struct { |
||||
UserId int64 |
||||
DashboardId int64 |
||||
} |
||||
|
||||
type UnstarDashboardCommand struct { |
||||
UserId int64 |
||||
DashboardId int64 |
||||
} |
||||
|
||||
// ---------------------
|
||||
// QUERIES
|
||||
|
||||
type GetUserStarsQuery struct { |
||||
UserId int64 |
||||
|
||||
Result []Star |
||||
} |
||||
|
||||
type IsStarredByUserQuery struct { |
||||
UserId int64 |
||||
DashboardId int64 |
||||
|
||||
Result bool |
||||
} |
@ -1,41 +0,0 @@ |
||||
package sqlstore |
||||
|
||||
import ( |
||||
"github.com/go-xorm/xorm" |
||||
|
||||
"github.com/torkelo/grafana-pro/pkg/bus" |
||||
m "github.com/torkelo/grafana-pro/pkg/models" |
||||
) |
||||
|
||||
func init() { |
||||
bus.AddHandler("sql", AddAsFavorite) |
||||
bus.AddHandler("sql", RemoveAsFavorite) |
||||
bus.AddHandler("sql", GetUserFavorites) |
||||
} |
||||
|
||||
func AddAsFavorite(cmd *m.AddAsFavoriteCommand) error { |
||||
return inTransaction(func(sess *xorm.Session) error { |
||||
|
||||
entity := m.Favorite{ |
||||
UserId: cmd.UserId, |
||||
DashboardId: cmd.DashboardId, |
||||
} |
||||
|
||||
_, err := sess.Insert(&entity) |
||||
return err |
||||
}) |
||||
} |
||||
|
||||
func RemoveAsFavorite(cmd *m.RemoveAsFavoriteCommand) error { |
||||
return inTransaction(func(sess *xorm.Session) error { |
||||
var rawSql = "DELETE FROM favorite WHERE user_id=? and dashboard_id=?" |
||||
_, err := sess.Exec(rawSql, cmd.UserId, cmd.DashboardId) |
||||
return err |
||||
}) |
||||
} |
||||
|
||||
func GetUserFavorites(query *m.GetUserFavoritesQuery) error { |
||||
query.Result = make([]m.Favorite, 0) |
||||
err := x.Where("user_id=?", query.UserId).Find(&query.Result) |
||||
return err |
||||
} |
@ -0,0 +1,68 @@ |
||||
package sqlstore |
||||
|
||||
import ( |
||||
"strconv" |
||||
|
||||
"github.com/go-xorm/xorm" |
||||
|
||||
"github.com/torkelo/grafana-pro/pkg/bus" |
||||
m "github.com/torkelo/grafana-pro/pkg/models" |
||||
) |
||||
|
||||
func init() { |
||||
bus.AddHandler("sql", StarDashboard) |
||||
bus.AddHandler("sql", UnstarDashboard) |
||||
bus.AddHandler("sql", GetUserStars) |
||||
bus.AddHandler("sql", IsStarredByUser) |
||||
} |
||||
|
||||
func IsStarredByUser(query *m.IsStarredByUserQuery) error { |
||||
rawSql := "SELECT 1 from star where user_id=? and dashboard_id=?" |
||||
results, err := x.Query(rawSql, query.UserId, query.DashboardId) |
||||
|
||||
if err != nil { |
||||
return err |
||||
} |
||||
if len(results) == 0 { |
||||
return nil |
||||
} |
||||
|
||||
query.Result, _ = strconv.ParseBool(string(results[0]["1"])) |
||||
|
||||
return nil |
||||
} |
||||
|
||||
func StarDashboard(cmd *m.StarDashboardCommand) error { |
||||
if cmd.DashboardId == 0 || cmd.UserId == 0 { |
||||
return m.ErrCommandValidationFailed |
||||
} |
||||
|
||||
return inTransaction(func(sess *xorm.Session) error { |
||||
|
||||
entity := m.Star{ |
||||
UserId: cmd.UserId, |
||||
DashboardId: cmd.DashboardId, |
||||
} |
||||
|
||||
_, err := sess.Insert(&entity) |
||||
return err |
||||
}) |
||||
} |
||||
|
||||
func UnstarDashboard(cmd *m.UnstarDashboardCommand) error { |
||||
if cmd.DashboardId == 0 || cmd.UserId == 0 { |
||||
return m.ErrCommandValidationFailed |
||||
} |
||||
|
||||
return inTransaction(func(sess *xorm.Session) error { |
||||
var rawSql = "DELETE FROM star WHERE user_id=? and dashboard_id=?" |
||||
_, err := sess.Exec(rawSql, cmd.UserId, cmd.DashboardId) |
||||
return err |
||||
}) |
||||
} |
||||
|
||||
func GetUserStars(query *m.GetUserStarsQuery) error { |
||||
query.Result = make([]m.Star, 0) |
||||
err := x.Where("user_id=?", query.UserId).Find(&query.Result) |
||||
return err |
||||
} |
@ -0,0 +1,42 @@ |
||||
package sqlstore |
||||
|
||||
import ( |
||||
"testing" |
||||
|
||||
. "github.com/smartystreets/goconvey/convey" |
||||
m "github.com/torkelo/grafana-pro/pkg/models" |
||||
) |
||||
|
||||
func TestUserStarsDataAccess(t *testing.T) { |
||||
|
||||
Convey("Testing User Stars Data Access", t, func() { |
||||
InitTestDB(t) |
||||
|
||||
Convey("Given saved star", func() { |
||||
cmd := m.StarDashboardCommand{ |
||||
DashboardId: 10, |
||||
UserId: 12, |
||||
} |
||||
|
||||
err := StarDashboard(&cmd) |
||||
So(err, ShouldBeNil) |
||||
|
||||
Convey("IsStarredByUser should return true when starred", func() { |
||||
query := m.IsStarredByUserQuery{UserId: 12, DashboardId: 10} |
||||
err := IsStarredByUser(&query) |
||||
So(err, ShouldBeNil) |
||||
|
||||
So(query.Result, ShouldBeTrue) |
||||
}) |
||||
|
||||
Convey("IsStarredByUser should return false when not starred", func() { |
||||
query := m.IsStarredByUserQuery{UserId: 12, DashboardId: 12} |
||||
err := IsStarredByUser(&query) |
||||
So(err, ShouldBeNil) |
||||
|
||||
So(query.Result, ShouldBeFalse) |
||||
}) |
||||
|
||||
}) |
||||
}) |
||||
} |
Loading…
Reference in new issue