Этот коммит содержится в:
Andrei Stanciu
2017-02-28 10:41:38 +02:00
коммит произвёл George Goldberg
родитель 83c113595a
Коммит 45edfbe719
6 изменённых файлов: 154 добавлений и 0 удалений

Просмотреть файл

@@ -16,6 +16,7 @@ func InitTeam() {
l4g.Debug(utils.T("api.team.init.debug")) l4g.Debug(utils.T("api.team.init.debug"))
BaseRoutes.Teams.Handle("", ApiSessionRequired(createTeam)).Methods("POST") BaseRoutes.Teams.Handle("", ApiSessionRequired(createTeam)).Methods("POST")
BaseRoutes.Teams.Handle("", ApiSessionRequired(getAllTeams)).Methods("GET")
BaseRoutes.TeamsForUser.Handle("", ApiSessionRequired(getTeamsForUser)).Methods("GET") BaseRoutes.TeamsForUser.Handle("", ApiSessionRequired(getTeamsForUser)).Methods("GET")
BaseRoutes.Team.Handle("", ApiSessionRequired(getTeam)).Methods("GET") BaseRoutes.Team.Handle("", ApiSessionRequired(getTeam)).Methods("GET")
@@ -189,3 +190,21 @@ func updateTeamMemberRoles(c *Context, w http.ResponseWriter, r *http.Request) {
ReturnStatusOK(w) ReturnStatusOK(w)
} }
func getAllTeams(c *Context, w http.ResponseWriter, r *http.Request) {
var teams []*model.Team
var err *model.AppError
if app.SessionHasPermissionTo(c.Session, model.PERMISSION_MANAGE_SYSTEM) {
teams, err = app.GetAllTeamsPage(c.Params.Page, c.Params.PerPage)
} else {
teams, err = app.GetAllOpenTeamsPage(c.Params.Page, c.Params.PerPage)
}
if err != nil {
c.Err = err
return
}
w.Write([]byte(model.TeamListToJson(teams)))
}

Просмотреть файл

