mirror of
https://github.com/grafana/grafana.git
synced 2026-08-18 17:15:08 -05:00
Worked on dashboard starring and unstarring, renamed favorite model to star
This commit is contained in:
@@ -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
|
||||
}
|
||||
@@ -10,7 +10,7 @@ import . "github.com/torkelo/grafana-pro/pkg/services/sqlstore/migrator"
|
||||
func addMigrations(mg *Migrator) {
|
||||
addMigrationLogMigrations(mg)
|
||||
addUserMigrations(mg)
|
||||
addFavoritesMigrations(mg)
|
||||
addStarMigrations(mg)
|
||||
addAccountMigrations(mg)
|
||||
addDashboardMigration(mg)
|
||||
addDataSourceMigration(mg)
|
||||
@@ -55,16 +55,16 @@ func addUserMigrations(mg *Migrator) {
|
||||
Table("user").Column(&Column{Name: "rands", Type: DB_NVarchar, Length: 255, Nullable: true}))
|
||||
}
|
||||
|
||||
func addFavoritesMigrations(mg *Migrator) {
|
||||
mg.AddMigration("create favorite table", new(AddTableMigration).
|
||||
Name("favorite").WithColumns(
|
||||
func addStarMigrations(mg *Migrator) {
|
||||
mg.AddMigration("create star table", new(AddTableMigration).
|
||||
Name("star").WithColumns(
|
||||
&Column{Name: "id", Type: DB_BigInt, IsPrimaryKey: true, IsAutoIncrement: true},
|
||||
&Column{Name: "user_id", Type: DB_BigInt, Nullable: false},
|
||||
&Column{Name: "dashboard_id", Type: DB_BigInt, Nullable: false},
|
||||
))
|
||||
|
||||
mg.AddMigration("add unique index favorite.user_id_dashboard_id", new(AddIndexMigration).
|
||||
Table("favorite").Columns("user_id", "dashboard_id").Unique())
|
||||
mg.AddMigration("add unique index star.user_id_dashboard_id", new(AddIndexMigration).
|
||||
Table("star").Columns("user_id", "dashboard_id").Unique())
|
||||
}
|
||||
|
||||
func addAccountMigrations(mg *Migrator) {
|
||||
|
||||
@@ -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)
|
||||
})
|
||||
|
||||
})
|
||||
})
|
||||
}
|
||||
Reference in New Issue
Block a user