diff options
author | Harrison Healey <harrisonmhealey@gmail.com> | 2017-04-25 11:00:41 -0400 |
---|---|---|
committer | Corey Hulen <corey@hulen.com> | 2017-04-25 08:00:41 -0700 |
commit | db68e598a10d36013b7ff0994eca86e0464355e1 (patch) | |
tree | ec0f5e42c42d43afd4476f7e6b5ba9d3484577cc /store | |
parent | cb668b92832193df7549c5a16543dcdfed44be56 (diff) | |
download | chat-db68e598a10d36013b7ff0994eca86e0464355e1.tar.gz chat-db68e598a10d36013b7ff0994eca86e0464355e1.tar.bz2 chat-db68e598a10d36013b7ff0994eca86e0464355e1.zip |
PLT-4457 Added API to get multiple users by their usernames (#6218)
* Allow getting profiles by username without a team
* Changed UserStore.GetProfilesByUsernames to return an array
* PLT-4457 Added API to get multiple users by their usernames
* Changed users/names route to users/usernames
Diffstat (limited to 'store')
-rw-r--r-- | store/sql_user_store.go | 21 | ||||
-rw-r--r-- | store/sql_user_store_test.go | 52 |
2 files changed, 57 insertions, 16 deletions
diff --git a/store/sql_user_store.go b/store/sql_user_store.go index 8bd16f696..b15f349d1 100644 --- a/store/sql_user_store.go +++ b/store/sql_user_store.go @@ -729,20 +729,19 @@ func (us SqlUserStore) GetProfilesByUsernames(usernames []string, teamId string) idQuery += ":username" + strconv.Itoa(index) } - props["TeamId"] = teamId + var query string + if teamId == "" { + query = `SELECT * FROM Users WHERE Username IN (` + idQuery + `)` + } else { + query = `SELECT Users.* FROM Users INNER JOIN TeamMembers ON + Users.Id = TeamMembers.UserId AND Users.Username IN (` + idQuery + `) AND TeamMembers.TeamId = :TeamId ` + props["TeamId"] = teamId + } - if _, err := us.GetReplica().Select(&users, `SELECT Users.* FROM Users INNER JOIN TeamMembers ON - Users.Id = TeamMembers.UserId AND Users.Username IN (`+idQuery+`) AND TeamMembers.TeamId = :TeamId `, props); err != nil { + if _, err := us.GetReplica().Select(&users, query, props); err != nil { result.Err = model.NewLocAppError("SqlUserStore.GetProfilesByUsernames", "store.sql_user.get_profiles.app_error", nil, err.Error()) } else { - userMap := make(map[string]*model.User) - - for _, u := range users { - u.Sanitize(map[string]bool{}) - userMap[u.Id] = u - } - - result.Data = userMap + result.Data = users } storeChannel <- result diff --git a/store/sql_user_store_test.go b/store/sql_user_store_test.go index 7d7379668..367dc46dc 100644 --- a/store/sql_user_store_test.go +++ b/store/sql_user_store_test.go @@ -836,25 +836,67 @@ func TestUserStoreGetProfilesByUsernames(t *testing.T) { if r1 := <-store.User().GetProfilesByUsernames([]string{u1.Username, u2.Username}, teamId); r1.Err != nil { t.Fatal(r1.Err) } else { - users := r1.Data.(map[string]*model.User) + users := r1.Data.([]*model.User) if len(users) != 2 { t.Fatal("invalid returned users") } - if users[u1.Id].Id != u1.Id { - t.Fatal("invalid returned user") + if users[0].Id != u1.Id && users[1].Id != u1.Id { + t.Fatal("invalid returned user 1") + } + + if users[0].Id != u2.Id && users[1].Id != u2.Id { + t.Fatal("invalid returned user 2") } } if r1 := <-store.User().GetProfilesByUsernames([]string{u1.Username}, teamId); r1.Err != nil { t.Fatal(r1.Err) } else { - users := r1.Data.(map[string]*model.User) + users := r1.Data.([]*model.User) if len(users) != 1 { t.Fatal("invalid returned users") } - if users[u1.Id].Id != u1.Id { + if users[0].Id != u1.Id { + t.Fatal("invalid returned user") + } + } + + team2Id := model.NewId() + + u3 := &model.User{} + u3.Email = model.NewId() + u3.Username = "username3" + model.NewId() + Must(store.User().Save(u3)) + Must(store.Team().SaveMember(&model.TeamMember{TeamId: team2Id, UserId: u3.Id})) + + if r1 := <-store.User().GetProfilesByUsernames([]string{u1.Username, u3.Username}, ""); r1.Err != nil { + t.Fatal(r1.Err) + } else { + users := r1.Data.([]*model.User) + if len(users) != 2 { + t.Fatal("invalid returned users") + } + + if users[0].Id != u1.Id && users[1].Id != u1.Id { + t.Fatal("invalid returned user 1") + } + + if users[0].Id != u3.Id && users[1].Id != u3.Id { + t.Fatal("invalid returned user 3") + } + } + + if r1 := <-store.User().GetProfilesByUsernames([]string{u1.Username, u3.Username}, teamId); r1.Err != nil { + t.Fatal(r1.Err) + } else { + users := r1.Data.([]*model.User) + if len(users) != 1 { + t.Fatal("invalid returned users") + } + + if users[0].Id != u1.Id { t.Fatal("invalid returned user") } } |