summaryrefslogtreecommitdiff
path: root/packages/backend/src/core/QueryService.ts
diff options
context:
space:
mode:
authorsyuilo <Syuilotan@yahoo.co.jp>2023-03-08 08:56:09 +0900
committerGitHub <noreply@github.com>2023-03-08 08:56:09 +0900
commit4c2f7c64cc2b70bd7b686e9ece1ebbc30eeab511 (patch)
tree0d1ce1e7b3cd567c98205343e1e550cc47c714fa /packages/backend/src/core/QueryService.ts
parentrefactor(dev): separate test workflows (diff)
downloadsharkey-4c2f7c64cc2b70bd7b686e9ece1ebbc30eeab511.tar.gz
sharkey-4c2f7c64cc2b70bd7b686e9ece1ebbc30eeab511.tar.bz2
sharkey-4c2f7c64cc2b70bd7b686e9ece1ebbc30eeab511.zip
feat: Per-user renote mute (#10249)
* feat: per-user renote muting From FoundKey/c414f24a2c https://akkoma.dev/FoundKeyGang/FoundKey * Update ja-JP.yml * Delete renote-muting.ts * rename * fix ids * lint * fix * Update CHANGELOG.md * リノートをミュートしたユーザー一覧を見れるように * :art: * add test * fix test --------- Co-authored-by: Hélène <pleroma-dev@helene.moe>
Diffstat (limited to 'packages/backend/src/core/QueryService.ts')
-rw-r--r--packages/backend/src/core/QueryService.ts26
1 files changed, 24 insertions, 2 deletions
diff --git a/packages/backend/src/core/QueryService.ts b/packages/backend/src/core/QueryService.ts
index c334d749e6..0cee2076bf 100644
--- a/packages/backend/src/core/QueryService.ts
+++ b/packages/backend/src/core/QueryService.ts
@@ -2,7 +2,7 @@ import { Inject, Injectable } from '@nestjs/common';
import { Brackets, ObjectLiteral } from 'typeorm';
import { DI } from '@/di-symbols.js';
import type { User } from '@/models/entities/User.js';
-import type { UserProfilesRepository, FollowingsRepository, ChannelFollowingsRepository, MutedNotesRepository, BlockingsRepository, NoteThreadMutingsRepository, MutingsRepository } from '@/models/index.js';
+import type { UserProfilesRepository, FollowingsRepository, ChannelFollowingsRepository, MutedNotesRepository, BlockingsRepository, NoteThreadMutingsRepository, MutingsRepository, RenoteMutingsRepository } from '@/models/index.js';
import { bindThis } from '@/decorators.js';
import type { SelectQueryBuilder } from 'typeorm';
@@ -29,6 +29,9 @@ export class QueryService {
@Inject(DI.mutingsRepository)
private mutingsRepository: MutingsRepository,
+
+ @Inject(DI.renoteMutingsRepository)
+ private renoteMutingsRepository: RenoteMutingsRepository,
) {
}
@@ -269,5 +272,24 @@ export class QueryService {
q.setParameters({ meId: me.id });
}
}
-}
+ @bindThis
+ public generateMutedUserRenotesQueryForNotes(q: SelectQueryBuilder<any>, me: { id: User['id'] }): void {
+ const mutingQuery = this.renoteMutingsRepository.createQueryBuilder('renote_muting')
+ .select('renote_muting.muteeId')
+ .where('renote_muting.muterId = :muterId', { muterId: me.id });
+
+ q.andWhere(new Brackets(qb => {
+ qb
+ .where(new Brackets(qb => {
+ qb.where('note.renoteId IS NOT NULL');
+ qb.andWhere('note.text IS NULL');
+ qb.andWhere(`note.userId NOT IN (${ mutingQuery.getQuery() })`);
+ }))
+ .orWhere('note.renoteId IS NULL')
+ .orWhere('note.text IS NOT NULL');
+ }));
+
+ q.setParameters(mutingQuery.getParameters());
+ }
+}