summaryrefslogtreecommitdiff
path: root/packages/backend/src/core/QueryService.ts
diff options
context:
space:
mode:
authormisskey-release-bot[bot] <157398866+misskey-release-bot[bot]@users.noreply.github.com>2025-05-07 02:46:42 +0000
committerGitHub <noreply@github.com>2025-05-07 02:46:42 +0000
commit9ed0d5ccecb53c973cef1e762dd0fae9e04f9a5b (patch)
treec41c3ee20b995c3a74a75d4005ab980d217a3727 /packages/backend/src/core/QueryService.ts
parentMerge pull request #15842 from misskey-dev/develop (diff)
parentRelease: 2025.5.0 (diff)
downloadmisskey-9ed0d5ccecb53c973cef1e762dd0fae9e04f9a5b.tar.gz
misskey-9ed0d5ccecb53c973cef1e762dd0fae9e04f9a5b.tar.bz2
misskey-9ed0d5ccecb53c973cef1e762dd0fae9e04f9a5b.zip
Merge pull request #15933 from misskey-dev/develop
Release: 2025.5.0
Diffstat (limited to 'packages/backend/src/core/QueryService.ts')
-rw-r--r--packages/backend/src/core/QueryService.ts61
1 files changed, 45 insertions, 16 deletions
diff --git a/packages/backend/src/core/QueryService.ts b/packages/backend/src/core/QueryService.ts
index 119eb49c02..b9cef5b0ec 100644
--- a/packages/backend/src/core/QueryService.ts
+++ b/packages/backend/src/core/QueryService.ts
@@ -43,29 +43,36 @@ export class QueryService {
) {
}
- public makePaginationQuery<T extends ObjectLiteral>(q: SelectQueryBuilder<T>, sinceId?: string | null, untilId?: string | null, sinceDate?: number | null, untilDate?: number | null): SelectQueryBuilder<T> {
+ public makePaginationQuery<T extends ObjectLiteral>(
+ q: SelectQueryBuilder<T>,
+ sinceId?: string | null,
+ untilId?: string | null,
+ sinceDate?: number | null,
+ untilDate?: number | null,
+ targetColumn = 'id',
+ ): SelectQueryBuilder<T> {
if (sinceId && untilId) {
- q.andWhere(`${q.alias}.id > :sinceId`, { sinceId: sinceId });
- q.andWhere(`${q.alias}.id < :untilId`, { untilId: untilId });
- q.orderBy(`${q.alias}.id`, 'DESC');
+ q.andWhere(`${q.alias}.${targetColumn} > :sinceId`, { sinceId: sinceId });
+ q.andWhere(`${q.alias}.${targetColumn} < :untilId`, { untilId: untilId });
+ q.orderBy(`${q.alias}.${targetColumn}`, 'DESC');
} else if (sinceId) {
- q.andWhere(`${q.alias}.id > :sinceId`, { sinceId: sinceId });
- q.orderBy(`${q.alias}.id`, 'ASC');
+ q.andWhere(`${q.alias}.${targetColumn} > :sinceId`, { sinceId: sinceId });
+ q.orderBy(`${q.alias}.${targetColumn}`, 'ASC');
} else if (untilId) {
- q.andWhere(`${q.alias}.id < :untilId`, { untilId: untilId });
- q.orderBy(`${q.alias}.id`, 'DESC');
+ q.andWhere(`${q.alias}.${targetColumn} < :untilId`, { untilId: untilId });
+ q.orderBy(`${q.alias}.${targetColumn}`, 'DESC');
} else if (sinceDate && untilDate) {
- q.andWhere(`${q.alias}.id > :sinceId`, { sinceId: this.idService.gen(sinceDate) });
- q.andWhere(`${q.alias}.id < :untilId`, { untilId: this.idService.gen(untilDate) });
- q.orderBy(`${q.alias}.id`, 'DESC');
+ q.andWhere(`${q.alias}.${targetColumn} > :sinceId`, { sinceId: this.idService.gen(sinceDate) });
+ q.andWhere(`${q.alias}.${targetColumn} < :untilId`, { untilId: this.idService.gen(untilDate) });
+ q.orderBy(`${q.alias}.${targetColumn}`, 'DESC');
} else if (sinceDate) {
- q.andWhere(`${q.alias}.id > :sinceId`, { sinceId: this.idService.gen(sinceDate) });
- q.orderBy(`${q.alias}.id`, 'ASC');
+ q.andWhere(`${q.alias}.${targetColumn} > :sinceId`, { sinceId: this.idService.gen(sinceDate) });
+ q.orderBy(`${q.alias}.${targetColumn}`, 'ASC');
} else if (untilDate) {
- q.andWhere(`${q.alias}.id < :untilId`, { untilId: this.idService.gen(untilDate) });
- q.orderBy(`${q.alias}.id`, 'DESC');
+ q.andWhere(`${q.alias}.${targetColumn} < :untilId`, { untilId: this.idService.gen(untilDate) });
+ q.orderBy(`${q.alias}.${targetColumn}`, 'DESC');
} else {
- q.orderBy(`${q.alias}.id`, 'DESC');
+ q.orderBy(`${q.alias}.${targetColumn}`, 'DESC');
}
return q;
}
@@ -287,4 +294,26 @@ export class QueryService {
.andWhere(instanceSuspension('renoteUser'));
}
}
+
+ // Requirements: user replyUser renoteUser must be joined
+ @bindThis
+ public generateSuspendedUserQueryForNote(q: SelectQueryBuilder<any>, excludeAuthor?: boolean): void {
+ if (excludeAuthor) {
+ const brakets = (user: string) => new Brackets(qb => qb
+ .where(`note.${user}Id IS NULL`)
+ .orWhere(`user.id = ${user}.id`)
+ .orWhere(`${user}.isSuspended = FALSE`));
+ q
+ .andWhere(brakets('replyUser'))
+ .andWhere(brakets('renoteUser'));
+ } else {
+ const brakets = (user: string) => new Brackets(qb => qb
+ .where(`note.${user}Id IS NULL`)
+ .orWhere(`${user}.isSuspended = FALSE`));
+ q
+ .andWhere('user.isSuspended = FALSE')
+ .andWhere(brakets('replyUser'))
+ .andWhere(brakets('renoteUser'));
+ }
+ }
}