playlist.go 3.2 KB

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