playlist.go 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181
  1. package sqlstore
  2. import (
  3. "fmt"
  4. "github.com/go-xorm/xorm"
  5. "github.com/grafana/grafana/pkg/bus"
  6. m "github.com/grafana/grafana/pkg/models"
  7. )
  8. func init() {
  9. bus.AddHandler("sql", CreatePlaylist)
  10. bus.AddHandler("sql", UpdatePlaylist)
  11. bus.AddHandler("sql", DeletePlaylist)
  12. bus.AddHandler("sql", SearchPlaylists)
  13. bus.AddHandler("sql", GetPlaylist)
  14. bus.AddHandler("sql", GetPlaylistDashboards)
  15. bus.AddHandler("sql", GetPlaylistItem)
  16. }
  17. func CreatePlaylist(cmd *m.CreatePlaylistCommand) error {
  18. var err error
  19. playlist := m.Playlist{
  20. Name: cmd.Name,
  21. Interval: cmd.Interval,
  22. OrgId: cmd.OrgId,
  23. }
  24. _, err = x.Insert(&playlist)
  25. fmt.Printf("%v", playlist.Id)
  26. playlistItems := make([]m.PlaylistItem, 0)
  27. for _, item := range cmd.Items {
  28. playlistItems = append(playlistItems, m.PlaylistItem{
  29. PlaylistId: playlist.Id,
  30. Type: item.Type,
  31. Value: item.Value,
  32. Order: item.Order,
  33. Title: item.Title,
  34. })
  35. }
  36. _, err = x.Insert(&playlistItems)
  37. cmd.Result = &playlist
  38. return err
  39. }
  40. func UpdatePlaylist(cmd *m.UpdatePlaylistCommand) error {
  41. var err error
  42. playlist := m.Playlist{
  43. Id: cmd.Id,
  44. OrgId: cmd.OrgId,
  45. Name: cmd.Name,
  46. Interval: cmd.Interval,
  47. }
  48. existingPlaylist := x.Where("id = ? AND org_id = ?", cmd.Id, cmd.OrgId).Find(m.Playlist{})
  49. if existingPlaylist == nil {
  50. return m.ErrPlaylistNotFound
  51. }
  52. cmd.Result = &m.PlaylistDTO{
  53. Id: playlist.Id,
  54. OrgId: playlist.OrgId,
  55. Name: playlist.Name,
  56. Interval: playlist.Interval,
  57. }
  58. _, err = x.Id(cmd.Id).Cols("id", "name", "interval").Update(&playlist)
  59. if err != nil {
  60. return err
  61. }
  62. rawSql := "DELETE FROM playlist_item WHERE playlist_id = ?"
  63. _, err = x.Exec(rawSql, cmd.Id)
  64. if err != nil {
  65. return err
  66. }
  67. playlistItems := make([]m.PlaylistItem, 0)
  68. for _, item := range cmd.Items {
  69. playlistItems = append(playlistItems, m.PlaylistItem{
  70. PlaylistId: playlist.Id,
  71. Type: item.Type,
  72. Value: item.Value,
  73. Order: item.Order,
  74. Title: item.Title,
  75. })
  76. }
  77. _, err = x.Insert(&playlistItems)
  78. return err
  79. }
  80. func GetPlaylist(query *m.GetPlaylistByIdQuery) error {
  81. if query.Id == 0 {
  82. return m.ErrCommandValidationFailed
  83. }
  84. playlist := m.Playlist{}
  85. _, err := x.Id(query.Id).Get(&playlist)
  86. query.Result = &playlist
  87. return err
  88. }
  89. func DeletePlaylist(cmd *m.DeletePlaylistCommand) error {
  90. if cmd.Id == 0 {
  91. return m.ErrCommandValidationFailed
  92. }
  93. return inTransaction(func(sess *xorm.Session) error {
  94. var rawPlaylistSql = "DELETE FROM playlist WHERE id = ? and org_id = ?"
  95. _, err := sess.Exec(rawPlaylistSql, cmd.Id, cmd.OrgId)
  96. if err != nil {
  97. return err
  98. }
  99. var rawItemSql = "DELETE FROM playlist_item WHERE playlist_id = ?"
  100. _, err2 := sess.Exec(rawItemSql, cmd.Id)
  101. return err2
  102. })
  103. }
  104. func SearchPlaylists(query *m.GetPlaylistsQuery) error {
  105. var playlists = make(m.Playlists, 0)
  106. sess := x.Limit(query.Limit)
  107. if query.Name != "" {
  108. sess.Where("name LIKE ?", query.Name)
  109. }
  110. sess.Where("org_id = ?", query.OrgId)
  111. err := sess.Find(&playlists)
  112. query.Result = playlists
  113. return err
  114. }
  115. func GetPlaylistItem(query *m.GetPlaylistItemsByIdQuery) error {
  116. if query.PlaylistId == 0 {
  117. return m.ErrCommandValidationFailed
  118. }
  119. var playlistItems = make([]m.PlaylistItem, 0)
  120. err := x.Where("playlist_id=?", query.PlaylistId).Find(&playlistItems)
  121. query.Result = &playlistItems
  122. return err
  123. }
  124. func GetPlaylistDashboards(query *m.GetPlaylistDashboardsQuery) error {
  125. if len(query.DashboardIds) == 0 {
  126. return m.ErrCommandValidationFailed
  127. }
  128. var dashboards = make(m.PlaylistDashboards, 0)
  129. err := x.In("id", query.DashboardIds).Find(&dashboards)
  130. query.Result = &dashboards
  131. if err != nil {
  132. return err
  133. }
  134. return nil
  135. }