org.go 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145
  1. package sqlstore
  2. import (
  3. "time"
  4. "github.com/grafana/grafana/pkg/bus"
  5. "github.com/grafana/grafana/pkg/events"
  6. "github.com/grafana/grafana/pkg/log"
  7. m "github.com/grafana/grafana/pkg/models"
  8. )
  9. func init() {
  10. bus.AddHandler("sql", GetOrgById)
  11. bus.AddHandler("sql", CreateOrg)
  12. bus.AddHandler("sql", UpdateOrg)
  13. bus.AddHandler("sql", GetOrgByName)
  14. bus.AddHandler("sql", SearchOrgs)
  15. bus.AddHandler("sql", DeleteOrg)
  16. }
  17. func SearchOrgs(query *m.SearchOrgsQuery) error {
  18. query.Result = make([]*m.OrgDTO, 0)
  19. sess := x.Table("org")
  20. if query.Query != "" {
  21. sess.Where("name LIKE ?", query.Query+"%")
  22. }
  23. if query.Name != "" {
  24. sess.Where("name=?", query.Name)
  25. }
  26. sess.Limit(query.Limit, query.Limit*query.Page)
  27. sess.Cols("id", "name")
  28. err := sess.Find(&query.Result)
  29. return err
  30. }
  31. func GetOrgById(query *m.GetOrgByIdQuery) error {
  32. var org m.Org
  33. exists, err := x.Id(query.Id).Get(&org)
  34. if err != nil {
  35. return err
  36. }
  37. if !exists {
  38. return m.ErrOrgNotFound
  39. }
  40. query.Result = &org
  41. return nil
  42. }
  43. func GetOrgByName(query *m.GetOrgByNameQuery) error {
  44. var org m.Org
  45. exists, err := x.Where("name=?", query.Name).Get(&org)
  46. if err != nil {
  47. return err
  48. }
  49. if !exists {
  50. return m.ErrOrgNotFound
  51. }
  52. query.Result = &org
  53. return nil
  54. }
  55. func CreateOrg(cmd *m.CreateOrgCommand) error {
  56. return inTransaction2(func(sess *session) error {
  57. org := m.Org{
  58. Name: cmd.Name,
  59. Created: time.Now(),
  60. Updated: time.Now(),
  61. }
  62. if _, err := sess.Insert(&org); err != nil {
  63. return err
  64. }
  65. user := m.OrgUser{
  66. OrgId: org.Id,
  67. UserId: cmd.UserId,
  68. Role: m.ROLE_ADMIN,
  69. Created: time.Now(),
  70. Updated: time.Now(),
  71. }
  72. _, err := sess.Insert(&user)
  73. cmd.Result = org
  74. sess.publishAfterCommit(&events.OrgCreated{
  75. Timestamp: org.Created,
  76. Id: org.Id,
  77. Name: org.Name,
  78. })
  79. return err
  80. })
  81. }
  82. func UpdateOrg(cmd *m.UpdateOrgCommand) error {
  83. return inTransaction2(func(sess *session) error {
  84. org := m.Org{
  85. Name: cmd.Name,
  86. Updated: time.Now(),
  87. }
  88. if _, err := sess.Id(cmd.OrgId).Update(&org); err != nil {
  89. return err
  90. }
  91. sess.publishAfterCommit(&events.OrgUpdated{
  92. Timestamp: org.Updated,
  93. Id: org.Id,
  94. Name: org.Name,
  95. })
  96. return nil
  97. })
  98. }
  99. func DeleteOrg(cmd *m.DeleteOrgCommand) error {
  100. return inTransaction2(func(sess *session) error {
  101. deletes := []string{
  102. "DELETE FROM star WHERE EXISTS (SELECT 1 FROM dashboard WHERE org_id = ?)",
  103. "DELETE FROM dashboard_tag WHERE EXISTS (SELECT 1 FROM dashboard WHERE org_id = ?)",
  104. "DELETE FROM dashboard WHERE org_id = ?",
  105. "DELETE FROM api_key WHERE org_id = ?",
  106. "DELETE FROM data_source WHERE org_id = ?",
  107. "DELETE FROM org_user WHERE org_id = ?",
  108. "DELETE FROM org WHERE id = ?",
  109. }
  110. for _, sql := range deletes {
  111. log.Trace(sql)
  112. _, err := sess.Exec(sql, cmd.Id)
  113. if err != nil {
  114. return err
  115. }
  116. }
  117. return nil
  118. })
  119. }