mirror of
https://github.com/mattermost/mattermost.git
synced 2025-02-25 18:55:24 -06:00
[MM-24665] refactor team store to use squirrel (#14549)
* Refactor team store to use squirrel * Fixing or expression * Refactor team store to use squirrel * Refactor team store to use squirrel * Refactor team store to use squirrel * Refactor team store to use squirrel * Removing shadow declaration * Fix error messages * Improving Update() and Delete() calls * Update store/sqlstore/team_store.go Using squirrel to build 'in' clause Co-authored-by: Miguel de la Cruz <mgdelacroix@gmail.com> * Add missing translation Co-authored-by: Dante Pippi <dantepippi@gmai.com> Co-authored-by: Miguel de la Cruz <mgdelacroix@gmail.com> Co-authored-by: mattermod <mattermod@users.noreply.github.com> Co-authored-by: Claudio Costa <cstcld91@gmail.com>
This commit is contained in:
@@ -4,7 +4,7 @@ go 1.14
|
||||
|
||||
require (
|
||||
github.com/jstemmer/go-junit-report v0.9.1 // indirect
|
||||
github.com/mattermost/mattermost-utilities/mmgotool v0.0.0-20200721093743-053c38dcd293 // indirect
|
||||
github.com/mattermost/mattermost-utilities/mmgotool v0.0.0-20200730135456-e2334fe87160 // indirect
|
||||
github.com/reflog/struct2interface v0.6.1 // indirect
|
||||
github.com/vektra/mockery v1.1.2 // indirect
|
||||
)
|
||||
|
||||
@@ -56,6 +56,8 @@ github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
|
||||
github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ=
|
||||
github.com/mattermost/mattermost-utilities/mmgotool v0.0.0-20200721093743-053c38dcd293 h1:N9FaqZD58xkAIJGFGY5qdKXGlY2aNMaYQ9KkVEXv8xE=
|
||||
github.com/mattermost/mattermost-utilities/mmgotool v0.0.0-20200721093743-053c38dcd293/go.mod h1:3gKozJI8n2Y/vW37GfnFWAdehGXe5yZlt+HykK6Y3DM=
|
||||
github.com/mattermost/mattermost-utilities/mmgotool v0.0.0-20200730135456-e2334fe87160 h1:+JXFDXEkbMieBt54Rihj3ppnZ/Pm1kZxkLOD0hrWFzs=
|
||||
github.com/mattermost/mattermost-utilities/mmgotool v0.0.0-20200730135456-e2334fe87160/go.mod h1:3gKozJI8n2Y/vW37GfnFWAdehGXe5yZlt+HykK6Y3DM=
|
||||
github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0=
|
||||
github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0=
|
||||
github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y=
|
||||
|
||||
@@ -7402,6 +7402,10 @@
|
||||
"id": "store.sql_team.get_all_private_team_listing.app_error",
|
||||
"translation": "We could not get all private teams."
|
||||
},
|
||||
{
|
||||
"id": "store.sql_team.get_all_private_team_page_listing.app_error",
|
||||
"translation": "We could not get all private teams in page."
|
||||
},
|
||||
{
|
||||
"id": "store.sql_team.get_all_team_listing.app_error",
|
||||
"translation": "We could not get all teams."
|
||||
|
||||
@@ -10,6 +10,7 @@ import (
|
||||
"strings"
|
||||
|
||||
sq "github.com/Masterminds/squirrel"
|
||||
|
||||
"github.com/mattermost/gorp"
|
||||
"github.com/mattermost/mattermost-server/v5/model"
|
||||
"github.com/mattermost/mattermost-server/v5/store"
|
||||
@@ -22,6 +23,8 @@ const (
|
||||
|
||||
type SqlTeamStore struct {
|
||||
SqlStore
|
||||
|
||||
teamsQuery sq.SelectBuilder
|
||||
}
|
||||
|
||||
type teamMember struct {
|
||||
@@ -200,9 +203,13 @@ func (db teamMemberWithSchemeRolesList) ToModel() []*model.TeamMember {
|
||||
|
||||
func newSqlTeamStore(sqlStore SqlStore) store.TeamStore {
|
||||
s := &SqlTeamStore{
|
||||
sqlStore,
|
||||
SqlStore: sqlStore,
|
||||
}
|
||||
|
||||
s.teamsQuery = s.getQueryBuilder().
|
||||
Select("Teams.*").
|
||||
From("Teams")
|
||||
|
||||
for _, db := range sqlStore.GetAllConns() {
|
||||
table := db.AddTableWithName(model.Team{}, "Teams").SetKeys(false, "Id")
|
||||
table.ColMap("Id").SetMaxSize(26)
|
||||
@@ -317,7 +324,11 @@ func (s SqlTeamStore) Get(id string) (*model.Team, *model.AppError) {
|
||||
func (s SqlTeamStore) GetByInviteId(inviteId string) (*model.Team, *model.AppError) {
|
||||
team := model.Team{}
|
||||
|
||||
err := s.GetReplica().SelectOne(&team, "SELECT * FROM Teams WHERE InviteId = :InviteId", map[string]interface{}{"InviteId": inviteId})
|
||||
query, args, err := s.teamsQuery.Where(sq.Eq{"InviteId": inviteId}).ToSql()
|
||||
if err != nil {
|
||||
return nil, model.NewAppError("SqlTeamStore.GetByInviteId", "store.sql.build_query.app_error", nil, err.Error(), http.StatusInternalServerError)
|
||||
}
|
||||
err = s.GetReplica().SelectOne(&team, query, args...)
|
||||
if err != nil {
|
||||
return nil, model.NewAppError("SqlTeamStore.GetByInviteId", "store.sql_team.get_by_invite_id.finding.app_error", nil, "inviteId="+inviteId+", "+err.Error(), http.StatusNotFound)
|
||||
}
|
||||
@@ -334,8 +345,11 @@ func (s SqlTeamStore) GetByInviteId(inviteId string) (*model.Team, *model.AppErr
|
||||
func (s SqlTeamStore) GetByName(name string) (*model.Team, *model.AppError) {
|
||||
|
||||
team := model.Team{}
|
||||
|
||||
err := s.GetReplica().SelectOne(&team, "SELECT * FROM Teams WHERE Name = :Name", map[string]interface{}{"Name": name})
|
||||
query, args, err := s.teamsQuery.Where(sq.Eq{"Name": name}).ToSql()
|
||||
if err != nil {
|
||||
return nil, model.NewAppError("SqlTeamStore.GetByName", "store.sql.build_query.app_error", nil, err.Error(), http.StatusInternalServerError)
|
||||
}
|
||||
err = s.GetReplica().SelectOne(&team, query, args...)
|
||||
if err != nil {
|
||||
if err == sql.ErrNoRows {
|
||||
return nil, model.NewAppError("SqlTeamStore.GetByName", "store.sql_team.get_by_name.missing.app_error", nil, "name="+name+","+err.Error(), http.StatusNotFound)
|
||||
@@ -348,18 +362,14 @@ func (s SqlTeamStore) GetByName(name string) (*model.Team, *model.AppError) {
|
||||
func (s SqlTeamStore) GetByNames(names []string) ([]*model.Team, *model.AppError) {
|
||||
uniqueNames := utils.RemoveDuplicatesFromStringArray(names)
|
||||
|
||||
query := s.getQueryBuilder().
|
||||
Select("*").
|
||||
From("Teams").
|
||||
Where(sq.Eq{"Name": uniqueNames})
|
||||
query, args, err := s.teamsQuery.Where(sq.Eq{"Name": uniqueNames}).ToSql()
|
||||
|
||||
queryString, args, err := query.ToSql()
|
||||
if err != nil {
|
||||
return nil, model.NewAppError("SqlTeamStore.GetByNames", "store.sql_team.get_by_names.app_error", nil, err.Error(), http.StatusInternalServerError)
|
||||
return nil, model.NewAppError("SqlTeamStore.GetByNames", "store.sql.build_query.app_error", nil, err.Error(), http.StatusInternalServerError)
|
||||
}
|
||||
|
||||
teams := []*model.Team{}
|
||||
_, err = s.GetReplica().Select(&teams, queryString, args...)
|
||||
_, err = s.GetReplica().Select(&teams, query, args...)
|
||||
if err != nil {
|
||||
if err == sql.ErrNoRows {
|
||||
return nil, model.NewAppError("SqlTeamStore.GetByNames", "store.sql_team.get_by_names.missing.app_error", nil, err.Error(), http.StatusNotFound)
|
||||
@@ -498,12 +508,19 @@ func (s SqlTeamStore) SearchOpen(term string) ([]*model.Team, *model.AppError) {
|
||||
|
||||
term = sanitizeSearchTerm(term, "\\")
|
||||
term = wildcardSearchTerm(term)
|
||||
operatorKeyword := "ILIKE"
|
||||
query := s.teamsQuery.Where(sq.Eq{"Type": "O", "AllowOpenInvite": true})
|
||||
if s.DriverName() == model.DATABASE_DRIVER_MYSQL {
|
||||
operatorKeyword = "LIKE"
|
||||
query = query.Where(sq.Or{sq.Like{"Name": term}, sq.Like{"DisplayName": term}})
|
||||
} else {
|
||||
query = query.Where(sq.Or{sq.ILike{"Name": term}, sq.ILike{"DisplayName": term}})
|
||||
}
|
||||
queryString := fmt.Sprintf("SELECT * FROM Teams WHERE Type = 'O' AND AllowOpenInvite = true AND (Name %[1]s :Term OR DisplayName %[1]s :Term)", operatorKeyword)
|
||||
if _, err := s.GetReplica().Select(&teams, queryString, map[string]interface{}{"Term": term}); err != nil {
|
||||
|
||||
queryString, args, err := query.ToSql()
|
||||
if err != nil {
|
||||
return nil, model.NewAppError("SqlTeamStore.SearchOpen", "store.sql.build_query.app_error", nil, err.Error(), http.StatusInternalServerError)
|
||||
}
|
||||
|
||||
if _, err = s.GetReplica().Select(&teams, queryString, args...); err != nil {
|
||||
return nil, model.NewAppError("SqlTeamStore.SearchOpen", "store.sql_team.search_open_team.app_error", nil, "term="+term+", "+err.Error(), http.StatusInternalServerError)
|
||||
}
|
||||
|
||||
@@ -517,18 +534,19 @@ func (s SqlTeamStore) SearchPrivate(term string) ([]*model.Team, *model.AppError
|
||||
|
||||
term = sanitizeSearchTerm(term, "\\")
|
||||
term = wildcardSearchTerm(term)
|
||||
operatorKeyword := "ILIKE"
|
||||
query := s.teamsQuery.Where(sq.Eq{"Type": "O", "AllowOpenInvite": false})
|
||||
if s.DriverName() == model.DATABASE_DRIVER_MYSQL {
|
||||
operatorKeyword = "LIKE"
|
||||
query = query.Where(sq.Or{sq.Like{"Name": term}, sq.Like{"DisplayName": term}})
|
||||
} else {
|
||||
query = query.Where(sq.Or{sq.ILike{"Name": term}, sq.ILike{"DisplayName": term}})
|
||||
}
|
||||
query := fmt.Sprintf(`
|
||||
SELECT *
|
||||
FROM
|
||||
Teams
|
||||
WHERE
|
||||
(Type != 'O' OR AllowOpenInvite = false) AND
|
||||
(Name %[1]s :Term OR DisplayName %[1]s :Term)`, operatorKeyword)
|
||||
if _, err := s.GetReplica().Select(&teams, query, map[string]interface{}{"Term": term}); err != nil {
|
||||
|
||||
queryString, args, err := query.ToSql()
|
||||
if err != nil {
|
||||
return nil, model.NewAppError("SqlTeamStore.SearchPrivate", "store.sql.build_query.app_error", nil, err.Error(), http.StatusInternalServerError)
|
||||
}
|
||||
|
||||
if _, err = s.GetReplica().Select(&teams, queryString, args...); err != nil {
|
||||
return nil, model.NewAppError("SqlTeamStore.SearchPrivate", "store.sql_team.search_private_team.app_error", nil, "term="+term+", "+err.Error(), http.StatusInternalServerError)
|
||||
}
|
||||
return teams, nil
|
||||
@@ -538,7 +556,13 @@ func (s SqlTeamStore) SearchPrivate(term string) ([]*model.Team, *model.AppError
|
||||
func (s SqlTeamStore) GetAll() ([]*model.Team, *model.AppError) {
|
||||
var teams []*model.Team
|
||||
|
||||
_, err := s.GetReplica().Select(&teams, "SELECT * FROM Teams ORDER BY DisplayName")
|
||||
query, args, err := s.teamsQuery.OrderBy("DisplayName").ToSql()
|
||||
|
||||
if err != nil {
|
||||
return nil, model.NewAppError("SqlTeamStore.GetAllTeams", "store.sql.build_query.app_error", nil, err.Error(), http.StatusInternalServerError)
|
||||
}
|
||||
|
||||
_, err = s.GetReplica().Select(&teams, query, args...)
|
||||
if err != nil {
|
||||
return nil, model.NewAppError("SqlTeamStore.GetAllTeams", "store.sql_team.get_all.app_error", nil, err.Error(), http.StatusInternalServerError)
|
||||
}
|
||||
@@ -549,17 +573,15 @@ func (s SqlTeamStore) GetAll() ([]*model.Team, *model.AppError) {
|
||||
func (s SqlTeamStore) GetAllPage(offset int, limit int) ([]*model.Team, *model.AppError) {
|
||||
var teams []*model.Team
|
||||
|
||||
if _, err := s.GetReplica().Select(&teams,
|
||||
`SELECT
|
||||
*
|
||||
FROM
|
||||
Teams
|
||||
ORDER BY
|
||||
DisplayName
|
||||
LIMIT
|
||||
:Limit
|
||||
OFFSET
|
||||
:Offset`, map[string]interface{}{"Offset": offset, "Limit": limit}); err != nil {
|
||||
query, args, err := s.teamsQuery.
|
||||
OrderBy("DisplayName").
|
||||
Limit(uint64(limit)).
|
||||
Offset(uint64(offset)).ToSql()
|
||||
|
||||
if err != nil {
|
||||
return nil, model.NewAppError("SqlTeamStore.GetAllTeams", "store.sql.build_query.app_error", nil, err.Error(), http.StatusInternalServerError)
|
||||
}
|
||||
if _, err = s.GetReplica().Select(&teams, query, args...); err != nil {
|
||||
return nil, model.NewAppError("SqlTeamStore.GetAllTeams",
|
||||
"store.sql_team.get_all.app_error", nil, err.Error(), http.StatusInternalServerError)
|
||||
}
|
||||
@@ -570,7 +592,15 @@ func (s SqlTeamStore) GetAllPage(offset int, limit int) ([]*model.Team, *model.A
|
||||
// GetTeamsByUserId returns from the database all teams that userId belongs to.
|
||||
func (s SqlTeamStore) GetTeamsByUserId(userId string) ([]*model.Team, *model.AppError) {
|
||||
var teams []*model.Team
|
||||
if _, err := s.GetReplica().Select(&teams, "SELECT Teams.* FROM Teams, TeamMembers WHERE TeamMembers.TeamId = Teams.Id AND TeamMembers.UserId = :UserId AND TeamMembers.DeleteAt = 0 AND Teams.DeleteAt = 0", map[string]interface{}{"UserId": userId}); err != nil {
|
||||
query, args, err := s.teamsQuery.
|
||||
Join("TeamMembers ON TeamMembers.TeamId = Teams.Id").
|
||||
Where(sq.Eq{"TeamMembers.UserId": userId, "TeamMembers.DeleteAt": 0, "Teams.DeleteAt": 0}).ToSql()
|
||||
|
||||
if err != nil {
|
||||
return nil, model.NewAppError("SqlTeamStore.GetTeamsByUserId", "store.sql.build_query.app_error", nil, err.Error(), http.StatusInternalServerError)
|
||||
}
|
||||
|
||||
if _, err = s.GetReplica().Select(&teams, query, args...); err != nil {
|
||||
return nil, model.NewAppError("SqlTeamStore.GetTeamsByUserId", "store.sql_team.get_all.app_error", nil, err.Error(), http.StatusInternalServerError)
|
||||
}
|
||||
|
||||
@@ -579,31 +609,31 @@ func (s SqlTeamStore) GetTeamsByUserId(userId string) ([]*model.Team, *model.App
|
||||
|
||||
// GetAllPrivateTeamListing returns all private teams.
|
||||
func (s SqlTeamStore) GetAllPrivateTeamListing() ([]*model.Team, *model.AppError) {
|
||||
query := "SELECT * FROM Teams WHERE AllowOpenInvite = 0 ORDER BY DisplayName"
|
||||
|
||||
if s.DriverName() == model.DATABASE_DRIVER_POSTGRES {
|
||||
query = "SELECT * FROM Teams WHERE AllowOpenInvite = false ORDER BY DisplayName"
|
||||
query, args, err := s.teamsQuery.Where(sq.Eq{"AllowOpenInvite": false}).
|
||||
OrderBy("DisplayName").ToSql()
|
||||
if err != nil {
|
||||
return nil, model.NewAppError("SqlTeamStore.GetAllPrivateTeamListing", "store.sql.build_query.app_error", nil, err.Error(), http.StatusInternalServerError)
|
||||
}
|
||||
|
||||
var data []*model.Team
|
||||
if _, err := s.GetReplica().Select(&data, query); err != nil {
|
||||
if _, err = s.GetReplica().Select(&data, query, args...); err != nil {
|
||||
return nil, model.NewAppError("SqlTeamStore.GetAllPrivateTeamListing", "store.sql_team.get_all_private_team_listing.app_error", nil, err.Error(), http.StatusInternalServerError)
|
||||
}
|
||||
|
||||
return data, nil
|
||||
}
|
||||
|
||||
// GetAllPublicTeamPageListing returns public teams, up to a total limit passed as parameter and paginated by offset number passed as parameter.
|
||||
func (s SqlTeamStore) GetAllPublicTeamPageListing(offset int, limit int) ([]*model.Team, *model.AppError) {
|
||||
query := "SELECT * FROM Teams WHERE AllowOpenInvite = 1 ORDER BY DisplayName LIMIT :Limit OFFSET :Offset"
|
||||
|
||||
if s.DriverName() == model.DATABASE_DRIVER_POSTGRES {
|
||||
query = "SELECT * FROM Teams WHERE AllowOpenInvite = true ORDER BY DisplayName LIMIT :Limit OFFSET :Offset"
|
||||
query, args, err := s.teamsQuery.Where(sq.Eq{"AllowOpenInvite": true}).
|
||||
OrderBy("DisplayName").
|
||||
Limit(uint64(limit)).
|
||||
Offset(uint64(offset)).ToSql()
|
||||
if err != nil {
|
||||
return nil, model.NewAppError("SqlTeamStore.GetAllPublicTeamPageListing", "store.sql.build_query.app_error", nil, err.Error(), http.StatusInternalServerError)
|
||||
}
|
||||
|
||||
var data []*model.Team
|
||||
if _, err := s.GetReplica().Select(&data, query, map[string]interface{}{"Offset": offset, "Limit": limit}); err != nil {
|
||||
return nil, model.NewAppError("SqlTeamStore.GetAllPrivateTeamListing", "store.sql_team.get_all_private_team_listing.app_error", nil, err.Error(), http.StatusInternalServerError)
|
||||
if _, err = s.GetReplica().Select(&data, query, args...); err != nil {
|
||||
return nil, model.NewAppError("SqlTeamStore.GetAllPublicTeamPageListing", "store.sql_team.get_all_private_team_listing.app_error", nil, err.Error(), http.StatusInternalServerError)
|
||||
}
|
||||
|
||||
return data, nil
|
||||
@@ -611,15 +641,18 @@ func (s SqlTeamStore) GetAllPublicTeamPageListing(offset int, limit int) ([]*mod
|
||||
|
||||
// GetAllPrivateTeamPageListing returns private teams, up to a total limit passed as paramater and paginated by offset number passed as parameter.
|
||||
func (s SqlTeamStore) GetAllPrivateTeamPageListing(offset int, limit int) ([]*model.Team, *model.AppError) {
|
||||
query := "SELECT * FROM Teams WHERE AllowOpenInvite = 0 ORDER BY DisplayName LIMIT :Limit OFFSET :Offset"
|
||||
query, args, err := s.teamsQuery.Where(sq.Eq{"AllowOpenInvite": false}).
|
||||
OrderBy("DisplayName").
|
||||
Limit(uint64(limit)).
|
||||
Offset(uint64(offset)).ToSql()
|
||||
|
||||
if s.DriverName() == model.DATABASE_DRIVER_POSTGRES {
|
||||
query = "SELECT * FROM Teams WHERE AllowOpenInvite = false ORDER BY DisplayName LIMIT :Limit OFFSET :Offset"
|
||||
if err != nil {
|
||||
return nil, model.NewAppError("SqlTeamStore.GetAllPrivateTeamPageListing", "store.sql.build_query.app_error", nil, err.Error(), http.StatusInternalServerError)
|
||||
}
|
||||
|
||||
var data []*model.Team
|
||||
if _, err := s.GetReplica().Select(&data, query, map[string]interface{}{"Offset": offset, "Limit": limit}); err != nil {
|
||||
return nil, model.NewAppError("SqlTeamStore.GetAllPrivateTeamListing", "store.sql_team.get_all_private_team_listing.app_error", nil, err.Error(), http.StatusInternalServerError)
|
||||
if _, err = s.GetReplica().Select(&data, query, args...); err != nil {
|
||||
return nil, model.NewAppError("SqlTeamStore.GetAllPrivateTeamPageListing", "store.sql_team.get_all_private_team_page_listing.app_error", nil, err.Error(), http.StatusInternalServerError)
|
||||
}
|
||||
|
||||
return data, nil
|
||||
@@ -627,14 +660,15 @@ func (s SqlTeamStore) GetAllPrivateTeamPageListing(offset int, limit int) ([]*mo
|
||||
|
||||
// GetAllTeamListing returns all public teams.
|
||||
func (s SqlTeamStore) GetAllTeamListing() ([]*model.Team, *model.AppError) {
|
||||
query := "SELECT * FROM Teams WHERE AllowOpenInvite = 1 ORDER BY DisplayName"
|
||||
query, args, err := s.teamsQuery.Where(sq.Eq{"AllowOpenInvite": true}).
|
||||
OrderBy("DisplayName").ToSql()
|
||||
|
||||
if s.DriverName() == model.DATABASE_DRIVER_POSTGRES {
|
||||
query = "SELECT * FROM Teams WHERE AllowOpenInvite = true ORDER BY DisplayName"
|
||||
if err != nil {
|
||||
return nil, model.NewAppError("SqlTeamStore.GetAllTeamListing", "store.sql.build_query.app_error", nil, err.Error(), http.StatusInternalServerError)
|
||||
}
|
||||
|
||||
var data []*model.Team
|
||||
if _, err := s.GetReplica().Select(&data, query); err != nil {
|
||||
if _, err = s.GetReplica().Select(&data, query, args...); err != nil {
|
||||
return nil, model.NewAppError("SqlTeamStore.GetAllTeamListing", "store.sql_team.get_all_team_listing.app_error", nil, err.Error(), http.StatusInternalServerError)
|
||||
}
|
||||
|
||||
@@ -643,15 +677,18 @@ func (s SqlTeamStore) GetAllTeamListing() ([]*model.Team, *model.AppError) {
|
||||
|
||||
// GetAllTeamPageListing returns public teams, up to a total limit passed as parameter and paginated by offset number passed as parameter.
|
||||
func (s SqlTeamStore) GetAllTeamPageListing(offset int, limit int) ([]*model.Team, *model.AppError) {
|
||||
query := "SELECT * FROM Teams WHERE AllowOpenInvite = 1 ORDER BY DisplayName LIMIT :Limit OFFSET :Offset"
|
||||
query, args, err := s.teamsQuery.Where(sq.Eq{"AllowOpenInvite": true}).
|
||||
OrderBy("DisplayName").
|
||||
Limit(uint64(limit)).
|
||||
Offset(uint64(offset)).ToSql()
|
||||
|
||||
if s.DriverName() == model.DATABASE_DRIVER_POSTGRES {
|
||||
query = "SELECT * FROM Teams WHERE AllowOpenInvite = true ORDER BY DisplayName LIMIT :Limit OFFSET :Offset"
|
||||
if err != nil {
|
||||
return nil, model.NewAppError("SqlTeamStore.GetAllTeamPageListing", "store.sql.build_query.app_error", nil, err.Error(), http.StatusInternalServerError)
|
||||
}
|
||||
|
||||
var teams []*model.Team
|
||||
if _, err := s.GetReplica().Select(&teams, query, map[string]interface{}{"Offset": offset, "Limit": limit}); err != nil {
|
||||
return nil, model.NewAppError("SqlTeamStore.GetAllTeamListing", "store.sql_team.get_all_team_listing.app_error", nil, err.Error(), http.StatusInternalServerError)
|
||||
if _, err = s.GetReplica().Select(&teams, query, args...); err != nil {
|
||||
return nil, model.NewAppError("SqlTeamStore.GetAllTeamPageListing", "store.sql_team.get_all_team_listing.app_error", nil, err.Error(), http.StatusInternalServerError)
|
||||
}
|
||||
|
||||
return teams, nil
|
||||
@@ -660,7 +697,13 @@ func (s SqlTeamStore) GetAllTeamPageListing(offset int, limit int) ([]*model.Tea
|
||||
// PermanentDelete permanently deletes from the database the team entry that matches the teamId passed as parameter.
|
||||
// To soft-delete the team you can Update it with the DeleteAt field set to the current millisecond using model.GetMillis()
|
||||
func (s SqlTeamStore) PermanentDelete(teamId string) *model.AppError {
|
||||
if _, err := s.GetMaster().Exec("DELETE FROM Teams WHERE Id = :TeamId", map[string]interface{}{"TeamId": teamId}); err != nil {
|
||||
sql, args, err := s.getQueryBuilder().
|
||||
Delete("Teams").
|
||||
Where(sq.Eq{"Id": teamId}).ToSql()
|
||||
if err != nil {
|
||||
return model.NewAppError("SqlTeamStore.Delete", "store.sql.build_query.app_error", nil, err.Error(), http.StatusInternalServerError)
|
||||
}
|
||||
if _, err = s.GetMaster().Exec(sql, args...); err != nil {
|
||||
return model.NewAppError("SqlTeamStore.Delete", "store.sql_team.permanent_delete.app_error", nil, "teamId="+teamId+", "+err.Error(), http.StatusInternalServerError)
|
||||
}
|
||||
return nil
|
||||
@@ -668,13 +711,16 @@ func (s SqlTeamStore) PermanentDelete(teamId string) *model.AppError {
|
||||
|
||||
// AnalyticsPublicTeamCount returns the number of active public teams.
|
||||
func (s SqlTeamStore) AnalyticsPublicTeamCount() (int64, *model.AppError) {
|
||||
query, args, err := s.getQueryBuilder().
|
||||
Select("COUNT(*) FROM Teams").
|
||||
Where(sq.Eq{"DeleteAt": 0, "AllowOpenInvite": true}).ToSql()
|
||||
|
||||
c, err := s.GetReplica().SelectInt("SELECT COUNT(*) FROM Teams WHERE DeleteAt = 0 AND AllowOpenInvite = 1", map[string]interface{}{})
|
||||
|
||||
if s.DriverName() == model.DATABASE_DRIVER_POSTGRES {
|
||||
c, err = s.GetReplica().SelectInt("SELECT COUNT(*) FROM Teams WHERE DeleteAt = 0 AND AllowOpenInvite = true", map[string]interface{}{})
|
||||
if err != nil {
|
||||
return 0, model.NewAppError("SqlTeamStore.AnalyticsPublicTeamCount", "store.sql.build_query.app_error", nil, err.Error(), http.StatusInternalServerError)
|
||||
}
|
||||
|
||||
c, err := s.GetReplica().SelectInt(query, args...)
|
||||
|
||||
if err != nil {
|
||||
return int64(0), model.NewAppError("SqlTeamStore.AnalyticsPublicTeamCount", "store.sql_team.analytics_public_team_count.app_error", nil, err.Error(), http.StatusInternalServerError)
|
||||
}
|
||||
@@ -684,11 +730,14 @@ func (s SqlTeamStore) AnalyticsPublicTeamCount() (int64, *model.AppError) {
|
||||
|
||||
// AnalyticsPrivateTeamCount returns the number of active private teams.
|
||||
func (s SqlTeamStore) AnalyticsPrivateTeamCount() (int64, *model.AppError) {
|
||||
c, err := s.GetReplica().SelectInt("SELECT COUNT(*) FROM Teams WHERE DeleteAt = 0 AND AllowOpenInvite = 0", map[string]interface{}{})
|
||||
query, args, err := s.getQueryBuilder().
|
||||
Select("COUNT(*) FROM Teams").
|
||||
Where(sq.Eq{"DeleteAt": 0, "AllowOpenInvite": false}).ToSql()
|
||||
|
||||
if s.DriverName() == model.DATABASE_DRIVER_POSTGRES {
|
||||
c, err = s.GetReplica().SelectInt("SELECT COUNT(*) FROM Teams WHERE DeleteAt = 0 AND AllowOpenInvite = false", map[string]interface{}{})
|
||||
if err != nil {
|
||||
return 0, model.NewAppError("SqlTeamStore.AnalyticsPrivateTeamCount", "store.sql.build_query.app_error", nil, err.Error(), http.StatusInternalServerError)
|
||||
}
|
||||
c, err := s.GetReplica().SelectInt(query, args...)
|
||||
|
||||
if err != nil {
|
||||
return int64(0), model.NewAppError("SqlTeamStore.AnalyticsPrivateTeamCount", "store.sql_team.analytics_private_team_count.app_error", nil, err.Error(), http.StatusInternalServerError)
|
||||
@@ -706,7 +755,7 @@ func (s SqlTeamStore) AnalyticsTeamCount(includeDeleted bool) (int64, *model.App
|
||||
|
||||
queryString, args, err := query.ToSql()
|
||||
if err != nil {
|
||||
return 0, model.NewAppError("SqlTeamStore.AnalyticsTeamCount", "store.sql_team.analytics_team_count.app_error", nil, err.Error(), http.StatusInternalServerError)
|
||||
return 0, model.NewAppError("SqlTeamStore.AnalyticsTeamCount", "store.sql.build_query.app_error", nil, err.Error(), http.StatusInternalServerError)
|
||||
}
|
||||
|
||||
c, err := s.GetReplica().SelectInt(queryString, args...)
|
||||
@@ -772,7 +821,7 @@ func (s SqlTeamStore) SaveMultipleMembers(members []*model.TeamMember, maxUsersP
|
||||
|
||||
sqlRolesQuery, argsRoles, err := queryRoles.ToSql()
|
||||
if err != nil {
|
||||
return nil, model.NewAppError("SqlUserStore.Save", "store.sql_user.save.member_count.app_error", nil, err.Error(), http.StatusInternalServerError)
|
||||
return nil, model.NewAppError("SqlUserStore.Save", "store.sql.build_query.app_error", nil, err.Error(), http.StatusInternalServerError)
|
||||
}
|
||||
var defaultTeamsRoles []struct {
|
||||
Id string
|
||||
@@ -803,7 +852,7 @@ func (s SqlTeamStore) SaveMultipleMembers(members []*model.TeamMember, maxUsersP
|
||||
|
||||
sqlCountQuery, argsCount, errCount := queryCount.ToSql()
|
||||
if errCount != nil {
|
||||
return nil, model.NewAppError("SqlUserStore.Save", "store.sql_user.save.member_count.app_error", nil, errCount.Error(), http.StatusInternalServerError)
|
||||
return nil, model.NewAppError("SqlUserStore.Save", "store.sql.build_query.app_error", nil, errCount.Error(), http.StatusInternalServerError)
|
||||
}
|
||||
|
||||
var counters []struct {
|
||||
@@ -836,10 +885,10 @@ func (s SqlTeamStore) SaveMultipleMembers(members []*model.TeamMember, maxUsersP
|
||||
|
||||
sql, args, err := query.ToSql()
|
||||
if err != nil {
|
||||
return nil, model.NewAppError("SqlTeamStore.SaveMember", "store.sql_team.save_member.save.app_error", nil, err.Error(), http.StatusInternalServerError)
|
||||
return nil, model.NewAppError("SqlTeamStore.SaveMember", "store.sql.build_query.app_error", nil, err.Error(), http.StatusInternalServerError)
|
||||
}
|
||||
|
||||
if _, err := s.GetMaster().Exec(sql, args...); err != nil {
|
||||
if _, err = s.GetMaster().Exec(sql, args...); err != nil {
|
||||
if IsUniqueConstraintError(err, []string{"TeamId", "teammembers_pkey", "PRIMARY"}) {
|
||||
return nil, model.NewAppError("SqlTeamStore.SaveMember", TEAM_MEMBER_EXISTS_ERROR, nil, err.Error(), http.StatusBadRequest)
|
||||
}
|
||||
@@ -901,7 +950,7 @@ func (s SqlTeamStore) UpdateMultipleMembers(members []*model.TeamMember) ([]*mod
|
||||
|
||||
sqlQuery, args, err := query.ToSql()
|
||||
if err != nil {
|
||||
return nil, model.NewAppError("SqlUserStore.Save", "store.sql_user.save.member_count.app_error", nil, err.Error(), http.StatusInternalServerError)
|
||||
return nil, model.NewAppError("SqlUserStore.Save", "store.sql.build_query.app_error", nil, err.Error(), http.StatusInternalServerError)
|
||||
}
|
||||
var defaultTeamsRoles []struct {
|
||||
Id string
|
||||
@@ -958,7 +1007,7 @@ func (s SqlTeamStore) GetMember(teamId string, userId string) (*model.TeamMember
|
||||
|
||||
queryString, args, err := query.ToSql()
|
||||
if err != nil {
|
||||
return nil, model.NewAppError("SqlTeamStore.GetMember", "store.sql_team.get_member.app_error", nil, err.Error(), http.StatusInternalServerError)
|
||||
return nil, model.NewAppError("SqlTeamStore.GetMember", "store.sql.build_query.app_error", nil, err.Error(), http.StatusInternalServerError)
|
||||
}
|
||||
|
||||
var dbMember teamMemberWithSchemeRoles
|
||||
@@ -1002,7 +1051,7 @@ func (s SqlTeamStore) GetMembers(teamId string, offset int, limit int, teamMembe
|
||||
|
||||
queryString, args, err := query.ToSql()
|
||||
if err != nil {
|
||||
return nil, model.NewAppError("SqlTeamStore.GetMembers", "store.sql_team.get_members.app_error", nil, err.Error(), http.StatusInternalServerError)
|
||||
return nil, model.NewAppError("SqlTeamStore.GetMembers", "store.sql.build_query.app_error", nil, err.Error(), http.StatusInternalServerError)
|
||||
}
|
||||
|
||||
var dbMembers teamMemberWithSchemeRolesList
|
||||
@@ -1025,7 +1074,7 @@ func (s SqlTeamStore) GetTotalMemberCount(teamId string, restrictions *model.Vie
|
||||
query = applyTeamMemberViewRestrictionsFilterForStats(query, teamId, restrictions)
|
||||
queryString, args, err := query.ToSql()
|
||||
if err != nil {
|
||||
return int64(0), model.NewAppError("SqlTeamStore.GetTotalMemberCount", "store.sql_team.get_member_count.app_error", nil, err.Error(), http.StatusInternalServerError)
|
||||
return int64(0), model.NewAppError("SqlTeamStore.GetTotalMemberCount", "store.sql.build_query.app_error", nil, err.Error(), http.StatusInternalServerError)
|
||||
}
|
||||
|
||||
count, err := s.GetReplica().SelectInt(queryString, args...)
|
||||
@@ -1047,7 +1096,7 @@ func (s SqlTeamStore) GetActiveMemberCount(teamId string, restrictions *model.Vi
|
||||
query = applyTeamMemberViewRestrictionsFilterForStats(query, teamId, restrictions)
|
||||
queryString, args, err := query.ToSql()
|
||||
if err != nil {
|
||||
return 0, model.NewAppError("SqlTeamStore.GetActiveMemberCount", "store.sql_team.get_active_member_count.app_error", nil, err.Error(), http.StatusInternalServerError)
|
||||
return 0, model.NewAppError("SqlTeamStore.GetActiveMemberCount", "store.sql.build_query.app_error", nil, err.Error(), http.StatusInternalServerError)
|
||||
}
|
||||
|
||||
count, err := s.GetReplica().SelectInt(queryString, args...)
|
||||
@@ -1072,11 +1121,11 @@ func (s SqlTeamStore) GetMembersByIds(teamId string, userIds []string, restricti
|
||||
|
||||
queryString, args, err := query.ToSql()
|
||||
if err != nil {
|
||||
return nil, model.NewAppError("SqlTeamStore.GetMembersByIds", "store.sql_team.get_members_by_ids.app_error", nil, err.Error(), http.StatusInternalServerError)
|
||||
return nil, model.NewAppError("SqlTeamStore.GetMembersByIds", "store.sql.build_query.app_error", nil, err.Error(), http.StatusInternalServerError)
|
||||
}
|
||||
|
||||
var dbMembers teamMemberWithSchemeRolesList
|
||||
if _, err := s.GetReplica().Select(&dbMembers, queryString, args...); err != nil {
|
||||
if _, err = s.GetReplica().Select(&dbMembers, queryString, args...); err != nil {
|
||||
return nil, model.NewAppError("SqlTeamStore.GetMembersByIds", "store.sql_team.get_members_by_ids.app_error", nil, "teamId="+teamId+" "+err.Error(), http.StatusInternalServerError)
|
||||
}
|
||||
return dbMembers.ToModel(), nil
|
||||
@@ -1088,7 +1137,7 @@ func (s SqlTeamStore) GetTeamsForUser(userId string) ([]*model.TeamMember, *mode
|
||||
|
||||
queryString, args, err := query.ToSql()
|
||||
if err != nil {
|
||||
return nil, model.NewAppError("SqlTeamStore.GetMembers", "store.sql_team.get_members.app_error", nil, err.Error(), http.StatusInternalServerError)
|
||||
return nil, model.NewAppError("SqlTeamStore.GetMembers", "store.sql.build_query.app_error", nil, err.Error(), http.StatusInternalServerError)
|
||||
}
|
||||
|
||||
var dbMembers teamMemberWithSchemeRolesList
|
||||
@@ -1108,7 +1157,7 @@ func (s SqlTeamStore) GetTeamsForUserWithPagination(userId string, page, perPage
|
||||
|
||||
queryString, args, err := query.ToSql()
|
||||
if err != nil {
|
||||
return nil, model.NewAppError("SqlTeamStore.GetTeamsForUserWithPagination", "store.sql_team.get_members.app_error", nil, err.Error(), http.StatusInternalServerError)
|
||||
return nil, model.NewAppError("SqlTeamStore.GetTeamsForUserWithPagination", "store.sql.build_query.app_error", nil, err.Error(), http.StatusInternalServerError)
|
||||
}
|
||||
|
||||
var dbMembers teamMemberWithSchemeRolesList
|
||||
@@ -1121,18 +1170,18 @@ func (s SqlTeamStore) GetTeamsForUserWithPagination(userId string, page, perPage
|
||||
}
|
||||
|
||||
func (s SqlTeamStore) GetChannelUnreadsForAllTeams(excludeTeamId, userId string) ([]*model.ChannelUnread, *model.AppError) {
|
||||
query, args, err := s.getQueryBuilder().
|
||||
Select("Channels.TeamId TeamId", "Channels.Id ChannelId", "(Channels.TotalMsgCount - ChannelMembers.MsgCount) MsgCount", "ChannelMembers.MentionCount MentionCount", "ChannelMembers.NotifyProps NotifyProps").
|
||||
From("Channels").
|
||||
Join("ChannelMembers ON Id = ChannelId").
|
||||
Where(sq.Eq{"UserId": userId, "DeleteAt": 0}).
|
||||
Where(sq.NotEq{"TeamId": excludeTeamId}).ToSql()
|
||||
|
||||
if err != nil {
|
||||
return nil, model.NewAppError("SqlTeamStore.GetChannelUnreadsForAllTeams", "store.sql.build_query.app_error", nil, err.Error(), http.StatusInternalServerError)
|
||||
}
|
||||
var data []*model.ChannelUnread
|
||||
_, err := s.GetReplica().Select(&data,
|
||||
`SELECT
|
||||
Channels.TeamId TeamId, Channels.Id ChannelId, (Channels.TotalMsgCount - ChannelMembers.MsgCount) MsgCount, ChannelMembers.MentionCount MentionCount, ChannelMembers.NotifyProps NotifyProps
|
||||
FROM
|
||||
Channels, ChannelMembers
|
||||
WHERE
|
||||
Id = ChannelId
|
||||
AND UserId = :UserId
|
||||
AND DeleteAt = 0
|
||||
AND TeamId != :TeamId`,
|
||||
map[string]interface{}{"UserId": userId, "TeamId": excludeTeamId})
|
||||
_, err = s.GetReplica().Select(&data, query, args...)
|
||||
|
||||
if err != nil {
|
||||
return nil, model.NewAppError("SqlTeamStore.GetChannelUnreadsForAllTeams", "store.sql_team.get_unread.app_error", nil, "userId="+userId+" "+err.Error(), http.StatusInternalServerError)
|
||||
@@ -1142,19 +1191,18 @@ func (s SqlTeamStore) GetChannelUnreadsForAllTeams(excludeTeamId, userId string)
|
||||
}
|
||||
|
||||
func (s SqlTeamStore) GetChannelUnreadsForTeam(teamId, userId string) ([]*model.ChannelUnread, *model.AppError) {
|
||||
query := `
|
||||
SELECT
|
||||
Channels.TeamId TeamId, Channels.Id ChannelId, (Channels.TotalMsgCount - ChannelMembers.MsgCount) MsgCount, ChannelMembers.MentionCount MentionCount, ChannelMembers.NotifyProps NotifyProps
|
||||
FROM
|
||||
Channels, ChannelMembers
|
||||
WHERE
|
||||
Id = ChannelId
|
||||
AND UserId = :UserId
|
||||
AND TeamId = :TeamId
|
||||
AND DeleteAt = 0`
|
||||
query, args, err := s.getQueryBuilder().
|
||||
Select("Channels.TeamId TeamId", "Channels.Id ChannelId", "(Channels.TotalMsgCount - ChannelMembers.MsgCount) MsgCount", "ChannelMembers.MentionCount MentionCount", "ChannelMembers.NotifyProps NotifyProps").
|
||||
From("Channels").
|
||||
Join("ChannelMembers ON Id = ChannelId").
|
||||
Where(sq.Eq{"UserId": userId, "TeamId": teamId, "DeleteAt": 0}).ToSql()
|
||||
|
||||
if err != nil {
|
||||
return nil, model.NewAppError("SqlTeamStore.GetChannelUnreadsForTeam", "store.sql.build_query.app_error", nil, err.Error(), http.StatusInternalServerError)
|
||||
}
|
||||
|
||||
var channels []*model.ChannelUnread
|
||||
_, err := s.GetReplica().Select(&channels, query, map[string]interface{}{"TeamId": teamId, "UserId": userId})
|
||||
_, err = s.GetReplica().Select(&channels, query, args...)
|
||||
|
||||
if err != nil {
|
||||
return nil, model.NewAppError("SqlTeamStore.GetChannelUnreadsForTeam", "store.sql_team.get_unread.app_error", nil, "teamId="+teamId+" "+err.Error(), http.StatusInternalServerError)
|
||||
@@ -1170,7 +1218,7 @@ func (s SqlTeamStore) RemoveMembers(teamId string, userIds []string) *model.AppE
|
||||
|
||||
sql, args, err := query.ToSql()
|
||||
if err != nil {
|
||||
return model.NewAppError("SqlTeamStore.RemoveMembers", "store.sql_team.remove_member.app_error", nil, "team_id="+teamId+", "+err.Error(), http.StatusInternalServerError)
|
||||
return model.NewAppError("SqlTeamStore.RemoveMembers", "store.sql.build_query.app_error", nil, "team_id="+teamId+", "+err.Error(), http.StatusInternalServerError)
|
||||
}
|
||||
_, err = s.GetMaster().Exec(sql, args...)
|
||||
if err != nil {
|
||||
@@ -1186,7 +1234,14 @@ func (s SqlTeamStore) RemoveMember(teamId string, userId string) *model.AppError
|
||||
|
||||
// RemoveAllMembersByTeam removes from the database the team members that belong to the teamId passed as parameter.
|
||||
func (s SqlTeamStore) RemoveAllMembersByTeam(teamId string) *model.AppError {
|
||||
_, err := s.GetMaster().Exec("DELETE FROM TeamMembers WHERE TeamId = :TeamId", map[string]interface{}{"TeamId": teamId})
|
||||
sql, args, err := s.getQueryBuilder().
|
||||
Delete("TeamMembers").
|
||||
Where(sq.Eq{"TeamId": teamId}).ToSql()
|
||||
if err != nil {
|
||||
return model.NewAppError("SqlTeamStore.RemoveMembers", "store.sql.build_query.app_error", nil, "team_id="+teamId+", "+err.Error(), http.StatusInternalServerError)
|
||||
}
|
||||
|
||||
_, err = s.GetMaster().Exec(sql, args...)
|
||||
if err != nil {
|
||||
return model.NewAppError("SqlTeamStore.RemoveMember", "store.sql_team.remove_member.app_error", nil, "team_id="+teamId+", "+err.Error(), http.StatusInternalServerError)
|
||||
}
|
||||
@@ -1195,7 +1250,13 @@ func (s SqlTeamStore) RemoveAllMembersByTeam(teamId string) *model.AppError {
|
||||
|
||||
// RemoveAllMembersByUser removes from the database the team members that match the userId passed as parameter.
|
||||
func (s SqlTeamStore) RemoveAllMembersByUser(userId string) *model.AppError {
|
||||
_, err := s.GetMaster().Exec("DELETE FROM TeamMembers WHERE UserId = :UserId", map[string]interface{}{"UserId": userId})
|
||||
sql, args, err := s.getQueryBuilder().
|
||||
Delete("TeamMembers").
|
||||
Where(sq.Eq{"UserId": userId}).ToSql()
|
||||
if err != nil {
|
||||
return model.NewAppError("SqlTeamStore.RemoveMembers", "store.sql.build_query.app_error", nil, "team_id="+userId+", "+err.Error(), http.StatusInternalServerError)
|
||||
}
|
||||
_, err = s.GetMaster().Exec(sql, args...)
|
||||
if err != nil {
|
||||
return model.NewAppError("SqlTeamStore.RemoveMember", "store.sql_team.remove_member.app_error", nil, "user_id="+userId+", "+err.Error(), http.StatusInternalServerError)
|
||||
}
|
||||
@@ -1203,7 +1264,15 @@ func (s SqlTeamStore) RemoveAllMembersByUser(userId string) *model.AppError {
|
||||
}
|
||||
|
||||
func (s SqlTeamStore) UpdateLastTeamIconUpdate(teamId string, curTime int64) *model.AppError {
|
||||
if _, err := s.GetMaster().Exec("UPDATE Teams SET LastTeamIconUpdate = :Time, UpdateAt = :Time WHERE Id = :teamId", map[string]interface{}{"Time": curTime, "teamId": teamId}); err != nil {
|
||||
sql, args, err := s.getQueryBuilder().
|
||||
Update("Teams").
|
||||
SetMap(sq.Eq{"LastTeamIconUpdate": curTime, "UpdateAt": curTime}).
|
||||
Where(sq.Eq{"Id": teamId}).ToSql()
|
||||
if err != nil {
|
||||
return model.NewAppError("SqlTeamStore.UpdateLastTeamIconUpdate", "store.sql.build_query.app_error", nil, err.Error(), http.StatusInternalServerError)
|
||||
}
|
||||
|
||||
if _, err = s.GetMaster().Exec(sql, args...); err != nil {
|
||||
return model.NewAppError("SqlTeamStore.UpdateLastTeamIconUpdate", "store.sql_team.update_last_team_icon_update.app_error", nil, "team_id="+teamId, http.StatusInternalServerError)
|
||||
}
|
||||
return nil
|
||||
@@ -1212,8 +1281,17 @@ func (s SqlTeamStore) UpdateLastTeamIconUpdate(teamId string, curTime int64) *mo
|
||||
// GetTeamsByScheme returns from the database all teams that match the schemeId provided as parameter, up to
|
||||
// a total limit passed as paramater and paginated by offset number passed as parameter.
|
||||
func (s SqlTeamStore) GetTeamsByScheme(schemeId string, offset int, limit int) ([]*model.Team, *model.AppError) {
|
||||
query, args, err := s.teamsQuery.Where(sq.Eq{"SchemeId": schemeId}).
|
||||
OrderBy("DisplayName").
|
||||
Limit(uint64(limit)).
|
||||
Offset(uint64(offset)).ToSql()
|
||||
|
||||
if err != nil {
|
||||
return nil, model.NewAppError("SqlTeamStore.GetTeamsByScheme", "store.sql.build_query.app_error", nil, err.Error(), http.StatusInternalServerError)
|
||||
}
|
||||
|
||||
var teams []*model.Team
|
||||
_, err := s.GetReplica().Select(&teams, "SELECT * FROM Teams WHERE SchemeId = :SchemeId ORDER BY DisplayName LIMIT :Limit OFFSET :Offset", map[string]interface{}{"SchemeId": schemeId, "Offset": offset, "Limit": limit})
|
||||
_, err = s.GetReplica().Select(&teams, query, args...)
|
||||
if err != nil {
|
||||
return nil, model.NewAppError("SqlTeamStore.GetTeamsByScheme", "store.sql_team.get_by_scheme.app_error", nil, "schemeId="+schemeId+" "+err.Error(), http.StatusInternalServerError)
|
||||
}
|
||||
@@ -1353,7 +1431,15 @@ func (s SqlTeamStore) ClearAllCustomRoleAssignments() *model.AppError {
|
||||
|
||||
// AnalyticsGetTeamCountForScheme returns the number of active teams that match the schemeId passed as parameter.
|
||||
func (s SqlTeamStore) AnalyticsGetTeamCountForScheme(schemeId string) (int64, *model.AppError) {
|
||||
count, err := s.GetReplica().SelectInt("SELECT count(*) FROM Teams WHERE SchemeId = :SchemeId AND DeleteAt = 0", map[string]interface{}{"SchemeId": schemeId})
|
||||
query, args, err := s.getQueryBuilder().
|
||||
Select("count(*)").
|
||||
From("Teams").
|
||||
Where(sq.Eq{"SchemeId": schemeId, "DeleteAt": 0}).ToSql()
|
||||
|
||||
if err != nil {
|
||||
return 0, model.NewAppError("SqlTeamStore.AnalyticsGetTeamCountForScheme", "store.sql.build_query.app_error", nil, err.Error(), http.StatusInternalServerError)
|
||||
}
|
||||
count, err := s.GetReplica().SelectInt(query, args...)
|
||||
if err != nil {
|
||||
return 0, model.NewAppError("SqlTeamStore.AnalyticsGetTeamCountForScheme", "store.sql_team.analytics_get_team_count_for_scheme.app_error", nil, "schemeId="+schemeId+" "+err.Error(), http.StatusInternalServerError)
|
||||
}
|
||||
@@ -1364,21 +1450,18 @@ func (s SqlTeamStore) AnalyticsGetTeamCountForScheme(schemeId string) (int64, *m
|
||||
// GetAllForExportAfter returns teams for export, up to a total limit passed as paramater where Teams.Id is greater than the afterId passed as parameter.
|
||||
func (s SqlTeamStore) GetAllForExportAfter(limit int, afterId string) ([]*model.TeamForExport, *model.AppError) {
|
||||
var data []*model.TeamForExport
|
||||
if _, err := s.GetReplica().Select(&data, `
|
||||
SELECT
|
||||
Teams.*,
|
||||
Schemes.Name as SchemeName
|
||||
FROM
|
||||
Teams
|
||||
LEFT JOIN
|
||||
Schemes ON Teams.SchemeId = Schemes.Id
|
||||
WHERE
|
||||
Teams.Id > :AfterId
|
||||
ORDER BY
|
||||
Id
|
||||
LIMIT
|
||||
:Limit`,
|
||||
map[string]interface{}{"AfterId": afterId, "Limit": limit}); err != nil {
|
||||
query, args, err := s.getQueryBuilder().
|
||||
Select("Teams.*", "Schemes.Name as SchemeName").
|
||||
From("Teams").
|
||||
LeftJoin("Schemes ON Teams.SchemeId = Schemes.Id").
|
||||
Where(sq.Gt{"Teams.Id": afterId}).
|
||||
OrderBy("Id").
|
||||
Limit(uint64(limit)).ToSql()
|
||||
|
||||
if err != nil {
|
||||
return nil, model.NewAppError("SqlTeamStore.GetAllTeams", "store.sql.build_query.app_error", nil, err.Error(), http.StatusInternalServerError)
|
||||
}
|
||||
if _, err = s.GetReplica().Select(&data, query, args...); err != nil {
|
||||
return nil, model.NewAppError("SqlTeamStore.GetAllTeams", "store.sql_team.get_all.app_error", nil, err.Error(), http.StatusInternalServerError)
|
||||
}
|
||||
|
||||
@@ -1388,18 +1471,16 @@ func (s SqlTeamStore) GetAllForExportAfter(limit int, afterId string) ([]*model.
|
||||
// GetUserTeamIds get the team ids to which the user belongs to. allowFromCache parameter does not have any effect in this Store
|
||||
func (s SqlTeamStore) GetUserTeamIds(userID string, allowFromCache bool) ([]string, *model.AppError) {
|
||||
var teamIds []string
|
||||
_, err := s.GetReplica().Select(&teamIds,
|
||||
`SELECT
|
||||
TeamId
|
||||
FROM
|
||||
TeamMembers
|
||||
INNER JOIN
|
||||
Teams ON TeamMembers.TeamId = Teams.Id
|
||||
WHERE
|
||||
TeamMembers.UserId = :UserId
|
||||
AND TeamMembers.DeleteAt = 0
|
||||
AND Teams.DeleteAt = 0`,
|
||||
map[string]interface{}{"UserId": userID})
|
||||
query, args, err := s.getQueryBuilder().
|
||||
Select("TeamId").
|
||||
From("TeamMembers").
|
||||
Join("Teams ON TeamMembers.TeamId = Teams.Id").
|
||||
Where(sq.Eq{"TeamMembers.UserId": userID, "TeamMembers.DeleteAt": 0, "Teams.DeleteAt": 0}).ToSql()
|
||||
|
||||
if err != nil {
|
||||
return []string{}, model.NewAppError("SqlTeamStore.GetUserTeamIds", "store.sql.build_query.app_error", nil, err.Error(), http.StatusInternalServerError)
|
||||
}
|
||||
_, err = s.GetReplica().Select(&teamIds, query, args...)
|
||||
if err != nil {
|
||||
return []string{}, model.NewAppError("SqlTeamStore.GetUserTeamIds", "store.sql_team.get_user_team_ids.app_error", nil, "userID="+userID+" "+err.Error(), http.StatusInternalServerError)
|
||||
}
|
||||
@@ -1409,24 +1490,18 @@ func (s SqlTeamStore) GetUserTeamIds(userID string, allowFromCache bool) ([]stri
|
||||
|
||||
func (s SqlTeamStore) GetTeamMembersForExport(userId string) ([]*model.TeamMemberForExport, *model.AppError) {
|
||||
var members []*model.TeamMemberForExport
|
||||
_, err := s.GetReplica().Select(&members, `
|
||||
SELECT
|
||||
TeamMembers.TeamId,
|
||||
TeamMembers.UserId,
|
||||
TeamMembers.Roles,
|
||||
TeamMembers.DeleteAt,
|
||||
(TeamMembers.SchemeGuest IS NOT NULL AND TeamMembers.SchemeGuest) as SchemeGuest,
|
||||
TeamMembers.SchemeUser,
|
||||
TeamMembers.SchemeAdmin,
|
||||
Teams.Name as TeamName
|
||||
FROM
|
||||
TeamMembers
|
||||
INNER JOIN
|
||||
Teams ON TeamMembers.TeamId = Teams.Id
|
||||
WHERE
|
||||
TeamMembers.UserId = :UserId
|
||||
AND Teams.DeleteAt = 0`,
|
||||
map[string]interface{}{"UserId": userId})
|
||||
query, args, err := s.getQueryBuilder().
|
||||
Select("TeamMembers.TeamId", "TeamMembers.UserId", "TeamMembers.Roles", "TeamMembers.DeleteAt",
|
||||
"(TeamMembers.SchemeGuest IS NOT NULL AND TeamMembers.SchemeGuest) as SchemeGuest",
|
||||
"TeamMembers.SchemeUser", "TeamMembers.SchemeAdmin", "Teams.Name as TeamName").
|
||||
From("TeamMembers").
|
||||
Join("Teams ON TeamMembers.TeamId = Teams.Id").
|
||||
Where(sq.Eq{"TeamMembers.UserId": userId, "Teams.DeleteAt": 0}).ToSql()
|
||||
|
||||
if err != nil {
|
||||
return nil, model.NewAppError("SqlTeamStore.GetTeamMembersForExport", "store.sql.build_query.app_error", nil, err.Error(), http.StatusInternalServerError)
|
||||
}
|
||||
_, err = s.GetReplica().Select(&members, query, args...)
|
||||
if err != nil {
|
||||
return nil, model.NewAppError("SqlTeamStore.GetTeamMembersForExport", "store.sql_team.get_members.app_error", nil, "userId="+userId+" "+err.Error(), http.StatusInternalServerError)
|
||||
}
|
||||
@@ -1442,7 +1517,7 @@ func (s SqlTeamStore) UserBelongsToTeams(userId string, teamIds []string) (bool,
|
||||
|
||||
query, params, err := s.getQueryBuilder().Select("Count(*)").From("TeamMembers").Where(idQuery).ToSql()
|
||||
if err != nil {
|
||||
return false, model.NewAppError("SqlTeamStore.UserBelongsToTeams", "store.sql_team.user_belongs_to_teams.app_error", nil, err.Error(), http.StatusInternalServerError)
|
||||
return false, model.NewAppError("SqlTeamStore.UserBelongsToTeams", "store.sql.build_query.app_error", nil, err.Error(), http.StatusInternalServerError)
|
||||
}
|
||||
|
||||
c, err := s.GetReplica().SelectInt(query, params...)
|
||||
@@ -1454,21 +1529,15 @@ func (s SqlTeamStore) UserBelongsToTeams(userId string, teamIds []string) (bool,
|
||||
}
|
||||
|
||||
func (s SqlTeamStore) UpdateMembersRole(teamID string, userIDs []string) *model.AppError {
|
||||
sql := fmt.Sprintf(`
|
||||
UPDATE
|
||||
TeamMembers
|
||||
SET
|
||||
SchemeAdmin = CASE WHEN UserId IN ('%s') THEN
|
||||
TRUE
|
||||
ELSE
|
||||
FALSE
|
||||
END
|
||||
WHERE
|
||||
TeamId = :TeamId
|
||||
AND (SchemeGuest = false OR SchemeGuest IS NULL)
|
||||
AND DeleteAt = 0`, strings.Join(userIDs, "', '"))
|
||||
|
||||
if _, err := s.GetMaster().Exec(sql, map[string]interface{}{"TeamId": teamID}); err != nil {
|
||||
sql, args, err := s.getQueryBuilder().
|
||||
Update("TeamMembers").
|
||||
Set("SchemeAdmin", sq.Case().When(sq.Eq{"UserId": userIDs}, "true").Else("false")).
|
||||
Where(sq.Eq{"TeamId": teamID, "DeleteAt": 0}).
|
||||
Where(sq.Or{sq.Eq{"SchemeGuest": false}, sq.Expr("SchemeGuest IS NULL")}).ToSql()
|
||||
if err != nil {
|
||||
return model.NewAppError("SqlTeamStore.UpdateMembersRole", "store.sql.build_query.app_error", nil, err.Error(), http.StatusInternalServerError)
|
||||
}
|
||||
if _, err = s.GetMaster().Exec(sql, args...); err != nil {
|
||||
return model.NewAppError("SqlTeamStore.UpdateMembersRole", "store.update_error", nil, err.Error(), http.StatusInternalServerError)
|
||||
}
|
||||
|
||||
@@ -1540,7 +1609,7 @@ func (s SqlTeamStore) GroupSyncedTeamCount() (int64, *model.AppError) {
|
||||
|
||||
sql, args, err := query.ToSql()
|
||||
if err != nil {
|
||||
return 0, model.NewAppError("SqlTeamStore.GroupSyncedTeamCount", "store.sql_group.app_error", nil, err.Error(), http.StatusInternalServerError)
|
||||
return 0, model.NewAppError("SqlTeamStore.GroupSyncedTeamCount", "store.sql.build_query.app_error", nil, err.Error(), http.StatusInternalServerError)
|
||||
}
|
||||
|
||||
count, err := s.GetReplica().SelectInt(sql, args...)
|
||||
|
||||
Reference in New Issue
Block a user