summaryrefslogtreecommitdiffstats
path: root/api
diff options
context:
space:
mode:
authorJoram Wilander <jwawilander@gmail.com>2015-11-04 09:43:06 -0500
committerJoram Wilander <jwawilander@gmail.com>2015-11-04 09:43:06 -0500
commit559ca09f2ce72306ea33366f2972be6d22656fc7 (patch)
treebc88626a1c47b9821e576c42fcee3f89f83f3b6c /api
parent56ce3bc99735fe7ef7d4bf5f783c3d6f01a3a878 (diff)
parentee66b089349d46695bbe652b381da4be2b67954b (diff)
downloadchat-559ca09f2ce72306ea33366f2972be6d22656fc7.tar.gz
chat-559ca09f2ce72306ea33366f2972be6d22656fc7.tar.bz2
chat-559ca09f2ce72306ea33366f2972be6d22656fc7.zip
Merge pull request #1289 from mattermost/plt-516-2
PLT-516 Part 1 of performance fixes for large teams
Diffstat (limited to 'api')
-rw-r--r--api/user.go19
-rw-r--r--api/user_test.go8
2 files changed, 24 insertions, 3 deletions
diff --git a/api/user.go b/api/user.go
index 732c6b9a8..42d3a43e7 100644
--- a/api/user.go
+++ b/api/user.go
@@ -49,7 +49,7 @@ func InitUser(r *mux.Router) {
sr.Handle("/newimage", ApiUserRequired(uploadProfileImage)).Methods("POST")
sr.Handle("/me", ApiAppHandler(getMe)).Methods("GET")
- sr.Handle("/status", ApiUserRequiredActivity(getStatuses, false)).Methods("GET")
+ sr.Handle("/status", ApiUserRequiredActivity(getStatuses, false)).Methods("POST")
sr.Handle("/profiles", ApiUserRequired(getProfiles)).Methods("GET")
sr.Handle("/profiles/{id:[A-Za-z0-9]+}", ApiUserRequired(getProfiles)).Methods("GET")
sr.Handle("/{id:[A-Za-z0-9]+}", ApiUserRequired(getUser)).Methods("GET")
@@ -1483,16 +1483,31 @@ func updateUserNotify(c *Context, w http.ResponseWriter, r *http.Request) {
}
func getStatuses(c *Context, w http.ResponseWriter, r *http.Request) {
+ userIds := model.ArrayFromJson(r.Body)
+ if len(userIds) == 0 {
+ c.SetInvalidParam("getStatuses", "userIds")
+ return
+ }
if result := <-Srv.Store.User().GetProfiles(c.Session.TeamId); result.Err != nil {
c.Err = result.Err
return
} else {
-
profiles := result.Data.(map[string]*model.User)
statuses := map[string]string{}
for _, profile := range profiles {
+ found := false
+ for _, uid := range userIds {
+ if uid == profile.Id {
+ found = true
+ }
+ }
+
+ if !found {
+ continue
+ }
+
if profile.IsOffline() {
statuses[profile.Id] = model.USER_OFFLINE
} else if profile.IsAway() {
diff --git a/api/user_test.go b/api/user_test.go
index 0ad3541bc..f067182cb 100644
--- a/api/user_test.go
+++ b/api/user_test.go
@@ -1020,9 +1020,15 @@ func TestStatuses(t *testing.T) {
ruser := Client.Must(Client.CreateUser(&user, "")).Data.(*model.User)
store.Must(Srv.Store.User().VerifyEmail(ruser.Id))
+ user2 := model.User{TeamId: rteam.Data.(*model.Team).Id, Email: strings.ToLower(model.NewId()) + "corey@test.com", Nickname: "Corey Hulen", Password: "pwd"}
+ ruser2 := Client.Must(Client.CreateUser(&user2, "")).Data.(*model.User)
+ store.Must(Srv.Store.User().VerifyEmail(ruser2.Id))
+
Client.LoginByEmail(team.Name, user.Email, user.Password)
- r1, err := Client.GetStatuses()
+ userIds := []string{ruser2.Id}
+
+ r1, err := Client.GetStatuses(userIds)
if err != nil {
t.Fatal(err)
}