Skip to content
This repository was archived by the owner on Oct 11, 2022. It is now read-only.
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 4 additions & 4 deletions api/loaders/channel.js
Original file line number Diff line number Diff line change
Expand Up @@ -17,13 +17,13 @@ export const __createChannelThreadCountLoader = createLoader(
'group'
);

export const __createChannelMemberCountLoader = createLoader(
channels => getChannelsMemberCounts(channels),
export const __createChannelPendingMembersLoader = createLoader(
channels => getPendingUsersInChannels(channels),
'group'
);

export const __createChannelPendingMembersLoader = createLoader(
channels => getPendingUsersInChannels(channels),
export const __createChannelMemberCountLoader = createLoader(
channels => getChannelsMemberCounts(channels),
'group'
);

Expand Down
2 changes: 1 addition & 1 deletion api/loaders/community.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,9 @@
import {
getCommunities,
getCommunitiesBySlug,
getCommunitiesMemberCounts,
getCommunitiesChannelCounts,
getCommunitiesOnlineMemberCounts,
getCommunitiesMemberCounts,
} from '../models/community';
import { getCommunitiesSettings } from '../models/communitySettings';
import createLoader from './create-loader';
Expand Down
4 changes: 2 additions & 2 deletions api/loaders/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -15,17 +15,17 @@ import {
import { __createNotificationLoader } from './notification';
import {
__createChannelLoader,
__createChannelMemberCountLoader,
__createChannelThreadCountLoader,
__createChannelMemberCountLoader,
__createChannelPendingMembersLoader,
__createChannelSettingsLoader,
} from './channel';
import {
__createCommunityLoader,
__createCommunityBySlugLoader,
__createCommunityMemberCountLoader,
__createCommunityChannelCountLoader,
__createCommunitySettingsLoader,
__createCommunityMemberCountLoader,
__createCommunityOnlineMemberCountLoader,
} from './community';
import {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
exports.up = function(r, conn) {
return Promise.all([
r
.table('communities')
.update(
{
memberCount: r
.table('usersCommunities')
.getAll(r.row('id'), { index: 'communityId' })
.filter(row => row('isMember').eq(true))
.count()
.default(1),
},
{
nonAtomic: true,
}
)
.run(conn),
r
.table('channels')
.update(
{
memberCount: r
.table('usersChannels')
.getAll(r.row('id'), { index: 'channelId' })
.filter(row => row('isMember').eq(true))
.count()
.default(1),
},
{
nonAtomic: true,
}
)
.run(conn),
]).catch(err => console.error(err));
};
exports.down = function(r, conn) {
return Promise.all([
r
.table('communities')
.update({
memberCount: r.literal(),
})
.run(conn),
r
.table('channels')
.update({
memberCount: r.literal(),
})
.run(conn),
]);
};
9 changes: 9 additions & 0 deletions api/migrations/seed/default/channels.js
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ module.exports = [
slug: 'general',
isPrivate: false,
isDefault: true,
memberCount: 5,
},

{
Expand All @@ -38,6 +39,7 @@ module.exports = [
slug: 'private',
isPrivate: true,
isDefault: false,
memberCount: 5,
},

{
Expand All @@ -49,6 +51,7 @@ module.exports = [
slug: 'general',
isPrivate: false,
isDefault: true,
memberCount: 5,
},

{
Expand All @@ -60,6 +63,7 @@ module.exports = [
slug: 'private',
isPrivate: true,
isDefault: false,
memberCount: 5,
},

{
Expand All @@ -72,6 +76,7 @@ module.exports = [
isPrivate: false,
isDefault: true,
archivedAt: new Date(DATE),
memberCount: 3,
},

{
Expand All @@ -84,6 +89,7 @@ module.exports = [
isPrivate: false,
isDefault: false,
deletedAt: new Date(DATE),
memberCount: 0,
},

{
Expand All @@ -96,6 +102,7 @@ module.exports = [
isPrivate: false,
isDefault: false,
deletedAt: new Date(DATE),
memberCount: 1,
},

{
Expand All @@ -107,6 +114,7 @@ module.exports = [
slug: 'moderator-created',
isPrivate: false,
isDefault: false,
memberCount: 1,
},

{
Expand All @@ -118,5 +126,6 @@ module.exports = [
slug: 'private-general',
isPrivate: false,
isDefault: false,
memberCount: 1,
},
];
4 changes: 4 additions & 0 deletions api/migrations/seed/default/communities.js
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ module.exports = [
coverPhoto:
'https://spectrum.imgix.net/communities/-Kh6RfPYjmSaIWbkck8i/Twitter Header.png.0.3303118636071434',
slug: 'spectrum',
memberCount: 4,
},
{
id: PAYMENTS_COMMUNITY_ID,
Expand All @@ -34,6 +35,7 @@ module.exports = [
coverPhoto:
'https://spectrum.imgix.net/communities/-Kh6RfPYjmSaIWbkck8i/Twitter Header.png.0.3303118636071434',
slug: 'payments',
memberCount: 5,
},
{
id: DELETED_COMMUNITY_ID,
Expand All @@ -48,6 +50,7 @@ module.exports = [
coverPhoto:
'https://spectrum.imgix.net/communities/-Kh6RfPYjmSaIWbkck8i/Twitter Header.png.0.3303118636071434',
slug: 'deleted',
memberCount: 0,
},
{
id: PRIVATE_COMMUNITY_ID,
Expand All @@ -61,5 +64,6 @@ module.exports = [
coverPhoto:
'https://spectrum.imgix.net/communities/-Kh6RfPYjmSaIWbkck8i/Twitter Header.png.0.3303118636071434',
slug: 'private',
memberCount: 1,
},
];
87 changes: 64 additions & 23 deletions api/models/channel.js
Original file line number Diff line number Diff line change
Expand Up @@ -138,19 +138,6 @@ const getChannels = (channelIds: Array<string>): Promise<Array<DBChannel>> => {
return channelsByIdsQuery(...channelIds).run();
};

// prettier-ignore
const getChannelMetaData = async (channelId: string): Promise<Array<number>> => {
const getThreadCount = threadsByChannelsQuery(channelId)
.count()
.run();

const getMemberCount = membersByChannelsQuery(channelId)
.count()
.run();

return Promise.all([getThreadCount, getMemberCount]);
};

type GroupedCount = {
group: string,
reduction: number,
Expand Down Expand Up @@ -323,14 +310,6 @@ const deleteChannel = (channelId: string, userId: string): Promise<Boolean> => {
});
};

const getChannelMemberCount = (channelId: string): number => {
return db
.table('channels')
.get(channelId)('members')
.count()
.run();
};

// prettier-ignore
const archiveChannel = (channelId: string, userId: string): Promise<DBChannel> => {
return db
Expand Down Expand Up @@ -395,10 +374,69 @@ const archiveAllPrivateChannels = async (communityId: string, userId: string) =>
return await Promise.all([...trackingPromises, archivePromise]);
};

const incrementMemberCount = (channelId: string): Promise<DBChannel> => {
return db
.table('channels')
.get(channelId)
.update(
{
memberCount: db
.row('memberCount')
.default(0)
.add(1),
},
{ returnChanges: true }
)
.run()
.then(result => result.changes[0].new_val || result.changes[0].old_val);
};

const decrementMemberCount = (channelId: string): Promise<DBChannel> => {
return db
.table('channels')
.get(channelId)
.update(
{
memberCount: db
.row('memberCount')
.default(1)
.sub(1),
},
{ returnChanges: true }
)
.run()
.then(result => result.changes[0].new_val || result.changes[0].old_val);
};

const setMemberCount = (
channelId: string,
value: number
): Promise<DBChannel> => {
return db
.table('channels')
.get(channelId)
.update(
{
memberCount: value,
},
{ returnChanges: true }
)
.run()
.then(result => result.changes[0].new_val || result.changes[0].old_val);
};

const getMemberCount = (channelId: string): Promise<number> => {
return db
.table('usersChannels')
.getAll(channelId, { index: 'channelId' })
.filter({ isMember: true })
.count()
.run();
};

module.exports = {
getChannelBySlug,
getChannelById,
getChannelMetaData,
getChannelsByUser,
getChannelsByCommunity,
getPublicChannelsByCommunity,
Expand All @@ -407,13 +445,16 @@ module.exports = {
createGeneralChannel,
editChannel,
deleteChannel,
getChannelMemberCount,
getChannelsMemberCounts,
getChannelsThreadCounts,
getChannels,
archiveChannel,
restoreChannel,
archiveAllPrivateChannels,
incrementMemberCount,
decrementMemberCount,
setMemberCount,
getMemberCount,
__forQueryTests: {
channelsByCommunitiesQuery,
channelsByIdsQuery,
Expand Down
Loading