collaborators.go 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. package api
  2. import (
  3. "github.com/torkelo/grafana-pro/pkg/bus"
  4. "github.com/torkelo/grafana-pro/pkg/middleware"
  5. m "github.com/torkelo/grafana-pro/pkg/models"
  6. )
  7. func AddCollaborator(c *middleware.Context, cmd m.AddCollaboratorCommand) {
  8. if !cmd.Role.IsValid() {
  9. c.JsonApiErr(400, "Invalid role specified", nil)
  10. return
  11. }
  12. userQuery := m.GetAccountByLoginQuery{LoginOrEmail: cmd.LoginOrEmail}
  13. err := bus.Dispatch(&userQuery)
  14. if err != nil {
  15. c.JsonApiErr(404, "Collaborator not found", nil)
  16. return
  17. }
  18. accountToAdd := userQuery.Result
  19. if accountToAdd.Id == c.AccountId {
  20. c.JsonApiErr(400, "Cannot add yourself as collaborator", nil)
  21. return
  22. }
  23. cmd.AccountId = c.AccountId
  24. cmd.CollaboratorId = accountToAdd.Id
  25. err = bus.Dispatch(&cmd)
  26. if err != nil {
  27. c.JsonApiErr(500, "Could not add collaborator", err)
  28. return
  29. }
  30. c.JsonOK("Collaborator added")
  31. }
  32. func GetCollaborators(c *middleware.Context) {
  33. query := m.GetCollaboratorsQuery{AccountId: c.AccountId}
  34. if err := bus.Dispatch(&query); err != nil {
  35. c.JsonApiErr(500, "Failed to get collaborators", err)
  36. return
  37. }
  38. c.JSON(200, query.Result)
  39. }
  40. func RemoveCollaborator(c *middleware.Context) {
  41. collaboratorId := c.ParamsInt64(":id")
  42. cmd := m.RemoveCollaboratorCommand{AccountId: c.AccountId, CollaboratorId: collaboratorId}
  43. if err := bus.Dispatch(&cmd); err != nil {
  44. c.JsonApiErr(500, "Failed to remove collaborator", err)
  45. }
  46. c.JsonOK("Collaborator removed")
  47. }