summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorCorey Hulen <corey@hulen.com>2016-05-12 18:36:30 -0700
committerCorey Hulen <corey@hulen.com>2016-05-12 18:36:30 -0700
commit9d94869cc6a0fb9f051879437c104ccd76094380 (patch)
tree4a61582c2a41b9d5983f107b0d66ece906d22718
parente46c1b8d52dce75a442b42c40803a071532676d7 (diff)
downloadchat-9d94869cc6a0fb9f051879437c104ccd76094380.tar.gz
chat-9d94869cc6a0fb9f051879437c104ccd76094380.tar.bz2
chat-9d94869cc6a0fb9f051879437c104ccd76094380.zip
Fixing issue with missing user (#2989)
-rw-r--r--api/team.go4
-rw-r--r--store/sql_user_store.go23
-rw-r--r--store/sql_user_store_test.go24
-rw-r--r--store/store.go1
4 files changed, 51 insertions, 1 deletions
diff --git a/api/team.go b/api/team.go
index f9b718e06..52d01b1cc 100644
--- a/api/team.go
+++ b/api/team.go
@@ -266,6 +266,10 @@ func JoinUserToTeam(team *model.Team, user *model.User) *model.AppError {
return tmr.Err
}
+ if uua := <-Srv.Store.User().UpdateUpdateAt(user.Id); uua.Err != nil {
+ return uua.Err
+ }
+
// Soft error if there is an issue joining the default channels
if err := JoinDefaultChannels(team.Id, user, channelRole); err != nil {
l4g.Error(utils.T("api.user.create_user.joining.error"), user.Id, team.Id, err)
diff --git a/store/sql_user_store.go b/store/sql_user_store.go
index 080d8d128..a6b706380 100644
--- a/store/sql_user_store.go
+++ b/store/sql_user_store.go
@@ -197,6 +197,27 @@ func (us SqlUserStore) UpdateLastPictureUpdate(userId string) StoreChannel {
return storeChannel
}
+func (us SqlUserStore) UpdateUpdateAt(userId string) StoreChannel {
+ storeChannel := make(StoreChannel)
+
+ go func() {
+ result := StoreResult{}
+
+ curTime := model.GetMillis()
+
+ if _, err := us.GetMaster().Exec("UPDATE Users SET UpdateAt = :Time WHERE Id = :UserId", map[string]interface{}{"Time": curTime, "UserId": userId}); err != nil {
+ result.Err = model.NewLocAppError("SqlUserStore.UpdateUpdateAt", "store.sql_user.update_update.app_error", nil, "user_id="+userId)
+ } else {
+ result.Data = userId
+ }
+
+ storeChannel <- result
+ close(storeChannel)
+ }()
+
+ return storeChannel
+}
+
func (us SqlUserStore) UpdateLastPingAt(userId string, time int64) StoreChannel {
storeChannel := make(StoreChannel)
@@ -461,7 +482,7 @@ func (s SqlUserStore) GetEtagForDirectProfiles(userId string) StoreChannel {
WHERE
UserId = :UserId
AND Category = 'direct_channel_show')
- ORDER BY UpdateAt DESC
+ ORDER BY UpdateAt DESC LIMIT 1
`, map[string]interface{}{"UserId": userId})
if err != nil {
result.Data = fmt.Sprintf("%v.%v", model.CurrentVersion, model.GetMillis())
diff --git a/store/sql_user_store_test.go b/store/sql_user_store_test.go
index 5c33ea0f1..b6cfbb0ec 100644
--- a/store/sql_user_store_test.go
+++ b/store/sql_user_store_test.go
@@ -105,6 +105,30 @@ func TestUserStoreUpdate(t *testing.T) {
}
}
+func TestUserStoreUpdateUpdateAt(t *testing.T) {
+ Setup()
+
+ u1 := &model.User{}
+ u1.Email = model.NewId()
+ Must(store.User().Save(u1))
+ Must(store.Team().SaveMember(&model.TeamMember{TeamId: model.NewId(), UserId: u1.Id}))
+
+ time.Sleep(10 * time.Millisecond)
+
+ if err := (<-store.User().UpdateUpdateAt(u1.Id)).Err; err != nil {
+ t.Fatal(err)
+ }
+
+ if r1 := <-store.User().Get(u1.Id); r1.Err != nil {
+ t.Fatal(r1.Err)
+ } else {
+ if r1.Data.(*model.User).UpdateAt <= u1.UpdateAt {
+ t.Fatal("UpdateAt not updated correctly")
+ }
+ }
+
+}
+
func TestUserStoreUpdateLastPingAt(t *testing.T) {
Setup()
diff --git a/store/store.go b/store/store.go
index 37aafdd4a..7f62fcd97 100644
--- a/store/store.go
+++ b/store/store.go
@@ -122,6 +122,7 @@ type UserStore interface {
Save(user *model.User) StoreChannel
Update(user *model.User, allowRoleUpdate bool) StoreChannel
UpdateLastPictureUpdate(userId string) StoreChannel
+ UpdateUpdateAt(userId string) StoreChannel
UpdateLastPingAt(userId string, time int64) StoreChannel
UpdateLastActivityAt(userId string, time int64) StoreChannel
UpdateUserAndSessionActivity(userId string, sessionId string, time int64) StoreChannel