playlist.go 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164
  1. package api
  2. import (
  3. "github.com/grafana/grafana/pkg/bus"
  4. _ "github.com/grafana/grafana/pkg/log"
  5. "github.com/grafana/grafana/pkg/middleware"
  6. m "github.com/grafana/grafana/pkg/models"
  7. )
  8. func ValidateOrgPlaylist(c *middleware.Context) {
  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. }
  25. func SearchPlaylists(c *middleware.Context) Response {
  26. query := c.Query("query")
  27. limit := c.QueryInt("limit")
  28. if limit == 0 {
  29. limit = 1000
  30. }
  31. searchQuery := m.GetPlaylistsQuery{
  32. Name: query,
  33. Limit: limit,
  34. OrgId: c.OrgId,
  35. }
  36. err := bus.Dispatch(&searchQuery)
  37. if err != nil {
  38. return ApiError(500, "Search failed", err)
  39. }
  40. return Json(200, searchQuery.Result)
  41. }
  42. func GetPlaylist(c *middleware.Context) Response {
  43. id := c.ParamsInt64(":id")
  44. cmd := m.GetPlaylistByIdQuery{Id: id}
  45. if err := bus.Dispatch(&cmd); err != nil {
  46. return ApiError(500, "Playlist not found", err)
  47. }
  48. playlistDTOs, _ := LoadPlaylistItemDTOs(id)
  49. dto := &m.PlaylistDTO{
  50. Id: cmd.Result.Id,
  51. Name: cmd.Result.Name,
  52. Interval: cmd.Result.Interval,
  53. OrgId: cmd.Result.OrgId,
  54. Items: playlistDTOs,
  55. }
  56. return Json(200, dto)
  57. }
  58. func LoadPlaylistItemDTOs(id int64) ([]m.PlaylistItemDTO, error) {
  59. playlistitems, err := LoadPlaylistItems(id)
  60. if err != nil {
  61. return nil, err
  62. }
  63. playlistDTOs := make([]m.PlaylistItemDTO, 0)
  64. for _, item := range playlistitems {
  65. playlistDTOs = append(playlistDTOs, m.PlaylistItemDTO{
  66. Id: item.Id,
  67. PlaylistId: item.PlaylistId,
  68. Type: item.Type,
  69. Value: item.Value,
  70. Order: item.Order,
  71. Title: item.Title,
  72. })
  73. }
  74. return playlistDTOs, nil
  75. }
  76. func LoadPlaylistItems(id int64) ([]m.PlaylistItem, error) {
  77. itemQuery := m.GetPlaylistItemsByIdQuery{PlaylistId: id}
  78. if err := bus.Dispatch(&itemQuery); err != nil {
  79. return nil, err
  80. }
  81. return *itemQuery.Result, nil
  82. }
  83. func GetPlaylistItems(c *middleware.Context) Response {
  84. id := c.ParamsInt64(":id")
  85. playlistDTOs, err := LoadPlaylistItemDTOs(id)
  86. if err != nil {
  87. return ApiError(500, "Could not load playlist items", err)
  88. }
  89. return Json(200, playlistDTOs)
  90. }
  91. func GetPlaylistDashboards(c *middleware.Context) Response {
  92. playlistId := c.ParamsInt64(":id")
  93. playlists, err := LoadPlaylistDashboards(c.OrgId, c.UserId, playlistId)
  94. if err != nil {
  95. return ApiError(500, "Could not load dashboards", err)
  96. }
  97. return Json(200, playlists)
  98. }
  99. func DeletePlaylist(c *middleware.Context) Response {
  100. id := c.ParamsInt64(":id")
  101. cmd := m.DeletePlaylistCommand{Id: id, OrgId: c.OrgId}
  102. if err := bus.Dispatch(&cmd); err != nil {
  103. return ApiError(500, "Failed to delete playlist", err)
  104. }
  105. return Json(200, "")
  106. }
  107. func CreatePlaylist(c *middleware.Context, cmd m.CreatePlaylistCommand) Response {
  108. cmd.OrgId = c.OrgId
  109. if err := bus.Dispatch(&cmd); err != nil {
  110. return ApiError(500, "Failed to create playlist", err)
  111. }
  112. return Json(200, cmd.Result)
  113. }
  114. func UpdatePlaylist(c *middleware.Context, cmd m.UpdatePlaylistCommand) Response {
  115. cmd.OrgId = c.OrgId
  116. if err := bus.Dispatch(&cmd); err != nil {
  117. return ApiError(500, "Failed to save playlist", err)
  118. }
  119. playlistDTOs, err := LoadPlaylistItemDTOs(cmd.Id)
  120. if err != nil {
  121. return ApiError(500, "Failed to save playlist", err)
  122. }
  123. cmd.Result.Items = playlistDTOs
  124. return Json(200, cmd.Result)
  125. }