@@ -114,6 +114,54 @@ func TestGetTeam(t *testing.T) {
CheckNoError(t, resp) CheckNoError(t, resp)
} }
func TestGetAllTeams(t *testing.T) {
th := Setup().InitBasic().InitSystemAdmin()
defer TearDown()
Client := th.Client
team := &model.Team{DisplayName: "Name", Name: GenerateTestTeamName(), Email: GenerateTestEmail(), Type: model.TEAM_OPEN, AllowOpenInvite: true}
_, resp := Client.CreateTeam(team)
CheckNoError(t, resp)
rrteams, resp := Client.GetAllTeams("", 1, 1)
CheckNoError(t, resp)
if (len(rrteams) != 1) {
t.Fatal("wrong number of teams - should be 1")
}
for _, rt := range rrteams {
if rt.Type != model.TEAM_OPEN {
t.Fatal("not all teams are open")
}
}
rrteams1, resp := Client.GetAllTeams("", 1, 0)
CheckNoError(t, resp)
if (len(rrteams1) != 0) {
t.Fatal("wrong number of teams - should be 0")
}
rrteams2, resp := th.SystemAdminClient.GetAllTeams("", 1, 1)
CheckNoError(t, resp)
if (len(rrteams2) != 1) {
t.Fatal("wrong number of teams - should be 1")
}
rrteams2, resp = Client.GetAllTeams("", 1, 0)
CheckNoError(t, resp)
if (len(rrteams2) != 0) {
t.Fatal("wrong number of teams - should be 0")
}
Client.Logout()
_, resp = Client.GetAllTeams("", 1, 10)
CheckUnauthorizedStatus(t, resp)
}
func TestGetTeamByName(t *testing.T) { func TestGetTeamByName(t *testing.T) {
th := Setup().InitBasic().InitSystemAdmin() th := Setup().InitBasic().InitSystemAdmin()
defer TearDown() defer TearDown()

Просмотреть файл

@@ -327,6 +327,14 @@ func GetAllTeams() ([]*model.Team, *model.AppError) {
} }
} }
func GetAllTeamsPage(offset int, limit int) ([]*model.Team, *model.AppError) {
if result := <-Srv.Store.Team().GetAllPage(offset, limit); result.Err != nil {
return nil, result.Err
} else {
return result.Data.([]*model.Team), nil
}
}
func GetAllOpenTeams() ([]*model.Team, *model.AppError) { func GetAllOpenTeams() ([]*model.Team, *model.AppError) {
if result := <-Srv.Store.Team().GetAllTeamListing(); result.Err != nil { if result := <-Srv.Store.Team().GetAllTeamListing(); result.Err != nil {
return nil, result.Err return nil, result.Err
@@ -335,6 +343,14 @@ func GetAllOpenTeams() ([]*model.Team, *model.AppError) {
} }
} }
func GetAllOpenTeamsPage(offset int, limit int) ([]*model.Team, *model.AppError) {
if result := <-Srv.Store.Team().GetAllTeamPageListing(offset, limit); result.Err != nil {
return nil, result.Err
} else {
return result.Data.([]*model.Team), nil
}
}
func GetTeamsForUser(userId string) ([]*model.Team, *model.AppError) { func GetTeamsForUser(userId string) ([]*model.Team, *model.AppError) {
if result := <-Srv.Store.Team().GetTeamsByUserId(userId); result.Err != nil { if result := <-Srv.Store.Team().GetTeamsByUserId(userId); result.Err != nil {
return nil, result.Err return nil, result.Err

Просмотреть файл

@@ -523,6 +523,17 @@ func (c *Client4) GetTeam(teamId, etag string) (*Team, *Response) {
} }
} }
// GetAllTeams returns all teams based on permissions.
func (c *Client4) GetAllTeams(etag string, page int, perPage int) ([]*Team, *Response) {
query := fmt.Sprintf("?page=%v&per_page=%v", page, perPage)
if r, err := c.DoApiGet(c.GetTeamsRoute()+query, etag); err != nil {
return nil, &Response{StatusCode: r.StatusCode, Error: err}
} else {
defer closeBody(r)
return TeamListFromJson(r.Body), BuildResponse(r)
}
}
// GetTeamByName returns a team based on the provided team name string. // GetTeamByName returns a team based on the provided team name string.
func (c *Client4) GetTeamByName(name, etag string) (*Team, *Response) { func (c *Client4) GetTeamByName(name, etag string) (*Team, *Response) {
if r, err := c.DoApiGet(c.GetTeamByNameRoute(name), etag); err != nil { if r, err := c.DoApiGet(c.GetTeamByNameRoute(name), etag); err != nil {

Просмотреть файл

@@ -283,6 +283,32 @@ func (s SqlTeamStore) GetAll() StoreChannel {
return storeChannel return storeChannel
} }
func (s SqlTeamStore) GetAllPage(offset int, limit int) StoreChannel {
storeChannel := make(StoreChannel, 1)
go func() {
result := StoreResult{}
var data []*model.Team
if _, err := s.GetReplica().Select(&data, "SELECT * FROM Teams LIMIT :Limit OFFSET :Offset", map[string]interface{}{"Offset": offset, "Limit": limit}); err != nil {
result.Err = model.NewLocAppError("SqlTeamStore.GetAllTeams", "store.sql_team.get_all.app_error", nil, err.Error())
}
for _, team := range data {
if len(team.InviteId) == 0 {
team.InviteId = team.Id
}
}
result.Data = data
storeChannel <- result
close(storeChannel)
}()
return storeChannel
}
func (s SqlTeamStore) GetTeamsByUserId(userId string) StoreChannel { func (s SqlTeamStore) GetTeamsByUserId(userId string) StoreChannel {
storeChannel := make(StoreChannel, 1) storeChannel := make(StoreChannel, 1)
@@ -341,6 +367,38 @@ func (s SqlTeamStore) GetAllTeamListing() StoreChannel {
return storeChannel return storeChannel
} }
func (s SqlTeamStore) GetAllTeamPageListing(offset int, limit int) StoreChannel {
storeChannel := make(StoreChannel, 1)
go func() {
result := StoreResult{}
query := "SELECT * FROM Teams WHERE AllowOpenInvite = 1 LIMIT :Limit OFFSET :Offset"
if utils.Cfg.SqlSettings.DriverName == model.DATABASE_DRIVER_POSTGRES {
query = "SELECT * FROM Teams WHERE AllowOpenInvite = true LIMIT :Limit OFFSET :Offset"
}
var data []*model.Team
if _, err := s.GetReplica().Select(&data, query, map[string]interface{}{"Offset": offset, "Limit": limit}); err != nil {
result.Err = model.NewLocAppError("SqlTeamStore.GetAllTeamListing", "store.sql_team.get_all_team_listing.app_error", nil, err.Error())
}
for _, team := range data {
if len(team.InviteId) == 0 {
team.InviteId = team.Id
}
}
result.Data = data
storeChannel <- result
close(storeChannel)
}()
return storeChannel
}
func (s SqlTeamStore) PermanentDelete(teamId string) StoreChannel { func (s SqlTeamStore) PermanentDelete(teamId string) StoreChannel {
storeChannel := make(StoreChannel, 1) storeChannel := make(StoreChannel, 1)

Просмотреть файл

@@ -62,7 +62,9 @@ type TeamStore interface {
GetByName(name string) StoreChannel GetByName(name string) StoreChannel
SearchByName(name string) StoreChannel SearchByName(name string) StoreChannel
GetAll() StoreChannel GetAll() StoreChannel
GetAllPage(offset int, limit int) StoreChannel
GetAllTeamListing() StoreChannel GetAllTeamListing() StoreChannel
GetAllTeamPageListing(offset int, limit int) StoreChannel
GetTeamsByUserId(userId string) StoreChannel GetTeamsByUserId(userId string) StoreChannel
GetByInviteId(inviteId string) StoreChannel GetByInviteId(inviteId string) StoreChannel
PermanentDelete(teamId string) StoreChannel PermanentDelete(teamId string) StoreChannel