summaryrefslogtreecommitdiff
path: root/packages/backend/src/server/api/common/generate-channel-query.ts
blob: 333bb73b86cd347b884162971aa77595e530ce82 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
import { User } from '@/models/entities/user.js';
import { ChannelFollowings } from '@/models/index.js';
import { Brackets, SelectQueryBuilder } from 'typeorm';

export function generateChannelQuery(q: SelectQueryBuilder<any>, me?: { id: User['id'] } | 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());
	}
}