Skip to content

Commit

Permalink
Fixing issue with missing user (mattermost#2989)
Browse files Browse the repository at this point in the history
  • Loading branch information
coreyhulen committed May 13, 2016
1 parent e46c1b8 commit 9d94869
Show file tree
Hide file tree
Showing 4 changed files with 51 additions and 1 deletion.
4 changes: 4 additions & 0 deletions api/team.go
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down
23 changes: 22 additions & 1 deletion store/sql_user_store.go
Original file line number Diff line number Diff line change
Expand Up @@ -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)

Expand Down Expand Up @@ -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())
Expand Down
24 changes: 24 additions & 0 deletions store/sql_user_store_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -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()

Expand Down
1 change: 1 addition & 0 deletions store/store.go
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down

0 comments on commit 9d94869

Please sign in to comment.