[MM-63933] Don't include channels from an archived team unless specified in GetChannelsForUser (#31163)

* [MM-63933] Don't include channels from an archived team unless specified in GetChannelsForUser

* PR feedback

---------

Co-authored-by: Mattermost Build <build@mattermost.com>
Этот коммит содержится в:
Devin Binnie
2025-05-29 09:35:38 -04:00
коммит произвёл GitHub
родитель 293f38ad0b
Коммит e1c0c57d31
2 изменённых файлов: 49 добавлений и 16 удалений

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

@@ -1136,17 +1136,18 @@ func (s SqlChannelStore) GetChannels(teamId string, userId string, opts *model.C
func (s SqlChannelStore) GetChannelsByUser(userId string, includeDeleted bool, lastDeleteAt, pageSize int, fromChannelID string) (model.ChannelList, error) {
query := s.getQueryBuilder().
Select(channelSliceColumns(true, "Channels")...).
From("Channels, ChannelMembers").
From("Channels, ChannelMembers, Teams").
Where(
sq.And{
sq.Expr("Id = ChannelId"),
sq.Eq{"UserId": userId},
sq.Expr("Channels.Id = ChannelMembers.ChannelId"),
sq.Expr("Channels.TeamId = Teams.Id"),
sq.Eq{"ChannelMembers.UserId": userId},
},
).
OrderBy("Id ASC")
OrderBy("Channels.Id ASC")
if fromChannelID != "" {
query = query.Where(sq.Gt{"Id": fromChannelID})
query = query.Where(sq.Gt{"Channels.Id": fromChannelID})
}
if pageSize != -1 {
@@ -1156,15 +1157,24 @@ func (s SqlChannelStore) GetChannelsByUser(userId string, includeDeleted bool, l
if includeDeleted {
if lastDeleteAt != 0 {
// We filter by non-archived, and archived >= a timestamp.
query = query.Where(sq.Or{
sq.Eq{"DeleteAt": 0},
sq.GtOrEq{"DeleteAt": lastDeleteAt},
query = query.Where(sq.And{
sq.Or{
sq.Eq{"Channels.DeleteAt": 0},
sq.GtOrEq{"Channels.DeleteAt": lastDeleteAt},
},
sq.Or{
sq.Eq{"Teams.DeleteAt": 0},
sq.GtOrEq{"Teams.DeleteAt": lastDeleteAt},
},
})
}
// If lastDeleteAt is not set, we include everything. That means no filter is needed.
} else {
// Don't include archived channels.
query = query.Where(sq.Eq{"DeleteAt": 0})
// Don't include archived channels or channels from deleted teams
query = query.Where(sq.And{
sq.Eq{"Channels.DeleteAt": 0},
sq.Eq{"Teams.DeleteAt": 0},
})
}
sql, args, err := query.ToSql()