diff options
author | Stephen Kiers <stephen@stephenkiers.com> | 2018-03-09 05:48:30 -0700 |
---|---|---|
committer | Joram Wilander <jwawilander@gmail.com> | 2018-03-09 07:48:30 -0500 |
commit | 302dae5bb982aad14324a4df61a018557f3dd24e (patch) | |
tree | 8e1b8b52b3c717dd90ade42ad6dd1e3a265d9903 /store/sqlstore/user_store.go | |
parent | 31532f7feb4055f42538e23d48d4f0c941609db1 (diff) | |
download | chat-302dae5bb982aad14324a4df61a018557f3dd24e.tar.gz chat-302dae5bb982aad14324a4df61a018557f3dd24e.tar.bz2 chat-302dae5bb982aad14324a4df61a018557f3dd24e.zip |
MM-9274- Sort Users in Channel by status (#8181)
* sort by lastActivity
* added status ordering to Users
* sort offline before dnd
* remove data not needed
* added seperate call for when order=‘status’ is on GetUser request
* remove PrintLn
* styling fix
* remove mistake
* mistake 2
* better comment
* explicit if statemnt
* writing tests
* removed manually added mocks
* generated mock
* ICU-668 Added unit tests
* style fix
* sort by lastActivity
* added status ordering to Users
* sort offline before dnd
* remove data not needed
* added seperate call for when order=‘status’ is on GetUser request
* remove PrintLn
* styling fix
* remove mistake
* mistake 2
* better comment
* explicit if statemnt
* writing tests
* removed manually added mocks
* generated mock
* ICU-668 Added unit tests
* style fix
* reverse dnd and offline
* Fixed app.SaveStatusAndBroadcast
* Fixed incorrect merge
* Fixing incorrect merge again
Diffstat (limited to 'store/sqlstore/user_store.go')
-rw-r--r-- | store/sqlstore/user_store.go | 49 |
1 files changed, 48 insertions, 1 deletions
diff --git a/store/sqlstore/user_store.go b/store/sqlstore/user_store.go index 04e0c994c..5e84af930 100644 --- a/store/sqlstore/user_store.go +++ b/store/sqlstore/user_store.go @@ -412,7 +412,18 @@ func (us SqlUserStore) GetProfilesInChannel(channelId string, offset int, limit return store.Do(func(result *store.StoreResult) { var users []*model.User - query := "SELECT Users.* FROM Users, ChannelMembers WHERE ChannelMembers.ChannelId = :ChannelId AND Users.Id = ChannelMembers.UserId ORDER BY Users.Username ASC LIMIT :Limit OFFSET :Offset" + query := ` + SELECT + Users.* + FROM + Users, ChannelMembers + WHERE + ChannelMembers.ChannelId = :ChannelId + AND Users.Id = ChannelMembers.UserId + ORDER BY + Users.Username ASC + LIMIT :Limit OFFSET :Offset + ` if _, err := us.GetReplica().Select(&users, query, map[string]interface{}{"ChannelId": channelId, "Offset": offset, "Limit": limit}); err != nil { result.Err = model.NewAppError("SqlUserStore.GetProfilesInChannel", "store.sql_user.get_profiles.app_error", nil, err.Error(), http.StatusInternalServerError) @@ -427,6 +438,42 @@ func (us SqlUserStore) GetProfilesInChannel(channelId string, offset int, limit }) } +func (us SqlUserStore) GetProfilesInChannelByStatus(channelId string, offset int, limit int) store.StoreChannel { + return store.Do(func(result *store.StoreResult) { + var users []*model.User + + query := ` + SELECT + Users.* + FROM Users + INNER JOIN ChannelMembers ON Users.Id = ChannelMembers.UserId + LEFT JOIN Status ON Users.Id = Status.UserId + WHERE + ChannelMembers.ChannelId = :ChannelId + ORDER BY + CASE Status + WHEN 'online' THEN 1 + WHEN 'away' THEN 2 + WHEN 'dnd' THEN 3 + ELSE 4 + END, + Users.Username ASC + LIMIT :Limit OFFSET :Offset + ` + + if _, err := us.GetReplica().Select(&users, query, map[string]interface{}{"ChannelId": channelId, "Offset": offset, "Limit": limit}); err != nil { + result.Err = model.NewAppError("SqlUserStore.GetProfilesInChannelByStatus", "store.sql_user.get_profiles.app_error", nil, err.Error(), http.StatusInternalServerError) + } else { + + for _, u := range users { + u.Sanitize(map[string]bool{}) + } + + result.Data = users + } + }) +} + func (us SqlUserStore) GetAllProfilesInChannel(channelId string, allowFromCache bool) store.StoreChannel { return store.Do(func(result *store.StoreResult) { if allowFromCache { |