mirror of
https://github.com/grafana/grafana.git
synced 2025-02-25 18:55:37 -06:00
Also introduces an abstraction between playlist and dashboard. This will make it possible to att search, and tag filtering to playlists without any major refactoring
180 lines
3.6 KiB
Go
180 lines
3.6 KiB
Go
package sqlstore
|
|
|
|
import (
|
|
"fmt"
|
|
"github.com/go-xorm/xorm"
|
|
|
|
"github.com/grafana/grafana/pkg/bus"
|
|
m "github.com/grafana/grafana/pkg/models"
|
|
)
|
|
|
|
func init() {
|
|
bus.AddHandler("sql", CreatePlaylist)
|
|
bus.AddHandler("sql", UpdatePlaylist)
|
|
bus.AddHandler("sql", DeletePlaylist)
|
|
bus.AddHandler("sql", SearchPlaylists)
|
|
bus.AddHandler("sql", GetPlaylist)
|
|
bus.AddHandler("sql", GetPlaylistDashboards)
|
|
bus.AddHandler("sql", GetPlaylistItem)
|
|
}
|
|
|
|
func CreatePlaylist(query *m.CreatePlaylistQuery) error {
|
|
var err error
|
|
|
|
playlist := m.Playlist{
|
|
Title: query.Title,
|
|
Timespan: query.Timespan,
|
|
OrgId: query.OrgId,
|
|
}
|
|
|
|
_, err = x.Insert(&playlist)
|
|
|
|
fmt.Printf("%v", playlist.Id)
|
|
|
|
playlistItems := make([]m.PlaylistItem, 0)
|
|
for _, item := range query.Items {
|
|
playlistItems = append(playlistItems, m.PlaylistItem{
|
|
PlaylistId: playlist.Id,
|
|
Type: item.Type,
|
|
Value: item.Value,
|
|
Order: item.Order,
|
|
Title: item.Title,
|
|
})
|
|
}
|
|
|
|
_, err = x.Insert(&playlistItems)
|
|
|
|
query.Result = &playlist
|
|
return err
|
|
}
|
|
|
|
func UpdatePlaylist(query *m.UpdatePlaylistQuery) error {
|
|
var err error
|
|
x.Logger.SetLevel(5)
|
|
playlist := m.Playlist{
|
|
Id: query.Id,
|
|
Title: query.Title,
|
|
Timespan: query.Timespan,
|
|
}
|
|
|
|
existingPlaylist := x.Where("id = ?", query.Id).Find(m.Playlist{})
|
|
|
|
if existingPlaylist == nil {
|
|
return m.ErrPlaylistNotFound
|
|
}
|
|
|
|
query.Result = &m.PlaylistDTO{
|
|
Id: playlist.Id,
|
|
OrgId: playlist.OrgId,
|
|
Title: playlist.Title,
|
|
Timespan: playlist.Timespan,
|
|
}
|
|
|
|
_, err = x.Id(query.Id).Cols("id", "title", "timespan").Update(&playlist)
|
|
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
rawSql := "DELETE FROM playlist_item WHERE playlist_id = ?"
|
|
_, err = x.Exec(rawSql, query.Id)
|
|
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
playlistItems := make([]m.PlaylistItem, 0)
|
|
for _, item := range query.Items {
|
|
playlistItems = append(playlistItems, m.PlaylistItem{
|
|
PlaylistId: playlist.Id,
|
|
Type: item.Type,
|
|
Value: item.Value,
|
|
Order: item.Order,
|
|
Title: item.Title,
|
|
})
|
|
}
|
|
|
|
_, err = x.Insert(&playlistItems)
|
|
|
|
return err
|
|
}
|
|
|
|
func GetPlaylist(query *m.GetPlaylistByIdQuery) error {
|
|
if query.Id == 0 {
|
|
return m.ErrCommandValidationFailed
|
|
}
|
|
|
|
playlist := m.Playlist{}
|
|
_, err := x.Id(query.Id).Get(&playlist)
|
|
|
|
query.Result = &playlist
|
|
|
|
return err
|
|
}
|
|
|
|
func DeletePlaylist(query *m.DeletePlaylistQuery) error {
|
|
if query.Id == 0 {
|
|
return m.ErrCommandValidationFailed
|
|
}
|
|
|
|
return inTransaction(func(sess *xorm.Session) error {
|
|
var rawPlaylistSql = "DELETE FROM playlist WHERE id = ?"
|
|
_, err := sess.Exec(rawPlaylistSql, query.Id)
|
|
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
var rawItemSql = "DELETE FROM playlist_item WHERE playlist_id = ?"
|
|
_, err2 := sess.Exec(rawItemSql, query.Id)
|
|
|
|
return err2
|
|
})
|
|
}
|
|
|
|
func SearchPlaylists(query *m.PlaylistQuery) error {
|
|
var playlists = make(m.Playlists, 0)
|
|
|
|
sess := x.Limit(query.Limit)
|
|
|
|
if query.Title != "" {
|
|
sess.Where("title LIKE ?", query.Title)
|
|
}
|
|
|
|
sess.Where("org_id = ?", query.OrgId)
|
|
err := sess.Find(&playlists)
|
|
query.Result = playlists
|
|
|
|
return err
|
|
}
|
|
|
|
func GetPlaylistItem(query *m.GetPlaylistItemsByIdQuery) error {
|
|
if query.PlaylistId == 0 {
|
|
return m.ErrCommandValidationFailed
|
|
}
|
|
|
|
var playlistItems = make([]m.PlaylistItem, 0)
|
|
err := x.Where("playlist_id=?", query.PlaylistId).Find(&playlistItems)
|
|
|
|
query.Result = &playlistItems
|
|
|
|
return err
|
|
}
|
|
|
|
func GetPlaylistDashboards(query *m.GetPlaylistDashboardsQuery) error {
|
|
if len(query.DashboardIds) == 0 {
|
|
return m.ErrCommandValidationFailed
|
|
}
|
|
|
|
var dashboards = make(m.PlaylistDashboards, 0)
|
|
|
|
err := x.In("id", query.DashboardIds).Find(&dashboards)
|
|
query.Result = &dashboards
|
|
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
return nil
|
|
}
|