Kaynağa Gözat

Refactoring get account by id and by login to queries

Torkel Ödegaard 11 yıl önce
ebeveyn
işleme
22bf20a135

+ 1 - 1
grafana

@@ -1 +1 @@
-Subproject commit ad91093902bdfc0d2a87bb362a76a9057aef4361
+Subproject commit dede578c7d569f87c35724f74a72216743bf9508

+ 4 - 1
pkg/api/api_account.go

@@ -27,12 +27,15 @@ func AddCollaborator(c *middleware.Context) {
 		return
 	}
 
-	accountToAdd, err := m.GetAccountByLogin(cmd.Email)
+	userQuery := m.GetAccountByLoginQuery{Login: cmd.Email}
+	err := bus.Dispatch(&userQuery)
 	if err != nil {
 		c.JsonApiErr(404, "Collaborator not found", nil)
 		return
 	}
 
+	accountToAdd := userQuery.Result
+
 	if accountToAdd.Id == c.UserAccount.Id {
 		c.JsonApiErr(400, "Cannot add yourself as collaborator", nil)
 		return

+ 10 - 5
pkg/api/api_login.go

@@ -2,9 +2,10 @@ package api
 
 import (
 	"github.com/torkelo/grafana-pro/pkg/api/dtos"
+	"github.com/torkelo/grafana-pro/pkg/bus"
 	"github.com/torkelo/grafana-pro/pkg/log"
 	"github.com/torkelo/grafana-pro/pkg/middleware"
-	"github.com/torkelo/grafana-pro/pkg/models"
+	m "github.com/torkelo/grafana-pro/pkg/models"
 	"github.com/torkelo/grafana-pro/pkg/utils"
 )
 
@@ -22,14 +23,18 @@ func LoginPost(c *middleware.Context) {
 		return
 	}
 
-	account, err := models.GetAccountByLogin(loginModel.Email)
+	userQuery := m.GetAccountByLoginQuery{Login: loginModel.Email}
+	err := bus.Dispatch(&userQuery)
+
 	if err != nil {
-		c.JSON(401, utils.DynMap{"status": "unauthorized"})
+		c.JsonApiErr(401, "Invalid username or password", err)
 		return
 	}
 
+	account := userQuery.Result
+
 	if loginModel.Password != account.Password {
-		c.JSON(401, utils.DynMap{"status": "unauthorized"})
+		c.JsonApiErr(401, "Invalid username or password", err)
 		return
 	}
 
@@ -42,7 +47,7 @@ func LoginPost(c *middleware.Context) {
 	c.JSON(200, resp)
 }
 
-func loginUserWithAccount(account *models.Account, c *middleware.Context) {
+func loginUserWithAccount(account *m.Account, c *middleware.Context) {
 	if account == nil {
 		log.Error(3, "Account login with nil account")
 	}

+ 4 - 3
pkg/api/api_login_oauth.go

@@ -49,7 +49,8 @@ func OAuthLogin(ctx *middleware.Context) {
 
 	log.Info("login.OAuthLogin(social login): %s", userInfo)
 
-	account, err := m.GetAccountByLogin(userInfo.Email)
+	userQuery := m.GetAccountByLoginQuery{Login: userInfo.Email}
+	err = bus.Dispatch(&userQuery)
 
 	// create account if missing
 	if err == m.ErrAccountNotFound {
@@ -65,13 +66,13 @@ func OAuthLogin(ctx *middleware.Context) {
 			return
 		}
 
-		account = &cmd.Result
+		userQuery.Result = &cmd.Result
 	} else if err != nil {
 		ctx.Handle(500, "Unexpected error", err)
 	}
 
 	// login
-	loginUserWithAccount(account, ctx)
+	loginUserWithAccount(userQuery.Result, ctx)
 
 	ctx.Redirect("/")
 }

+ 8 - 5
pkg/middleware/auth.go

@@ -7,7 +7,8 @@ import (
 	"github.com/Unknwon/macaron"
 	"github.com/macaron-contrib/session"
 
-	"github.com/torkelo/grafana-pro/pkg/models"
+	"github.com/torkelo/grafana-pro/pkg/bus"
+	m "github.com/torkelo/grafana-pro/pkg/models"
 )
 
 func authGetRequestAccountId(c *Context, sess session.Store) (int64, error) {
@@ -40,19 +41,21 @@ func Auth() macaron.Handler {
 			return
 		}
 
-		account, err := models.GetAccount(accountId)
+		userQuery := m.GetAccountByIdQuery{Id: accountId}
+		err = bus.Dispatch(&userQuery)
 		if err != nil {
 			authDenied(c)
 			return
 		}
 
-		usingAccount, err := models.GetAccount(account.UsingAccountId)
+		usingQuery := m.GetAccountByIdQuery{Id: userQuery.Result.UsingAccountId}
+		err = bus.Dispatch(&usingQuery)
 		if err != nil {
 			authDenied(c)
 			return
 		}
 
-		c.UserAccount = account
-		c.Account = usingAccount
+		c.UserAccount = userQuery.Result
+		c.Account = usingQuery.Result
 	}
 }

+ 10 - 5
pkg/models/account.go

@@ -5,11 +5,6 @@ import (
 	"time"
 )
 
-var (
-	GetAccountByLogin func(emailOrName string) (*Account, error)
-	GetAccount        func(accountId int64) (*Account, error)
-)
-
 // Typed errors
 var (
 	ErrAccountNotFound = errors.New("Account not found")
@@ -80,3 +75,13 @@ type GetOtherAccountsQuery struct {
 	AccountId int64
 	Result    []*OtherAccountDTO
 }
+
+type GetAccountByIdQuery struct {
+	Id     int64
+	Result *Account
+}
+
+type GetAccountByLoginQuery struct {
+	Login  string
+	Result *Account
+}

+ 21 - 11
pkg/stores/sqlstore/accounts.go

@@ -15,6 +15,8 @@ func init() {
 	bus.AddHandler("sql", GetOtherAccounts)
 	bus.AddHandler("sql", CreateAccount)
 	bus.AddHandler("sql", SetUsingAccount)
+	bus.AddHandler("sql", GetAccountById)
+	bus.AddHandler("sql", GetAccountByLogin)
 }
 
 func CreateAccount(cmd *m.CreateAccountCommand) error {
@@ -85,38 +87,46 @@ func AddCollaborator(cmd *m.AddCollaboratorCommand) error {
 	})
 }
 
-func GetAccount(id int64) (*m.Account, error) {
+func GetAccountById(query *m.GetAccountByIdQuery) error {
 	var err error
 
 	var account m.Account
-	has, err := x.Id(id).Get(&account)
+	has, err := x.Id(query.Id).Get(&account)
 
 	if err != nil {
-		return nil, err
+		return err
 	} else if has == false {
-		return nil, m.ErrAccountNotFound
+		return m.ErrAccountNotFound
 	}
 
 	if account.UsingAccountId == 0 {
 		account.UsingAccountId = account.Id
 	}
 
-	return &account, nil
+	query.Result = &account
+
+	return nil
 }
 
-func GetAccountByLogin(emailOrLogin string) (*m.Account, error) {
+func GetAccountByLogin(query *m.GetAccountByLoginQuery) error {
 	var err error
 
-	account := &m.Account{Login: emailOrLogin}
-	has, err := x.Get(account)
+	account := m.Account{Login: query.Login}
+	has, err := x.Get(&account)
 
 	if err != nil {
-		return nil, err
+		return err
 	} else if has == false {
-		return nil, m.ErrAccountNotFound
+		return m.ErrAccountNotFound
 	}
 
-	return account, nil
+	if account.UsingAccountId == 0 {
+		account.UsingAccountId = account.Id
+	}
+
+	query.Result = &account
+
+	return nil
 }
 
 func GetOtherAccounts(query *m.GetOtherAccountsQuery) error {

+ 0 - 2
pkg/stores/sqlstore/sqlstore.go

@@ -35,8 +35,6 @@ func init() {
 }
 
 func Init() {
-	m.GetAccount = GetAccount
-	m.GetAccountByLogin = GetAccountByLogin
 	m.GetDashboard = GetDashboard
 	m.SaveDashboard = SaveDashboard
 	m.SearchQuery = SearchQuery