[FIX] Team's channels list for teams with too many channels (#21491)

pull/21511/head
Kevin Aleman 5 years ago committed by GitHub
parent b4cd0b84f2
commit dd340e0947
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 13
      app/models/server/raw/Rooms.js
  2. 16
      server/services/team/service.ts

@ -129,22 +129,17 @@ export class RoomsRaw extends BaseRaw {
return this.find(query, options);
}
findByTeamIdContainingNameAndDefault(teamId, name, onlyDefault, options = {}) {
findByTeamIdContainingNameAndDefault(teamId, name, teamDefault, ids, options = {}) {
const query = {
teamId,
teamMain: {
$exists: false,
},
...name ? { name: new RegExp(escapeRegExp(name), 'i') } : {},
...teamDefault === true ? { teamDefault } : {},
...ids ? { $or: [{ t: 'c' }, { _id: { $in: ids } }] } : {},
};
if (name) {
query.name = new RegExp(escapeRegExp(name), 'i');
}
if (onlyDefault) {
query.teamDefault = true;
}
return this.find(query, options);
}

@ -427,22 +427,20 @@ export class TeamService extends ServiceClass implements ITeamService {
}
if (getAllRooms) {
const teamRoomsCursor = this.RoomsModel.findByTeamIdContainingNameAndDefault(teamId, name, isDefault, { skip, limit });
const teamRoomsCursor = this.RoomsModel.findByTeamIdContainingNameAndDefault(teamId, name, isDefault, undefined, { skip, limit });
return {
total: await teamRoomsCursor.count(),
records: await teamRoomsCursor.toArray(),
};
}
const teamRooms = await this.RoomsModel.findByTeamIdContainingNameAndDefault(teamId, name, isDefault, { skip, limit, projection: { _id: 1, t: 1 } }).toArray();
const privateTeamRoomIds = teamRooms.filter((room) => room.t === 'p').map((room) => room._id);
const publicTeamRoomIds = teamRooms.filter((room) => room.t === 'c').map((room) => room._id);
const subscriptionsCursor = this.SubscriptionsModel.findByUserIdAndRoomIds(uid, privateTeamRoomIds);
const subscriptionRoomIds = (await subscriptionsCursor.toArray()).map((subscription) => subscription.rid);
const availableRoomsCursor = this.RoomsModel.findManyByRoomIds([...subscriptionRoomIds, ...publicTeamRoomIds], { skip, limit });
const user = await this.Users.findOneById(uid, { fields: { __rooms: 1 } });
const userRooms = user.__rooms;
const validTeamRoomsCursor = this.RoomsModel.findByTeamIdContainingNameAndDefault(teamId, name, isDefault, userRooms, { skip, limit });
return {
total: await availableRoomsCursor.count(),
records: await availableRoomsCursor.toArray(),
total: await validTeamRoomsCursor.count(),
records: await validTeamRoomsCursor.toArray(),
};
}

Loading…
Cancel
Save