enhance(server): Improve user block (#7640)
* enhance(server): Improve user block
* Update CHANGELOG.md
* ユーザーリスト対応
* 相手から見れなくなるように
* Update 1629004542760-chart-reindex.ts
2365761ba5 (commitcomment-54919821)
* update test
* add test
* add todos
* Update 1629004542760-chart-reindex.ts
This commit is contained in:
parent
7ebdd4739a
commit
7015df37e3
42 changed files with 394 additions and 30 deletions
|
|
@ -1,6 +1,29 @@
|
|||
import { User } from '../../../models/entities/user';
|
||||
import { Blockings } from '../../../models';
|
||||
import { SelectQueryBuilder } from 'typeorm';
|
||||
import { Brackets, SelectQueryBuilder } from 'typeorm';
|
||||
|
||||
// ここでいうBlockedは被Blockedの意
|
||||
export function generateBlockedUserQuery(q: SelectQueryBuilder<any>, me: { id: User['id'] }) {
|
||||
const blockingQuery = Blockings.createQueryBuilder('blocking')
|
||||
.select('blocking.blockerId')
|
||||
.where('blocking.blockeeId = :blockeeId', { blockeeId: me.id });
|
||||
|
||||
// 投稿の作者にブロックされていない かつ
|
||||
// 投稿の返信先の作者にブロックされていない かつ
|
||||
// 投稿の引用元の作者にブロックされていない
|
||||
q
|
||||
.andWhere(`note.userId NOT IN (${ blockingQuery.getQuery() })`)
|
||||
.andWhere(new Brackets(qb => { qb
|
||||
.where(`note.replyUserId IS NULL`)
|
||||
.orWhere(`note.replyUserId NOT IN (${ blockingQuery.getQuery() })`);
|
||||
}))
|
||||
.andWhere(new Brackets(qb => { qb
|
||||
.where(`note.renoteUserId IS NULL`)
|
||||
.orWhere(`note.renoteUserId NOT IN (${ blockingQuery.getQuery() })`);
|
||||
}));
|
||||
|
||||
q.setParameters(blockingQuery.getParameters());
|
||||
}
|
||||
|
||||
export function generateBlockQueryForUsers(q: SelectQueryBuilder<any>, me: { id: User['id'] }) {
|
||||
const blockingQuery = Blockings.createQueryBuilder('blocking')
|
||||
|
|
|
|||
|
|
@ -3,6 +3,7 @@ import { Note } from '../../../models/entities/note';
|
|||
import { User } from '../../../models/entities/user';
|
||||
import { Notes, UserProfiles, NoteReactions } from '../../../models';
|
||||
import { generateMutedUserQuery } from './generate-muted-user-query';
|
||||
import { generateBlockedUserQuery } from './generate-block-query';
|
||||
|
||||
// TODO: リアクション、Renote、返信などをしたノートは除外する
|
||||
|
||||
|
|
@ -29,6 +30,7 @@ export async function injectFeatured(timeline: Note[], user?: User | null) {
|
|||
query.andWhere('note.userId != :userId', { userId: user.id });
|
||||
|
||||
generateMutedUserQuery(query, user);
|
||||
generateBlockedUserQuery(query, user);
|
||||
|
||||
const reactionQuery = NoteReactions.createQueryBuilder('reaction')
|
||||
.select('reaction.noteId')
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue