dashboards.go 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  1. package models
  2. import (
  3. "errors"
  4. "regexp"
  5. "strings"
  6. "time"
  7. )
  8. // Typed errors
  9. var (
  10. ErrDashboardNotFound = errors.New("Account not found")
  11. ErrDashboardWithSameNameExists = errors.New("A dashboard with the same name already exists")
  12. ErrDashboardVersionMismatch = errors.New("The dashboard has been changed by someone else")
  13. )
  14. type Dashboard struct {
  15. Id int64
  16. Slug string
  17. OrgId int64
  18. Version int
  19. Created time.Time
  20. Updated time.Time
  21. Title string
  22. Data map[string]interface{}
  23. }
  24. func NewDashboard(title string) *Dashboard {
  25. dash := &Dashboard{}
  26. dash.Data = make(map[string]interface{})
  27. dash.Data["title"] = title
  28. dash.Title = title
  29. dash.UpdateSlug()
  30. return dash
  31. }
  32. func (dash *Dashboard) GetTags() []string {
  33. jsonTags := dash.Data["tags"]
  34. if jsonTags == nil {
  35. return []string{}
  36. }
  37. arr := jsonTags.([]interface{})
  38. b := make([]string, len(arr))
  39. for i := range arr {
  40. b[i] = arr[i].(string)
  41. }
  42. return b
  43. }
  44. func (cmd *SaveDashboardCommand) GetDashboardModel() *Dashboard {
  45. dash := &Dashboard{}
  46. dash.Data = cmd.Dashboard
  47. dash.Title = dash.Data["title"].(string)
  48. dash.OrgId = cmd.OrgId
  49. dash.UpdateSlug()
  50. if dash.Data["id"] != nil {
  51. dash.Id = int64(dash.Data["id"].(float64))
  52. if dash.Data["version"] != nil {
  53. dash.Version = int(dash.Data["version"].(float64))
  54. }
  55. }
  56. return dash
  57. }
  58. func (dash *Dashboard) GetString(prop string) string {
  59. return dash.Data[prop].(string)
  60. }
  61. func (dash *Dashboard) UpdateSlug() {
  62. title := strings.ToLower(dash.Data["title"].(string))
  63. re := regexp.MustCompile("[^\\w ]+")
  64. re2 := regexp.MustCompile("\\s")
  65. dash.Slug = re2.ReplaceAllString(re.ReplaceAllString(title, ""), "-")
  66. }
  67. //
  68. // COMMANDS
  69. //
  70. type SaveDashboardCommand struct {
  71. Dashboard map[string]interface{} `json:"dashboard" binding:"Required"`
  72. Overwrite bool `json:"overwrite"`
  73. OrgId int64 `json:"-"`
  74. Result *Dashboard
  75. }
  76. type DeleteDashboardCommand struct {
  77. Slug string
  78. OrgId int64
  79. }
  80. //
  81. // QUERIES
  82. //
  83. type GetDashboardQuery struct {
  84. Slug string
  85. OrgId int64
  86. Result *Dashboard
  87. }