summaryrefslogtreecommitdiff
path: root/packages/backend/src/server/api/common
diff options
context:
space:
mode:
Diffstat (limited to 'packages/backend/src/server/api/common')
-rw-r--r--packages/backend/src/server/api/common/generate-muted-instance-query.ts40
-rw-r--r--packages/backend/src/server/api/common/generate-muted-user-query.ts29
2 files changed, 23 insertions, 46 deletions
diff --git a/packages/backend/src/server/api/common/generate-muted-instance-query.ts b/packages/backend/src/server/api/common/generate-muted-instance-query.ts
deleted file mode 100644
index 72a6fec68f..0000000000
--- a/packages/backend/src/server/api/common/generate-muted-instance-query.ts
+++ /dev/null
@@ -1,40 +0,0 @@
-import { User } from '@/models/entities/user.js';
-import { id } from '@/models/id.js';
-import { UserProfiles } from '@/models/index.js';
-import { SelectQueryBuilder, Brackets } from 'typeorm';
-
-function createMutesQuery(id: string) {
- return UserProfiles.createQueryBuilder('user_profile')
- .select('user_profile.mutedInstances')
- .where('user_profile.userId = :muterId', { muterId: id });
-}
-
-export function generateMutedInstanceQuery(q: SelectQueryBuilder<any>, me: { id: User['id'] }) {
- const mutingQuery = createMutesQuery(me.id);
-
- q
- .andWhere(new Brackets(qb => { qb
- .andWhere('note.userHost IS NULL')
- .orWhere(`NOT((${ mutingQuery.getQuery() })::jsonb ? note.userHost)`);
- }))
- .andWhere(new Brackets(qb => { qb
- .where(`note.replyUserHost IS NULL`)
- .orWhere(`NOT ((${ mutingQuery.getQuery() })::jsonb ? note.replyUserHost)`);
- }))
- .andWhere(new Brackets(qb => { qb
- .where(`note.renoteUserHost IS NULL`)
- .orWhere(`NOT ((${ mutingQuery.getQuery() })::jsonb ? note.renoteUserHost)`);
- }));
- q.setParameters(mutingQuery.getParameters());
-}
-
-export function generateMutedInstanceNotificationQuery(q: SelectQueryBuilder<any>, me: { id: User['id'] }) {
- const mutingQuery = createMutesQuery(me.id);
-
- q.andWhere(new Brackets(qb => { qb
- .andWhere('notifier.host IS NULL')
- .orWhere(`NOT (( ${mutingQuery.getQuery()} )::jsonb ? notifier.host)`);
- }));
-
- q.setParameters(mutingQuery.getParameters());
-}
diff --git a/packages/backend/src/server/api/common/generate-muted-user-query.ts b/packages/backend/src/server/api/common/generate-muted-user-query.ts
index 79cb3ff894..470ece1a62 100644
--- a/packages/backend/src/server/api/common/generate-muted-user-query.ts
+++ b/packages/backend/src/server/api/common/generate-muted-user-query.ts
@@ -1,6 +1,6 @@
-import { User } from '@/models/entities/user.js';
-import { Mutings } from '@/models/index.js';
import { SelectQueryBuilder, Brackets } from 'typeorm';
+import { User } from '@/models/entities/user.js';
+import { Mutings, UserProfiles } from '@/models/index.js';
export function generateMutedUserQuery(q: SelectQueryBuilder<any>, me: { id: User['id'] }, exclude?: User) {
const mutingQuery = Mutings.createQueryBuilder('muting')
@@ -11,21 +11,39 @@ export function generateMutedUserQuery(q: SelectQueryBuilder<any>, me: { id: Use
mutingQuery.andWhere('muting.muteeId != :excludeId', { excludeId: exclude.id });
}
+ const mutingInstanceQuery = UserProfiles.createQueryBuilder('user_profile')
+ .select('user_profile.mutedInstances')
+ .where('user_profile.userId = :muterId', { muterId: me.id });
+
// 投稿の作者をミュートしていない かつ
// 投稿の返信先の作者をミュートしていない かつ
// 投稿の引用元の作者をミュートしていない
q
.andWhere(`note.userId NOT IN (${ mutingQuery.getQuery() })`)
.andWhere(new Brackets(qb => { qb
- .where(`note.replyUserId IS NULL`)
+ .where('note.replyUserId IS NULL')
.orWhere(`note.replyUserId NOT IN (${ mutingQuery.getQuery() })`);
}))
.andWhere(new Brackets(qb => { qb
- .where(`note.renoteUserId IS NULL`)
+ .where('note.renoteUserId IS NULL')
.orWhere(`note.renoteUserId NOT IN (${ mutingQuery.getQuery() })`);
+ }))
+ // mute instances
+ .andWhere(new Brackets(qb => { qb
+ .andWhere('note.userHost IS NULL')
+ .orWhere(`NOT ((${ mutingInstanceQuery.getQuery() })::jsonb ? note.userHost)`);
+ }))
+ .andWhere(new Brackets(qb => { qb
+ .where('note.replyUserHost IS NULL')
+ .orWhere(`NOT ((${ mutingInstanceQuery.getQuery() })::jsonb ? note.replyUserHost)`);
+ }))
+ .andWhere(new Brackets(qb => { qb
+ .where('note.renoteUserHost IS NULL')
+ .orWhere(`NOT ((${ mutingInstanceQuery.getQuery() })::jsonb ? note.renoteUserHost)`);
}));
q.setParameters(mutingQuery.getParameters());
+ q.setParameters(mutingInstanceQuery.getParameters());
}
export function generateMutedUserQueryForUsers(q: SelectQueryBuilder<any>, me: { id: User['id'] }) {
@@ -33,8 +51,7 @@ export function generateMutedUserQueryForUsers(q: SelectQueryBuilder<any>, me: {
.select('muting.muteeId')
.where('muting.muterId = :muterId', { muterId: me.id });
- q
- .andWhere(`user.id NOT IN (${ mutingQuery.getQuery() })`);
+ q.andWhere(`user.id NOT IN (${ mutingQuery.getQuery() })`);
q.setParameters(mutingQuery.getParameters());
}