account.go 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136
  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", GetAccountById)
  11. bus.AddHandler("sql", CreateAccount)
  12. bus.AddHandler("sql", SetUsingAccount)
  13. bus.AddHandler("sql", UpdateAccount)
  14. bus.AddHandler("sql", GetAccountByName)
  15. bus.AddHandler("sql", GetAccountsQuery)
  16. bus.AddHandler("sql", DeleteAccount)
  17. }
  18. func GetAccountsQuery(query *m.GetAccountsQuery) error {
  19. return x.Find(&query.Result)
  20. }
  21. func GetAccountById(query *m.GetAccountByIdQuery) error {
  22. var account m.Account
  23. exists, err := x.Id(query.Id).Get(&account)
  24. if err != nil {
  25. return err
  26. }
  27. if !exists {
  28. return m.ErrAccountNotFound
  29. }
  30. query.Result = &account
  31. return nil
  32. }
  33. func GetAccountByName(query *m.GetAccountByNameQuery) error {
  34. var account m.Account
  35. exists, err := x.Where("name=?", query.Name).Get(&account)
  36. if err != nil {
  37. return err
  38. }
  39. if !exists {
  40. return m.ErrAccountNotFound
  41. }
  42. query.Result = &account
  43. return nil
  44. }
  45. func CreateAccount(cmd *m.CreateAccountCommand) error {
  46. return inTransaction2(func(sess *session) error {
  47. account := m.Account{
  48. Name: cmd.Name,
  49. Created: time.Now(),
  50. Updated: time.Now(),
  51. }
  52. if _, err := sess.Insert(&account); err != nil {
  53. return err
  54. }
  55. user := m.AccountUser{
  56. AccountId: account.Id,
  57. UserId: cmd.UserId,
  58. Role: m.ROLE_ADMIN,
  59. Created: time.Now(),
  60. Updated: time.Now(),
  61. }
  62. _, err := sess.Insert(&user)
  63. cmd.Result = account
  64. sess.publishAfterCommit(&events.AccountCreated{
  65. Timestamp: account.Created,
  66. Id: account.Id,
  67. Name: account.Name,
  68. })
  69. return err
  70. })
  71. }
  72. func UpdateAccount(cmd *m.UpdateAccountCommand) error {
  73. return inTransaction2(func(sess *session) error {
  74. account := m.Account{
  75. Name: cmd.Name,
  76. Updated: time.Now(),
  77. }
  78. if _, err := sess.Id(cmd.AccountId).Update(&account); err != nil {
  79. return err
  80. }
  81. sess.publishAfterCommit(&events.AccountUpdated{
  82. Timestamp: account.Updated,
  83. Id: account.Id,
  84. Name: account.Name,
  85. })
  86. return nil
  87. })
  88. }
  89. func DeleteAccount(cmd *m.DeleteAccountCommand) error {
  90. return inTransaction2(func(sess *session) error {
  91. deletes := []string{
  92. "DELETE FROM star WHERE EXISTS (SELECT 1 FROM dashboard WHERE account_id = ?)",
  93. "DELETE FROM dashboard_tag WHERE EXISTS (SELECT 1 FROM dashboard WHERE account_id = ?)",
  94. "DELETE FROM dashboard WHERE account_id = ?",
  95. "DELETE FROM api_key WHERE account_id = ?",
  96. "DELETE FROM data_source WHERE account_id = ?",
  97. "DELETE FROM account_user WHERE account_id = ?",
  98. "DELETE FROM user WHERE account_id = ?",
  99. "DELETE FROM account WHERE id = ?",
  100. }
  101. for _, sql := range deletes {
  102. log.Trace(sql)
  103. _, err := sess.Exec(sql, cmd.Id)
  104. if err != nil {
  105. return err
  106. }
  107. }
  108. return nil
  109. })
  110. }