diff --git a/packages/backend/src/server/api/endpoints/notes/bubble-timeline.ts b/packages/backend/src/server/api/endpoints/notes/bubble-timeline.ts index abafcc19de..cd97a7773b 100644 --- a/packages/backend/src/server/api/endpoints/notes/bubble-timeline.ts +++ b/packages/backend/src/server/api/endpoints/notes/bubble-timeline.ts @@ -95,6 +95,7 @@ export default class extends Endpoint { // eslint- this.queryService .leftJoin(query, 'note.userInstance', 'userInstance'); + this.queryService.generateExcludedRepliesQueryForNotes(query, me); this.queryService.generateBlockedHostQueryForNote(query); this.queryService.generateSuspendedUserQueryForNote(query); this.queryService.generateSilencedUserQueryForNotes(query, me); diff --git a/packages/backend/src/server/api/endpoints/notes/global-timeline.ts b/packages/backend/src/server/api/endpoints/notes/global-timeline.ts index ae4ee3bece..601c5e7a48 100644 --- a/packages/backend/src/server/api/endpoints/notes/global-timeline.ts +++ b/packages/backend/src/server/api/endpoints/notes/global-timeline.ts @@ -87,6 +87,7 @@ export default class extends Endpoint { // eslint- .leftJoinAndSelect('reply.user', 'replyUser') .leftJoinAndSelect('renote.user', 'renoteUser'); + this.queryService.generateExcludedRepliesQueryForNotes(query, me); this.queryService.generateBlockedHostQueryForNote(query); this.queryService.generateSuspendedUserQueryForNote(query); this.queryService.generateSilencedUserQueryForNotes(query, me); diff --git a/packages/backend/src/server/api/endpoints/notes/hybrid-timeline.ts b/packages/backend/src/server/api/endpoints/notes/hybrid-timeline.ts index 0c39ec1f57..13d8b41d47 100644 --- a/packages/backend/src/server/api/endpoints/notes/hybrid-timeline.ts +++ b/packages/backend/src/server/api/endpoints/notes/hybrid-timeline.ts @@ -185,14 +185,14 @@ export default class extends Endpoint { // eslint- withRenotes: boolean, }, me: MiLocalUser) { const query = this.queryService.makePaginationQuery(this.notesRepository.createQueryBuilder('note'), ps.sinceId, ps.untilId) - // 1. by a user I follow, 2. a public local post, 3. my own post + // by a user I follow OR a public local post OR my own post .andWhere(new Brackets(qb => this.queryService .orFollowingUser(qb, ':meId', 'note.userId') .orWhere(new Brackets(qbb => qbb .andWhere('note.visibility = \'public\'') .andWhere('note.userHost IS NULL'))) .orWhere(':meId = note.userId'))) - // 1. in a channel I follow, 2. not in a channel + // in a channel I follow OR not in a channel .andWhere(new Brackets(qb => this.queryService .orFollowingChannel(qb, ':meId', 'note.channelId') .orWhere('note.channelId IS NULL'))) @@ -205,11 +205,7 @@ export default class extends Endpoint { // eslint- .limit(ps.limit); if (!ps.withReplies) { - query - // 1. Not a reply, 2. a self-reply - .andWhere(new Brackets(qb => qb - .orWhere('note.replyId IS NULL') // 返信ではない - .orWhere('note.replyUserId = note.userId'))); + this.queryService.generateExcludedRepliesQueryForNotes(query, me); } this.queryService.generateVisibilityQuery(query, me); diff --git a/packages/backend/src/server/api/endpoints/notes/local-timeline.ts b/packages/backend/src/server/api/endpoints/notes/local-timeline.ts index 7b9e70aefd..2379bf8a6a 100644 --- a/packages/backend/src/server/api/endpoints/notes/local-timeline.ts +++ b/packages/backend/src/server/api/endpoints/notes/local-timeline.ts @@ -175,11 +175,7 @@ export default class extends Endpoint { // eslint- .limit(ps.limit); if (!ps.withReplies) { - query - // 1. Not a reply, 2. a self-reply - .andWhere(new Brackets(qb => qb - .orWhere('note.replyId IS NULL') // 返信ではない - .orWhere('note.replyUserId = note.userId'))); + this.queryService.generateExcludedRepliesQueryForNotes(query, me); } this.queryService.generateBlockedHostQueryForNote(query); diff --git a/packages/backend/src/server/api/endpoints/notes/timeline.ts b/packages/backend/src/server/api/endpoints/notes/timeline.ts index 790c87ae60..3fbcd82e9b 100644 --- a/packages/backend/src/server/api/endpoints/notes/timeline.ts +++ b/packages/backend/src/server/api/endpoints/notes/timeline.ts @@ -128,7 +128,7 @@ export default class extends Endpoint { // eslint- private async getFromDb(ps: { untilId: string | null; sinceId: string | null; limit: number; withFiles: boolean; withRenotes: boolean; withBots: boolean; }, me: MiLocalUser) { //#region Construct query const query = this.queryService.makePaginationQuery(this.notesRepository.createQueryBuilder('note'), ps.sinceId, ps.untilId) - // 1. in a channel I follow, 2. my own post, 3. by a user I follow + // in a channel I follow OR my own post OR by a user I follow .andWhere(new Brackets(qb => this.queryService .orFollowingChannel(qb, ':meId', 'note.channelId') .orWhere(':meId = note.userId') @@ -136,10 +136,6 @@ export default class extends Endpoint { // eslint- .andFollowingUser(qb2, ':meId', 'note.userId') .andWhere('note.channelId IS NULL'))), )) - // 1. Not a reply, 2. a self-reply - .andWhere(new Brackets(qb => qb - .orWhere('note.replyId IS NULL') // 返信ではない - .orWhere('note.replyUserId = note.userId'))) .setParameters({ meId: me.id }) .innerJoinAndSelect('note.user', 'user') .leftJoinAndSelect('note.reply', 'reply') @@ -148,6 +144,7 @@ export default class extends Endpoint { // eslint- .leftJoinAndSelect('renote.user', 'renoteUser') .limit(ps.limit); + this.queryService.generateExcludedRepliesQueryForNotes(query, me); this.queryService.generateVisibilityQuery(query, me); this.queryService.generateBlockedHostQueryForNote(query); this.queryService.generateSuspendedUserQueryForNote(query); diff --git a/packages/backend/src/server/api/endpoints/notes/user-list-timeline.ts b/packages/backend/src/server/api/endpoints/notes/user-list-timeline.ts index 61a2c65ce4..f6022093e1 100644 --- a/packages/backend/src/server/api/endpoints/notes/user-list-timeline.ts +++ b/packages/backend/src/server/api/endpoints/notes/user-list-timeline.ts @@ -157,16 +157,6 @@ export default class extends Endpoint { // eslint- .innerJoin(this.userListMembershipsRepository.metadata.targetName, 'userListMemberships', 'userListMemberships.userId = note.userId') .andWhere('userListMemberships.userListId = :userListId', { userListId: list.id }) .andWhere('note.channelId IS NULL') // チャンネルノートではない - .andWhere(new Brackets(qb => qb - // 返信ではない - .orWhere('note.replyId IS NULL') - // 返信だけど投稿者自身への返信 - .orWhere('note.replyUserId = note.userId') - // 返信だけど自分宛ての返信 - .orWhere('note.replyUserId = :meId') - // 返信だけどwithRepliesがtrueの場合 - .orWhere('userListMemberships.withReplies = true'), - )) .setParameters({ meId: me.id }) .innerJoinAndSelect('note.user', 'user') .leftJoinAndSelect('note.reply', 'reply') @@ -175,6 +165,7 @@ export default class extends Endpoint { // eslint- .leftJoinAndSelect('renote.user', 'renoteUser') .limit(ps.limit); + this.queryService.generateExcludedRepliesQueryForNotes(query, me, 'userListMemberships.withReplies'); this.queryService.generateVisibilityQuery(query, me); this.queryService.generateBlockedHostQueryForNote(query); this.queryService.generateSuspendedUserQueryForNote(query); diff --git a/packages/backend/src/server/api/endpoints/roles/notes.ts b/packages/backend/src/server/api/endpoints/roles/notes.ts index 33cb3f94a0..a061bba6de 100644 --- a/packages/backend/src/server/api/endpoints/roles/notes.ts +++ b/packages/backend/src/server/api/endpoints/roles/notes.ts @@ -110,6 +110,7 @@ export default class extends Endpoint { // eslint- .leftJoinAndSelect('reply.user', 'replyUser') .leftJoinAndSelect('renote.user', 'renoteUser'); + this.queryService.generateExcludedRepliesQueryForNotes(query, me); this.queryService.generateBlockedHostQueryForNote(query); this.queryService.generateSuspendedUserQueryForNote(query); this.queryService.generateSilencedUserQueryForNotes(query, me);