dashboards.go 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  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. )
  13. type Dashboard struct {
  14. Id int64
  15. Slug string
  16. AccountId int64
  17. Version int
  18. Created time.Time
  19. Updated time.Time
  20. Title string
  21. Data map[string]interface{}
  22. }
  23. func NewDashboard(title string) *Dashboard {
  24. dash := &Dashboard{}
  25. dash.Data = make(map[string]interface{})
  26. dash.Data["title"] = title
  27. dash.Title = title
  28. dash.UpdateSlug()
  29. return dash
  30. }
  31. func (dash *Dashboard) GetTags() []string {
  32. jsonTags := dash.Data["tags"]
  33. if jsonTags == nil {
  34. return []string{}
  35. }
  36. arr := jsonTags.([]interface{})
  37. b := make([]string, len(arr))
  38. for i := range arr {
  39. b[i] = arr[i].(string)
  40. }
  41. return b
  42. }
  43. func (cmd *SaveDashboardCommand) GetDashboardModel() *Dashboard {
  44. dash := &Dashboard{}
  45. dash.Data = cmd.Dashboard
  46. dash.Title = dash.Data["title"].(string)
  47. dash.AccountId = cmd.AccountId
  48. dash.UpdateSlug()
  49. if dash.Data["id"] != nil {
  50. dash.Id = int64(dash.Data["id"].(float64))
  51. }
  52. return dash
  53. }
  54. func (dash *Dashboard) GetString(prop string) string {
  55. return dash.Data[prop].(string)
  56. }
  57. func (dash *Dashboard) UpdateSlug() {
  58. title := strings.ToLower(dash.Data["title"].(string))
  59. re := regexp.MustCompile("[^\\w ]+")
  60. re2 := regexp.MustCompile("\\s")
  61. dash.Slug = re2.ReplaceAllString(re.ReplaceAllString(title, ""), "-")
  62. }
  63. //
  64. // COMMANDS
  65. //
  66. type SaveDashboardCommand struct {
  67. Dashboard map[string]interface{} `json:"dashboard"`
  68. AccountId int64 `json:"-"`
  69. Result *Dashboard
  70. }
  71. type DeleteDashboardCommand struct {
  72. Slug string
  73. AccountId int64
  74. }
  75. //
  76. // QUERIES
  77. //
  78. type GetDashboardQuery struct {
  79. Slug string
  80. AccountId int64
  81. Result *Dashboard
  82. }