From 7ff2aef7facdeb025a1651ef411fceb3d81932c1 Mon Sep 17 00:00:00 2001 From: Joram Wilander Date: Fri, 3 Feb 2017 15:17:34 -0500 Subject: Implement GET /users endpoint for APIv4 (#5277) --- app/channel.go | 10 ++-- app/notification.go | 2 +- app/user.go | 134 ++++++++++++++++++++++++++++++++++++++++++++++++---- 3 files changed, 130 insertions(+), 16 deletions(-) (limited to 'app') diff --git a/app/channel.go b/app/channel.go index 02124f3c8..3609a36b7 100644 --- a/app/channel.go +++ b/app/channel.go @@ -404,22 +404,20 @@ func AddUserToChannel(user *model.User, channel *model.Channel) (*model.ChannelM } func AddDirectChannels(teamId string, user *model.User) *model.AppError { - var profiles map[string]*model.User + var profiles []*model.User if result := <-Srv.Store.User().GetProfiles(teamId, 0, 100); result.Err != nil { return model.NewLocAppError("AddDirectChannels", "api.user.add_direct_channels_and_forget.failed.error", map[string]interface{}{"UserId": user.Id, "TeamId": teamId, "Error": result.Err.Error()}, "") } else { - profiles = result.Data.(map[string]*model.User) + profiles = result.Data.([]*model.User) } var preferences model.Preferences - for id := range profiles { - if id == user.Id { + for _, profile := range profiles { + if profile.Id == user.Id { continue } - profile := profiles[id] - preference := model.Preference{ UserId: user.Id, Category: model.PREFERENCE_CATEGORY_DIRECT_CHANNEL_SHOW, diff --git a/app/notification.go b/app/notification.go index 9ad0b346b..cc4e13ab1 100644 --- a/app/notification.go +++ b/app/notification.go @@ -25,7 +25,7 @@ import ( ) func SendNotifications(post *model.Post, team *model.Team, channel *model.Channel, sender *model.User) ([]string, *model.AppError) { - pchan := Srv.Store.User().GetProfilesInChannel(channel.Id, -1, -1, true) + pchan := Srv.Store.User().GetAllProfilesInChannel(channel.Id, true) fchan := Srv.Store.FileInfo().GetForPost(post.Id) var profileMap map[string]*model.User diff --git a/app/user.go b/app/user.go index f9137b1e9..bc809cfaa 100644 --- a/app/user.go +++ b/app/user.go @@ -377,44 +377,160 @@ func GetUserForLogin(loginId string, onlyLdap bool) (*model.User, *model.AppErro } } -func GetUsers(offset int, limit int) (map[string]*model.User, *model.AppError) { +func GetUsers(offset int, limit int) ([]*model.User, *model.AppError) { if result := <-Srv.Store.User().GetAllProfiles(offset, limit); result.Err != nil { return nil, result.Err } else { - return result.Data.(map[string]*model.User), nil + return result.Data.([]*model.User), nil + } +} + +func GetUsersMap(page int, perPage int, asAdmin bool) (map[string]*model.User, *model.AppError) { + users, err := GetUsers(page*perPage, perPage) + if err != nil { + return nil, err + } + + userMap := make(map[string]*model.User, len(users)) + + for _, user := range users { + SanitizeProfile(user, asAdmin) + userMap[user.Id] = user } + + return userMap, nil +} + +func GetUsersPage(page int, perPage int, asAdmin bool) ([]*model.User, *model.AppError) { + users, err := GetUsers(page*perPage, perPage) + if err != nil { + return nil, err + } + + for _, user := range users { + SanitizeProfile(user, asAdmin) + } + + return users, nil } func GetUsersEtag() string { return (<-Srv.Store.User().GetEtagForAllProfiles()).Data.(string) } -func GetUsersInTeam(teamId string, offset int, limit int) (map[string]*model.User, *model.AppError) { +func GetUsersInTeam(teamId string, offset int, limit int) ([]*model.User, *model.AppError) { if result := <-Srv.Store.User().GetProfiles(teamId, offset, limit); result.Err != nil { return nil, result.Err } else { - return result.Data.(map[string]*model.User), nil + return result.Data.([]*model.User), nil + } +} + +func GetUsersInTeamMap(teamId string, offset int, limit int, asAdmin bool) (map[string]*model.User, *model.AppError) { + users, err := GetUsersInTeam(teamId, offset, limit) + if err != nil { + return nil, err + } + + userMap := make(map[string]*model.User, len(users)) + + for _, user := range users { + SanitizeProfile(user, asAdmin) + userMap[user.Id] = user } + + return userMap, nil +} + +func GetUsersInTeamPage(teamId string, page int, perPage int, asAdmin bool) ([]*model.User, *model.AppError) { + users, err := GetUsersInTeam(teamId, page*perPage, perPage) + if err != nil { + return nil, err + } + + for _, user := range users { + SanitizeProfile(user, asAdmin) + } + + return users, nil } func GetUsersInTeamEtag(teamId string) string { return (<-Srv.Store.User().GetEtagForProfiles(teamId)).Data.(string) } -func GetUsersInChannel(channelId string, offset int, limit int) (map[string]*model.User, *model.AppError) { - if result := <-Srv.Store.User().GetProfilesInChannel(channelId, offset, limit, false); result.Err != nil { +func GetUsersInChannel(channelId string, offset int, limit int) ([]*model.User, *model.AppError) { + if result := <-Srv.Store.User().GetProfilesInChannel(channelId, offset, limit); result.Err != nil { return nil, result.Err } else { - return result.Data.(map[string]*model.User), nil + return result.Data.([]*model.User), nil + } +} + +func GetUsersInChannelMap(channelId string, offset int, limit int, asAdmin bool) (map[string]*model.User, *model.AppError) { + users, err := GetUsersInChannel(channelId, offset, limit) + if err != nil { + return nil, err + } + + userMap := make(map[string]*model.User, len(users)) + + for _, user := range users { + SanitizeProfile(user, asAdmin) + userMap[user.Id] = user } + + return userMap, nil +} + +func GetUsersInChannelPage(channelId string, page int, perPage int, asAdmin bool) ([]*model.User, *model.AppError) { + users, err := GetUsersInChannel(channelId, page*perPage, perPage) + if err != nil { + return nil, err + } + + for _, user := range users { + SanitizeProfile(user, asAdmin) + } + + return users, nil } -func GetUsersNotInChannel(teamId string, channelId string, offset int, limit int) (map[string]*model.User, *model.AppError) { +func GetUsersNotInChannel(teamId string, channelId string, offset int, limit int) ([]*model.User, *model.AppError) { if result := <-Srv.Store.User().GetProfilesNotInChannel(teamId, channelId, offset, limit); result.Err != nil { return nil, result.Err } else { - return result.Data.(map[string]*model.User), nil + return result.Data.([]*model.User), nil + } +} + +func GetUsersNotInChannelMap(teamId string, channelId string, offset int, limit int, asAdmin bool) (map[string]*model.User, *model.AppError) { + users, err := GetUsersNotInChannel(teamId, channelId, offset, limit) + if err != nil { + return nil, err + } + + userMap := make(map[string]*model.User, len(users)) + + for _, user := range users { + SanitizeProfile(user, asAdmin) + userMap[user.Id] = user } + + return userMap, nil +} + +func GetUsersNotInChannelPage(teamId string, channelId string, page int, perPage int, asAdmin bool) ([]*model.User, *model.AppError) { + users, err := GetUsersNotInChannel(teamId, channelId, page*perPage, perPage) + if err != nil { + return nil, err + } + + for _, user := range users { + SanitizeProfile(user, asAdmin) + } + + return users, nil } func GetUsersByIds(userIds []string, asAdmin bool) ([]*model.User, *model.AppError) { -- cgit v1.2.3-1-g7c22