summaryrefslogtreecommitdiff
path: root/packages/backend/src/core/SearchService.ts
diff options
context:
space:
mode:
authorKanariKanaru <93921745+kanarikanaru@users.noreply.github.com>2023-12-07 17:09:31 +0900
committerGitHub <noreply@github.com>2023-12-07 17:09:31 +0900
commitbcf6b7f5ee73a889a84afd54795f2ae9777074a4 (patch)
tree43f11012a44ad60ece068b51ab4747f602656f3b /packages/backend/src/core/SearchService.ts
parentfix(backend): pagination with sinceId broken (#12586) (diff)
downloadsharkey-bcf6b7f5ee73a889a84afd54795f2ae9777074a4.tar.gz
sharkey-bcf6b7f5ee73a889a84afd54795f2ae9777074a4.tar.bz2
sharkey-bcf6b7f5ee73a889a84afd54795f2ae9777074a4.zip
enhance: meilisearchを有効にしてもミュートやブロックを考慮するように (#12575)
* enhance: meilisearchを有効にしてもミュートやブロックを考慮するように * Update CHANGELOG.md
Diffstat (limited to 'packages/backend/src/core/SearchService.ts')
-rw-r--r--packages/backend/src/core/SearchService.ts16
1 files changed, 15 insertions, 1 deletions
diff --git a/packages/backend/src/core/SearchService.ts b/packages/backend/src/core/SearchService.ts
index b6d2bcabc8..a46d68fd84 100644
--- a/packages/backend/src/core/SearchService.ts
+++ b/packages/backend/src/core/SearchService.ts
@@ -12,6 +12,8 @@ import { MiNote } from '@/models/Note.js';
import { MiUser } from '@/models/_.js';
import type { NotesRepository } from '@/models/_.js';
import { sqlLikeEscape } from '@/misc/sql-like-escape.js';
+import { isUserRelated } from '@/misc/is-user-related.js';
+import { CacheService } from '@/core/CacheService.js';
import { QueryService } from '@/core/QueryService.js';
import { IdService } from '@/core/IdService.js';
import type { Index, MeiliSearch } from 'meilisearch';
@@ -74,6 +76,7 @@ export class SearchService {
@Inject(DI.notesRepository)
private notesRepository: NotesRepository,
+ private cacheService: CacheService,
private queryService: QueryService,
private idService: IdService,
) {
@@ -187,8 +190,19 @@ export class SearchService {
limit: pagination.limit,
});
if (res.hits.length === 0) return [];
- const notes = await this.notesRepository.findBy({
+ const [
+ userIdsWhoMeMuting,
+ userIdsWhoBlockingMe,
+ ] = me ? await Promise.all([
+ this.cacheService.userMutingsCache.fetch(me.id),
+ this.cacheService.userBlockedCache.fetch(me.id),
+ ]) : [new Set<string>(), new Set<string>()];
+ const notes = (await this.notesRepository.findBy({
id: In(res.hits.map(x => x.id)),
+ })).filter(note => {
+ if (me && isUserRelated(note, userIdsWhoBlockingMe)) return false;
+ if (me && isUserRelated(note, userIdsWhoMeMuting)) return false;
+ return true;
});
return notes.sort((a, b) => a.id > b.id ? -1 : 1);
} else {