perf(backend): improve performance of timeline apis
This commit is contained in:
		| @@ -8,6 +8,7 @@ import { MetaService } from '@/core/MetaService.js'; | ||||
| import { NoteEntityService } from '@/core/entities/NoteEntityService.js'; | ||||
| import { DI } from '@/di-symbols.js'; | ||||
| import { RoleService } from '@/core/RoleService.js'; | ||||
| import { IdService } from '@/core/IdService.js'; | ||||
| import { ApiError } from '../../error.js'; | ||||
|  | ||||
| export const meta = { | ||||
| @@ -69,6 +70,7 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { | ||||
| 		private metaService: MetaService, | ||||
| 		private roleService: RoleService, | ||||
| 		private activeUsersChart: ActiveUsersChart, | ||||
| 		private idService: IdService, | ||||
| 	) { | ||||
| 		super(meta, paramDef, async (ps, me) => { | ||||
| 			const policies = await this.roleService.getUserPolicies(me.id); | ||||
| @@ -83,7 +85,7 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { | ||||
|  | ||||
| 			const query = this.queryService.makePaginationQuery(this.notesRepository.createQueryBuilder('note'), | ||||
| 				ps.sinceId, ps.untilId, ps.sinceDate, ps.untilDate) | ||||
| 				.andWhere('note.createdAt > :minDate', { minDate: new Date(Date.now() - (1000 * 60 * 60 * 24 * 30)) }) // 30日前まで | ||||
| 				.andWhere('note.id > :minId', { minId: this.idService.genId(new Date(Date.now() - (1000 * 60 * 60 * 24 * 10))) }) // 10日前まで | ||||
| 				.andWhere(new Brackets(qb => { | ||||
| 					qb.where(`((note.userId IN (${ followingQuery.getQuery() })) OR (note.userId = :meId))`, { meId: me.id }) | ||||
| 						.orWhere('(note.visibility = \'public\') AND (note.userHost IS NULL)'); | ||||
|   | ||||
| @@ -8,6 +8,7 @@ import { MetaService } from '@/core/MetaService.js'; | ||||
| import ActiveUsersChart from '@/core/chart/charts/active-users.js'; | ||||
| import { DI } from '@/di-symbols.js'; | ||||
| import { RoleService } from '@/core/RoleService.js'; | ||||
| import { IdService } from '@/core/IdService.js'; | ||||
| import { ApiError } from '../../error.js'; | ||||
|  | ||||
| export const meta = { | ||||
| @@ -65,6 +66,7 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { | ||||
| 		private metaService: MetaService, | ||||
| 		private roleService: RoleService, | ||||
| 		private activeUsersChart: ActiveUsersChart, | ||||
| 		private idService: IdService, | ||||
| 	) { | ||||
| 		super(meta, paramDef, async (ps, me) => { | ||||
| 			const policies = await this.roleService.getUserPolicies(me ? me.id : null); | ||||
| @@ -75,7 +77,7 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { | ||||
| 			//#region Construct query | ||||
| 			const query = this.queryService.makePaginationQuery(this.notesRepository.createQueryBuilder('note'), | ||||
| 				ps.sinceId, ps.untilId, ps.sinceDate, ps.untilDate) | ||||
| 				.andWhere('note.createdAt > :minDate', { minDate: new Date(Date.now() - (1000 * 60 * 60 * 24 * 30)) }) // 30日前まで | ||||
| 				.andWhere('note.id > :minId', { minId: this.idService.genId(new Date(Date.now() - (1000 * 60 * 60 * 24 * 10))) }) // 10日前まで | ||||
| 				.andWhere('(note.visibility = \'public\') AND (note.userHost IS NULL)') | ||||
| 				.innerJoinAndSelect('note.user', 'user') | ||||
| 				.leftJoinAndSelect('user.avatar', 'avatar') | ||||
|   | ||||
| @@ -6,6 +6,7 @@ import { QueryService } from '@/core/QueryService.js'; | ||||
| import ActiveUsersChart from '@/core/chart/charts/active-users.js'; | ||||
| import { NoteEntityService } from '@/core/entities/NoteEntityService.js'; | ||||
| import { DI } from '@/di-symbols.js'; | ||||
| import { IdService } from '@/core/IdService.js'; | ||||
|  | ||||
| export const meta = { | ||||
| 	tags: ['notes'], | ||||
| @@ -56,6 +57,7 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { | ||||
| 		private noteEntityService: NoteEntityService, | ||||
| 		private queryService: QueryService, | ||||
| 		private activeUsersChart: ActiveUsersChart, | ||||
| 		private idService: IdService, | ||||
| 	) { | ||||
| 		super(meta, paramDef, async (ps, me) => { | ||||
| 			const followees = await this.followingsRepository.createQueryBuilder('following') | ||||
| @@ -66,7 +68,7 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { | ||||
| 			//#region Construct query | ||||
| 			const query = this.queryService.makePaginationQuery(this.notesRepository.createQueryBuilder('note'), | ||||
| 				ps.sinceId, ps.untilId, ps.sinceDate, ps.untilDate) | ||||
| 				.andWhere('note.createdAt > :minDate', { minDate: new Date(Date.now() - (1000 * 60 * 60 * 24 * 30)) }) // 30日前まで | ||||
| 				.andWhere('note.id > :minId', { minId: this.idService.genId(new Date(Date.now() - (1000 * 60 * 60 * 24 * 10))) }) // 10日前まで | ||||
| 				.innerJoinAndSelect('note.user', 'user') | ||||
| 				.leftJoinAndSelect('user.avatar', 'avatar') | ||||
| 				.leftJoinAndSelect('user.banner', 'banner') | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 syuilo
					syuilo