playlist.go 3.5 KB

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