playlist.go 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178
  1. package api
  2. import (
  3. "net/http"
  4. "github.com/grafana/grafana/pkg/bus"
  5. _ "github.com/grafana/grafana/pkg/infra/log"
  6. m "github.com/grafana/grafana/pkg/models"
  7. )
  8. func ValidateOrgPlaylist(c *m.ReqContext) {
  9. id := c.ParamsInt64(":id")
  10. query := m.GetPlaylistByIdQuery{Id: id}
  11. err := bus.Dispatch(&query)
  12. if err != nil {
  13. c.JsonApiErr(404, "Playlist not found", err)
  14. return
  15. }
  16. if query.Result.OrgId == 0 {
  17. c.JsonApiErr(404, "Playlist not found", err)
  18. return
  19. }
  20. if query.Result.OrgId != c.OrgId {
  21. c.JsonApiErr(403, "You are not allowed to edit/view playlist", nil)
  22. return
  23. }
  24. items, itemsErr := LoadPlaylistItemDTOs(id)
  25. if itemsErr != nil {
  26. c.JsonApiErr(404, "Playlist items not found", err)
  27. return
  28. }
  29. if len(items) == 0 && c.Context.Req.Method != http.MethodDelete {
  30. c.JsonApiErr(404, "Playlist is empty", itemsErr)
  31. return
  32. }
  33. }
  34. func SearchPlaylists(c *m.ReqContext) Response {
  35. query := c.Query("query")
  36. limit := c.QueryInt("limit")
  37. if limit == 0 {
  38. limit = 1000
  39. }
  40. searchQuery := m.GetPlaylistsQuery{
  41. Name: query,
  42. Limit: limit,
  43. OrgId: c.OrgId,
  44. }
  45. err := bus.Dispatch(&searchQuery)
  46. if err != nil {
  47. return Error(500, "Search failed", err)
  48. }
  49. return JSON(200, searchQuery.Result)
  50. }
  51. func GetPlaylist(c *m.ReqContext) Response {
  52. id := c.ParamsInt64(":id")
  53. cmd := m.GetPlaylistByIdQuery{Id: id}
  54. if err := bus.Dispatch(&cmd); err != nil {
  55. return Error(500, "Playlist not found", err)
  56. }
  57. playlistDTOs, _ := LoadPlaylistItemDTOs(id)
  58. dto := &m.PlaylistDTO{
  59. Id: cmd.Result.Id,
  60. Name: cmd.Result.Name,
  61. Interval: cmd.Result.Interval,
  62. OrgId: cmd.Result.OrgId,
  63. Items: playlistDTOs,
  64. }
  65. return JSON(200, dto)
  66. }
  67. func LoadPlaylistItemDTOs(id int64) ([]m.PlaylistItemDTO, error) {
  68. playlistitems, err := LoadPlaylistItems(id)
  69. if err != nil {
  70. return nil, err
  71. }
  72. playlistDTOs := make([]m.PlaylistItemDTO, 0)
  73. for _, item := range playlistitems {
  74. playlistDTOs = append(playlistDTOs, m.PlaylistItemDTO{
  75. Id: item.Id,
  76. PlaylistId: item.PlaylistId,
  77. Type: item.Type,
  78. Value: item.Value,
  79. Order: item.Order,
  80. Title: item.Title,
  81. })
  82. }
  83. return playlistDTOs, nil
  84. }
  85. func LoadPlaylistItems(id int64) ([]m.PlaylistItem, error) {
  86. itemQuery := m.GetPlaylistItemsByIdQuery{PlaylistId: id}
  87. if err := bus.Dispatch(&itemQuery); err != nil {
  88. return nil, err
  89. }
  90. return *itemQuery.Result, nil
  91. }
  92. func GetPlaylistItems(c *m.ReqContext) Response {
  93. id := c.ParamsInt64(":id")
  94. playlistDTOs, err := LoadPlaylistItemDTOs(id)
  95. if err != nil {
  96. return Error(500, "Could not load playlist items", err)
  97. }
  98. return JSON(200, playlistDTOs)
  99. }
  100. func GetPlaylistDashboards(c *m.ReqContext) Response {
  101. playlistID := c.ParamsInt64(":id")
  102. playlists, err := LoadPlaylistDashboards(c.OrgId, c.SignedInUser, playlistID)
  103. if err != nil {
  104. return Error(500, "Could not load dashboards", err)
  105. }
  106. return JSON(200, playlists)
  107. }
  108. func DeletePlaylist(c *m.ReqContext) Response {
  109. id := c.ParamsInt64(":id")
  110. cmd := m.DeletePlaylistCommand{Id: id, OrgId: c.OrgId}
  111. if err := bus.Dispatch(&cmd); err != nil {
  112. return Error(500, "Failed to delete playlist", err)
  113. }
  114. return JSON(200, "")
  115. }
  116. func CreatePlaylist(c *m.ReqContext, cmd m.CreatePlaylistCommand) Response {
  117. cmd.OrgId = c.OrgId
  118. if err := bus.Dispatch(&cmd); err != nil {
  119. return Error(500, "Failed to create playlist", err)
  120. }
  121. return JSON(200, cmd.Result)
  122. }
  123. func UpdatePlaylist(c *m.ReqContext, cmd m.UpdatePlaylistCommand) Response {
  124. cmd.OrgId = c.OrgId
  125. cmd.Id = c.ParamsInt64(":id")
  126. if err := bus.Dispatch(&cmd); err != nil {
  127. return Error(500, "Failed to save playlist", err)
  128. }
  129. playlistDTOs, err := LoadPlaylistItemDTOs(cmd.Id)
  130. if err != nil {
  131. return Error(500, "Failed to save playlist", err)
  132. }
  133. cmd.Result.Items = playlistDTOs
  134. return JSON(200, cmd.Result)
  135. }