dashboards.go 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. package models
  2. import (
  3. "encoding/json"
  4. "errors"
  5. "io"
  6. "regexp"
  7. "strings"
  8. "time"
  9. )
  10. var (
  11. GetDashboard func(slug string, accountId int64) (*Dashboard, error)
  12. SaveDashboard func(dash *Dashboard) error
  13. DeleteDashboard func(slug string, accountId int64) error
  14. SearchQuery func(query string, acccountId int64) ([]*SearchResult, error)
  15. )
  16. // Typed errors
  17. var (
  18. ErrDashboardNotFound = errors.New("Account not found")
  19. )
  20. type Dashboard struct {
  21. Id int64
  22. Slug string `xorm:"index(IX_AccountIdSlug)"`
  23. AccountId int64 `xorm:"index(IX_AccountIdSlug)"`
  24. Created time.Time `xorm:"CREATED"`
  25. Updated time.Time `xorm:"UPDATED"`
  26. Title string
  27. Tags []string
  28. Data map[string]interface{}
  29. }
  30. type SearchResult struct {
  31. Id string `json:"id"`
  32. Title string `json:"title"`
  33. Slug string `json:"slug"`
  34. }
  35. func NewDashboard(title string) *Dashboard {
  36. dash := &Dashboard{}
  37. dash.Id = 0
  38. dash.Data = make(map[string]interface{})
  39. dash.Data["title"] = title
  40. dash.Title = title
  41. dash.UpdateSlug()
  42. return dash
  43. }
  44. func NewFromJson(reader io.Reader) (*Dashboard, error) {
  45. dash := NewDashboard("temp")
  46. jsonParser := json.NewDecoder(reader)
  47. if err := jsonParser.Decode(&dash.Data); err != nil {
  48. return nil, err
  49. }
  50. return dash, nil
  51. }
  52. func (dash *Dashboard) GetString(prop string) string {
  53. return dash.Data[prop].(string)
  54. }
  55. func (dash *Dashboard) UpdateSlug() {
  56. title := strings.ToLower(dash.Data["title"].(string))
  57. re := regexp.MustCompile("[^\\w ]+")
  58. re2 := regexp.MustCompile("\\s")
  59. dash.Slug = re2.ReplaceAllString(re.ReplaceAllString(title, ""), "-")
  60. }