Remove UserStore.Get gorp usage (#14672)

We're removing the user of gorp in the most used queries
by our platform and this is one of them
Этот коммит содержится в:
Mario de Frutos Dieguez
2020-06-12 17:09:18 +02:00
коммит произвёл GitHub
родитель f912a93299
Коммит 033db51907
2 изменённых файлов: 72 добавлений и 50 удалений

Просмотреть файл

@@ -11,7 +11,6 @@ import (
"sort"
"strings"
"github.com/Masterminds/squirrel"
sq "github.com/Masterminds/squirrel"
"github.com/mattermost/gorp"
@@ -329,21 +328,44 @@ func (us SqlUserStore) UpdateMfaActive(userId string, active bool) *model.AppErr
}
func (us SqlUserStore) Get(id string) (*model.User, *model.AppError) {
query := us.usersQuery.Where("Id = ?", id)
failure := func(err error, id string, statusCode int) *model.AppError {
details := "user_id=" + id + ", " + err.Error()
return model.NewAppError("SqlUserStore.Get", id, nil, details, statusCode)
}
query := us.usersQuery.Where("Id = ?", id)
queryString, args, err := query.ToSql()
if err != nil {
return nil, model.NewAppError("SqlUserStore.Get", "store.sql_user.app_error", nil, err.Error(), http.StatusInternalServerError)
return nil, failure(err, "store.sql_user.get.app_error", http.StatusInternalServerError)
}
row := us.GetReplica().Db.QueryRow(queryString, args...)
var user model.User
var props, notifyProps, timezone []byte
err = row.Scan(&user.Id, &user.CreateAt, &user.UpdateAt, &user.DeleteAt, &user.Username,
&user.Password, &user.AuthData, &user.AuthService, &user.Email, &user.EmailVerified,
&user.Nickname, &user.FirstName, &user.LastName, &user.Position, &user.Roles,
&user.AllowMarketing, &props, &notifyProps, &user.LastPasswordUpdate, &user.LastPictureUpdate,
&user.FailedAttempts, &user.Locale, &timezone, &user.MfaActive, &user.MfaSecret,
&user.IsBot, &user.BotDescription, &user.BotLastIconUpdate)
if err != nil {
if err == sql.ErrNoRows {
return nil, failure(err, store.MISSING_ACCOUNT_ERROR, http.StatusNotFound)
}
return nil, failure(err, "store.sql_user.get.app_error", http.StatusInternalServerError)
}
if err = json.Unmarshal(props, &user.Props); err != nil {
return nil, failure(err, "store.sql_user.get.app_error", http.StatusInternalServerError)
}
if err = json.Unmarshal(notifyProps, &user.NotifyProps); err != nil {
return nil, failure(err, "store.sql_user.get.app_error", http.StatusInternalServerError)
}
if err = json.Unmarshal(timezone, &user.Timezone); err != nil {
return nil, failure(err, "store.sql_user.get.app_error", http.StatusInternalServerError)
}
user := &model.User{}
if err := us.GetReplica().SelectOne(user, queryString, args...); err == sql.ErrNoRows {
return nil, model.NewAppError("SqlUserStore.Get", store.MISSING_ACCOUNT_ERROR, nil, "user_id="+id, http.StatusNotFound)
} else if err != nil {
return nil, model.NewAppError("SqlUserStore.Get", "store.sql_user.get.app_error", nil, "user_id="+id+", "+err.Error(), http.StatusInternalServerError)
}
return user, nil
return &user, nil
}
func (us SqlUserStore) GetAll() ([]*model.User, *model.AppError) {
@@ -809,7 +831,7 @@ func (us SqlUserStore) GetProfileByIds(userIds []string, options *store.UserGetB
OrderBy("u.Username ASC")
if options.Since > 0 {
query = query.Where(squirrel.Gt(map[string]interface{}{
query = query.Where(sq.Gt(map[string]interface{}{
"u.UpdateAt": options.Since,
}))
}

Просмотреть файл

@@ -3607,7 +3607,7 @@ func testUserStoreGetUsersBatchForIndexing(t *testing.T, ss store.Store) {
// First and last user should be outside the range
res1List, err := ss.User().GetUsersBatchForIndexing(startTime, endTime, 100)
assert.Nil(t, err)
require.Nil(t, err)
assert.Len(t, res1List, 1)
assert.Equal(t, res1List[0].Username, u2.Username)
@@ -3617,7 +3617,7 @@ func testUserStoreGetUsersBatchForIndexing(t *testing.T, ss store.Store) {
// Update startTime to include first user
startTime = u1.CreateAt
res2List, err := ss.User().GetUsersBatchForIndexing(startTime, endTime, 100)
assert.Nil(t, err)
require.Nil(t, err)
assert.Len(t, res2List, 2)
assert.Equal(t, res2List[0].Username, u1.Username)
@@ -3628,7 +3628,7 @@ func testUserStoreGetUsersBatchForIndexing(t *testing.T, ss store.Store) {
// Update endTime to include last user
endTime = model.GetMillis()
res3List, err := ss.User().GetUsersBatchForIndexing(startTime, endTime, 100)
assert.Nil(t, err)
require.Nil(t, err)
assert.Len(t, res3List, 3)
assert.Equal(t, res3List[0].Username, u1.Username)
@@ -3639,7 +3639,7 @@ func testUserStoreGetUsersBatchForIndexing(t *testing.T, ss store.Store) {
// Testing the limit
res4List, err := ss.User().GetUsersBatchForIndexing(startTime, endTime, 2)
assert.Nil(t, err)
require.Nil(t, err)
assert.Len(t, res4List, 2)
assert.Equal(t, res4List[0].Username, u1.Username)
@@ -3919,9 +3919,9 @@ func testUserStorePromoteGuestToUser(t *testing.T, ss store.Store) {
require.Nil(t, err)
err = ss.User().PromoteGuestToUser(user.Id)
assert.Nil(t, err)
require.Nil(t, err)
updatedUser, err := ss.User().Get(user.Id)
assert.Nil(t, err)
require.Nil(t, err)
require.Equal(t, "system_user", updatedUser.Roles)
require.True(t, user.UpdateAt < updatedUser.UpdateAt)
@@ -3965,9 +3965,9 @@ func testUserStorePromoteGuestToUser(t *testing.T, ss store.Store) {
require.Nil(t, err)
err = ss.User().PromoteGuestToUser(user.Id)
assert.Nil(t, err)
require.Nil(t, err)
updatedUser, err := ss.User().Get(user.Id)
assert.Nil(t, err)
require.Nil(t, err)
require.Equal(t, "system_user system_admin", updatedUser.Roles)
updatedTeamMember, err := ss.Team().GetMember(teamId, user.Id)
@@ -3996,9 +3996,9 @@ func testUserStorePromoteGuestToUser(t *testing.T, ss store.Store) {
defer func() { require.Nil(t, ss.User().PermanentDelete(user.Id)) }()
err = ss.User().PromoteGuestToUser(user.Id)
assert.Nil(t, err)
require.Nil(t, err)
updatedUser, err := ss.User().Get(user.Id)
assert.Nil(t, err)
require.Nil(t, err)
require.Equal(t, "system_user", updatedUser.Roles)
})
@@ -4021,9 +4021,9 @@ func testUserStorePromoteGuestToUser(t *testing.T, ss store.Store) {
require.Nil(t, err)
err = ss.User().PromoteGuestToUser(user.Id)
assert.Nil(t, err)
require.Nil(t, err)
updatedUser, err := ss.User().Get(user.Id)
assert.Nil(t, err)
require.Nil(t, err)
require.Equal(t, "system_user", updatedUser.Roles)
updatedTeamMember, err := ss.Team().GetMember(teamId, user.Id)
@@ -4061,9 +4061,9 @@ func testUserStorePromoteGuestToUser(t *testing.T, ss store.Store) {
require.Nil(t, err)
err = ss.User().PromoteGuestToUser(user.Id)
assert.Nil(t, err)
require.Nil(t, err)
updatedUser, err := ss.User().Get(user.Id)
assert.Nil(t, err)
require.Nil(t, err)
require.Equal(t, "system_user", updatedUser.Roles)
updatedTeamMember, err := ss.Team().GetMember(teamId, user.Id)
@@ -4106,9 +4106,9 @@ func testUserStorePromoteGuestToUser(t *testing.T, ss store.Store) {
require.Nil(t, err)
err = ss.User().PromoteGuestToUser(user.Id)
assert.Nil(t, err)
require.Nil(t, err)
updatedUser, err := ss.User().Get(user.Id)
assert.Nil(t, err)
require.Nil(t, err)
require.Equal(t, "system_user custom_role", updatedUser.Roles)
updatedTeamMember, err := ss.Team().GetMember(teamId, user.Id)
@@ -4172,9 +4172,9 @@ func testUserStorePromoteGuestToUser(t *testing.T, ss store.Store) {
require.Nil(t, err)
err = ss.User().PromoteGuestToUser(user1.Id)
assert.Nil(t, err)
require.Nil(t, err)
updatedUser, err := ss.User().Get(user1.Id)
assert.Nil(t, err)
require.Nil(t, err)
require.Equal(t, "system_user", updatedUser.Roles)
updatedTeamMember, err := ss.Team().GetMember(teamId1, user1.Id)
@@ -4188,7 +4188,7 @@ func testUserStorePromoteGuestToUser(t *testing.T, ss store.Store) {
require.True(t, updatedChannelMember.SchemeUser)
notUpdatedUser, err := ss.User().Get(user2.Id)
assert.Nil(t, err)
require.Nil(t, err)
require.Equal(t, "system_guest", notUpdatedUser.Roles)
notUpdatedTeamMember, err := ss.Team().GetMember(teamId2, user2.Id)
@@ -4234,9 +4234,9 @@ func testUserStoreDemoteUserToGuest(t *testing.T, ss store.Store) {
require.Nil(t, err)
err = ss.User().DemoteUserToGuest(user.Id)
assert.Nil(t, err)
require.Nil(t, err)
updatedUser, err := ss.User().Get(user.Id)
assert.Nil(t, err)
require.Nil(t, err)
require.Equal(t, "system_guest", updatedUser.Roles)
require.True(t, user.UpdateAt < updatedUser.UpdateAt)
@@ -4280,9 +4280,9 @@ func testUserStoreDemoteUserToGuest(t *testing.T, ss store.Store) {
require.Nil(t, err)
err = ss.User().DemoteUserToGuest(user.Id)
assert.Nil(t, err)
require.Nil(t, err)
updatedUser, err := ss.User().Get(user.Id)
assert.Nil(t, err)
require.Nil(t, err)
require.Equal(t, "system_guest", updatedUser.Roles)
updatedTeamMember, err := ss.Team().GetMember(teamId, user.Id)
@@ -4311,9 +4311,9 @@ func testUserStoreDemoteUserToGuest(t *testing.T, ss store.Store) {
defer func() { require.Nil(t, ss.User().PermanentDelete(user.Id)) }()
err = ss.User().DemoteUserToGuest(user.Id)
assert.Nil(t, err)
require.Nil(t, err)
updatedUser, err := ss.User().Get(user.Id)
assert.Nil(t, err)
require.Nil(t, err)
require.Equal(t, "system_guest", updatedUser.Roles)
})
@@ -4336,9 +4336,9 @@ func testUserStoreDemoteUserToGuest(t *testing.T, ss store.Store) {
require.Nil(t, err)
err = ss.User().DemoteUserToGuest(user.Id)
assert.Nil(t, err)
require.Nil(t, err)
updatedUser, err := ss.User().Get(user.Id)
assert.Nil(t, err)
require.Nil(t, err)
require.Equal(t, "system_guest", updatedUser.Roles)
updatedTeamMember, err := ss.Team().GetMember(teamId, user.Id)
@@ -4376,9 +4376,9 @@ func testUserStoreDemoteUserToGuest(t *testing.T, ss store.Store) {
require.Nil(t, err)
err = ss.User().DemoteUserToGuest(user.Id)
assert.Nil(t, err)
require.Nil(t, err)
updatedUser, err := ss.User().Get(user.Id)
assert.Nil(t, err)
require.Nil(t, err)
require.Equal(t, "system_guest", updatedUser.Roles)
updatedTeamMember, err := ss.Team().GetMember(teamId, user.Id)
@@ -4387,7 +4387,7 @@ func testUserStoreDemoteUserToGuest(t *testing.T, ss store.Store) {
require.False(t, updatedTeamMember.SchemeUser)
updatedChannelMember, err := ss.Channel().GetMember(channel.Id, user.Id)
assert.Nil(t, err)
require.Nil(t, err)
require.True(t, updatedChannelMember.SchemeGuest)
require.False(t, updatedChannelMember.SchemeUser)
})
@@ -4421,9 +4421,9 @@ func testUserStoreDemoteUserToGuest(t *testing.T, ss store.Store) {
require.Nil(t, err)
err = ss.User().DemoteUserToGuest(user.Id)
assert.Nil(t, err)
require.Nil(t, err)
updatedUser, err := ss.User().Get(user.Id)
assert.Nil(t, err)
require.Nil(t, err)
require.Equal(t, "system_guest custom_role", updatedUser.Roles)
updatedTeamMember, err := ss.Team().GetMember(teamId, user.Id)
@@ -4432,7 +4432,7 @@ func testUserStoreDemoteUserToGuest(t *testing.T, ss store.Store) {
require.False(t, updatedTeamMember.SchemeUser)
updatedChannelMember, err := ss.Channel().GetMember(channel.Id, user.Id)
assert.Nil(t, err)
require.Nil(t, err)
require.True(t, updatedChannelMember.SchemeGuest)
require.False(t, updatedChannelMember.SchemeUser)
})
@@ -4487,9 +4487,9 @@ func testUserStoreDemoteUserToGuest(t *testing.T, ss store.Store) {
require.Nil(t, err)
err = ss.User().DemoteUserToGuest(user1.Id)
assert.Nil(t, err)
require.Nil(t, err)
updatedUser, err := ss.User().Get(user1.Id)
assert.Nil(t, err)
require.Nil(t, err)
require.Equal(t, "system_guest", updatedUser.Roles)
updatedTeamMember, err := ss.Team().GetMember(teamId1, user1.Id)
@@ -4498,12 +4498,12 @@ func testUserStoreDemoteUserToGuest(t *testing.T, ss store.Store) {
require.False(t, updatedTeamMember.SchemeUser)
updatedChannelMember, err := ss.Channel().GetMember(channel.Id, user1.Id)
assert.Nil(t, err)
require.Nil(t, err)
require.True(t, updatedChannelMember.SchemeGuest)
require.False(t, updatedChannelMember.SchemeUser)
notUpdatedUser, err := ss.User().Get(user2.Id)
assert.Nil(t, err)
require.Nil(t, err)
require.Equal(t, "system_user", notUpdatedUser.Roles)
notUpdatedTeamMember, err := ss.Team().GetMember(teamId2, user2.Id)
@@ -4512,7 +4512,7 @@ func testUserStoreDemoteUserToGuest(t *testing.T, ss store.Store) {
require.True(t, notUpdatedTeamMember.SchemeUser)
notUpdatedChannelMember, err := ss.Channel().GetMember(channel.Id, user2.Id)
assert.Nil(t, err)
require.Nil(t, err)
require.False(t, notUpdatedChannelMember.SchemeGuest)
require.True(t, notUpdatedChannelMember.SchemeUser)
})