From 67ca7ee4ec8121ec84fa652104749e394896d35e Mon Sep 17 00:00:00 2001
From: xianon <xianon@hotmail.co.jp>
Date: Sun, 26 Feb 2023 18:54:52 +0900
Subject: [PATCH] =?UTF-8?q?=E3=83=9B=E3=83=BC=E3=83=A0=E3=82=BF=E3=82=A4?=
 =?UTF-8?q?=E3=83=A0=E3=83=A9=E3=82=A4=E3=83=B3=E3=81=AE=E8=AA=AD=E3=81=BF?=
 =?UTF-8?q?=E8=BE=BC=E3=81=BF=E3=81=A7=E3=82=AF=E3=82=A8=E3=83=AA=E3=82=BF?=
 =?UTF-8?q?=E3=82=A4=E3=83=A0=E3=82=A2=E3=82=A6=E3=83=88=E3=81=AB=E3=81=AA?=
 =?UTF-8?q?=E3=82=8B=E3=81=AE=E3=82=92=E4=BF=AE=E6=AD=A3=E3=81=99=E3=82=8B?=
 =?UTF-8?q?=20(#10106)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .../server/api/endpoints/notes/timeline.ts    | 23 +++++++++++--------
 1 file changed, 13 insertions(+), 10 deletions(-)

diff --git a/packages/backend/src/server/api/endpoints/notes/timeline.ts b/packages/backend/src/server/api/endpoints/notes/timeline.ts
index d1c35e36e2..942c4cf51e 100644
--- a/packages/backend/src/server/api/endpoints/notes/timeline.ts
+++ b/packages/backend/src/server/api/endpoints/notes/timeline.ts
@@ -66,17 +66,9 @@ export default class extends Endpoint<typeof meta, typeof paramDef> {
 			})) !== 0;
 
 			//#region Construct query
-			const followingQuery = this.followingsRepository.createQueryBuilder('following')
-				.select('following.followeeId')
-				.where('following.followerId = :followerId', { followerId: me.id });
-
 			const query = this.queryService.makePaginationQuery(this.notesRepository.createQueryBuilder('note'),
 				ps.sinceId, ps.untilId, ps.sinceDate, ps.untilDate)
 				.andWhere('note.createdAt > :minDate', { minDate: new Date(Date.now() - (1000 * 60 * 60 * 24 * 30)) }) // 30日前まで
-				.andWhere(new Brackets(qb => { qb
-					.where('note.userId = :meId', { meId: me.id });
-				if (hasFollowing) qb.orWhere(`note.userId IN (${ followingQuery.getQuery() })`);
-				}))
 				.innerJoinAndSelect('note.user', 'user')
 				.leftJoinAndSelect('user.avatar', 'avatar')
 				.leftJoinAndSelect('user.banner', 'banner')
@@ -87,8 +79,19 @@ export default class extends Endpoint<typeof meta, typeof paramDef> {
 				.leftJoinAndSelect('replyUser.banner', 'replyUserBanner')
 				.leftJoinAndSelect('renote.user', 'renoteUser')
 				.leftJoinAndSelect('renoteUser.avatar', 'renoteUserAvatar')
-				.leftJoinAndSelect('renoteUser.banner', 'renoteUserBanner')
-				.setParameters(followingQuery.getParameters());
+				.leftJoinAndSelect('renoteUser.banner', 'renoteUserBanner');
+
+			if (hasFollowing) {
+				const followees = await this.followingsRepository.createQueryBuilder('following')
+					.select('following.followeeId')
+					.where('following.followerId = :followerId', { followerId: me.id })
+					.getMany();
+				const meOrFolloweeIds = [me.id, ...followees.map(f => f.followeeId)];
+
+				query.andWhere('note.userId IN (:...meOrFolloweeIds)', { meOrFolloweeIds: meOrFolloweeIds });
+			} else {
+				query.andWhere('note.userId = :meId', { meId: me.id });
+			}
 
 			this.queryService.generateChannelQuery(query, me);
 			this.queryService.generateRepliesQuery(query, me);