diff options
Diffstat (limited to 'src/server/api/common')
| -rw-r--r-- | src/server/api/common/generate-channel-query.ts | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/src/server/api/common/generate-channel-query.ts b/src/server/api/common/generate-channel-query.ts new file mode 100644 index 0000000000..c0337b2c6b --- /dev/null +++ b/src/server/api/common/generate-channel-query.ts @@ -0,0 +1,24 @@ +import { User } from '../../../models/entities/user'; +import { ChannelFollowings } from '../../../models'; +import { Brackets, SelectQueryBuilder } from 'typeorm'; + +export function generateChannelQuery(q: SelectQueryBuilder<any>, me?: User | null) { + if (me == null) { + q.andWhere('note.channelId IS NULL'); + } else { + q.leftJoinAndSelect('note.channel', 'channel'); + + const channelFollowingQuery = ChannelFollowings.createQueryBuilder('channelFollowing') + .select('channelFollowing.followeeId') + .where('channelFollowing.followerId = :followerId', { followerId: me.id }); + + q.andWhere(new Brackets(qb => { qb + // チャンネルのノートではない + .where('note.channelId IS NULL') + // または自分がフォローしているチャンネルのノート + .orWhere(`note.channelId IN (${ channelFollowingQuery.getQuery() })`); + })); + + q.setParameters(channelFollowingQuery.getParameters()); + } +} |