2015-02-02 04:32:32 -06:00
|
|
|
package sqlstore
|
|
|
|
|
|
|
|
import (
|
2021-06-15 09:08:27 -05:00
|
|
|
"context"
|
|
|
|
|
2015-02-05 03:37:13 -06:00
|
|
|
"github.com/grafana/grafana/pkg/bus"
|
2020-02-29 06:35:15 -06:00
|
|
|
"github.com/grafana/grafana/pkg/models"
|
2015-02-02 04:32:32 -06:00
|
|
|
)
|
|
|
|
|
2021-09-28 10:54:45 -05:00
|
|
|
func (ss *SQLStore) addStarQueryAndCommandHandlers() {
|
|
|
|
bus.AddHandlerCtx("sql", ss.StarDashboard)
|
|
|
|
bus.AddHandlerCtx("sql", ss.UnstarDashboard)
|
|
|
|
bus.AddHandlerCtx("sql", ss.GetUserStars)
|
|
|
|
bus.AddHandlerCtx("sql", ss.IsStarredByUserCtx)
|
2015-02-02 04:32:32 -06:00
|
|
|
}
|
|
|
|
|
2021-09-28 10:54:45 -05:00
|
|
|
func (ss *SQLStore) IsStarredByUserCtx(ctx context.Context, query *models.IsStarredByUserQuery) error {
|
|
|
|
return ss.WithDbSession(ctx, func(sess *DBSession) error {
|
2021-06-15 09:08:27 -05:00
|
|
|
rawSQL := "SELECT 1 from star where user_id=? and dashboard_id=?"
|
2021-09-28 10:54:45 -05:00
|
|
|
results, err := sess.Query(rawSQL, query.UserId, query.DashboardId)
|
2015-02-02 04:32:32 -06:00
|
|
|
|
2021-06-15 09:08:27 -05:00
|
|
|
if err != nil {
|
|
|
|
return err
|
|
|
|
}
|
2015-02-04 04:35:59 -06:00
|
|
|
|
2021-06-15 09:08:27 -05:00
|
|
|
if len(results) == 0 {
|
|
|
|
return nil
|
|
|
|
}
|
2015-02-02 04:32:32 -06:00
|
|
|
|
2021-06-15 09:08:27 -05:00
|
|
|
query.Result = true
|
2015-02-02 04:32:32 -06:00
|
|
|
|
2021-06-15 09:08:27 -05:00
|
|
|
return nil
|
|
|
|
})
|
2015-02-02 04:32:32 -06:00
|
|
|
}
|
|
|
|
|
2021-09-28 10:54:45 -05:00
|
|
|
func (ss *SQLStore) StarDashboard(ctx context.Context, cmd *models.StarDashboardCommand) error {
|
2015-02-02 04:32:32 -06:00
|
|
|
if cmd.DashboardId == 0 || cmd.UserId == 0 {
|
2020-02-29 06:35:15 -06:00
|
|
|
return models.ErrCommandValidationFailed
|
2015-02-02 04:32:32 -06:00
|
|
|
}
|
|
|
|
|
2021-09-28 10:54:45 -05:00
|
|
|
return ss.WithTransactionalDbSession(ctx, func(sess *DBSession) error {
|
2020-02-29 06:35:15 -06:00
|
|
|
entity := models.Star{
|
2015-02-02 04:32:32 -06:00
|
|
|
UserId: cmd.UserId,
|
|
|
|
DashboardId: cmd.DashboardId,
|
|
|
|
}
|
|
|
|
|
|
|
|
_, err := sess.Insert(&entity)
|
|
|
|
return err
|
|
|
|
})
|
|
|
|
}
|
|
|
|
|
2021-09-28 10:54:45 -05:00
|
|
|
func (ss *SQLStore) UnstarDashboard(ctx context.Context, cmd *models.UnstarDashboardCommand) error {
|
2015-02-02 04:32:32 -06:00
|
|
|
if cmd.DashboardId == 0 || cmd.UserId == 0 {
|
2020-02-29 06:35:15 -06:00
|
|
|
return models.ErrCommandValidationFailed
|
2015-02-02 04:32:32 -06:00
|
|
|
}
|
|
|
|
|
2021-09-28 10:54:45 -05:00
|
|
|
return ss.WithTransactionalDbSession(ctx, func(sess *DBSession) error {
|
2020-11-10 23:21:08 -06:00
|
|
|
var rawSQL = "DELETE FROM star WHERE user_id=? and dashboard_id=?"
|
|
|
|
_, err := sess.Exec(rawSQL, cmd.UserId, cmd.DashboardId)
|
2015-02-02 04:32:32 -06:00
|
|
|
return err
|
|
|
|
})
|
|
|
|
}
|
|
|
|
|
2021-09-28 10:54:45 -05:00
|
|
|
func (ss *SQLStore) GetUserStars(ctx context.Context, query *models.GetUserStarsQuery) error {
|
|
|
|
return ss.WithDbSession(ctx, func(dbSession *DBSession) error {
|
|
|
|
var stars = make([]models.Star, 0)
|
|
|
|
err := dbSession.Where("user_id=?", query.UserId).Find(&stars)
|
2015-02-05 02:49:00 -06:00
|
|
|
|
2021-09-28 10:54:45 -05:00
|
|
|
query.Result = make(map[int64]bool)
|
|
|
|
for _, star := range stars {
|
|
|
|
query.Result[star.DashboardId] = true
|
|
|
|
}
|
2015-02-05 02:49:00 -06:00
|
|
|
|
2021-09-28 10:54:45 -05:00
|
|
|
return err
|
|
|
|
})
|
2015-02-02 04:32:32 -06:00
|
|
|
}
|