org.go 2.9 KB

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