parent
							
								
									e523e54881
								
							
						
					
					
						commit
						f27e4033a6
					
				
					 21 changed files with 240 additions and 27 deletions
				
			
		|  | @ -85,6 +85,7 @@ export class NoteRepository extends Repository<Note> { | |||
| 			detail?: boolean; | ||||
| 			skipHide?: boolean; | ||||
| 			_hint_?: { | ||||
| 				emojis: Emoji[] | null; | ||||
| 				myReactions: Map<Note['id'], NoteReaction | null>; | ||||
| 			}; | ||||
| 		} | ||||
|  | @ -141,11 +142,43 @@ export class NoteRepository extends Repository<Note> { | |||
| 		 * @param reactionNames Note等にリアクションされたカスタム絵文字名 (:は含めない) | ||||
| 		 */ | ||||
| 		async function populateEmojis(emojiNames: string[], noteUserHost: string | null, reactionNames: string[]) { | ||||
| 			const customReactions = reactionNames?.map(x => decodeReaction(x)).filter(x => x.name); | ||||
| 
 | ||||
| 			let all = [] as { | ||||
| 				name: string, | ||||
| 				url: string | ||||
| 			}[]; | ||||
| 
 | ||||
| 			// 与えられたhintだけで十分(=新たにクエリする必要がない)かどうかを表すフラグ
 | ||||
| 			let enough = true; | ||||
| 			if (options?._hint_?.emojis) { | ||||
| 				for (const name of emojiNames) { | ||||
| 					const matched = options._hint_.emojis.find(x => x.name === name && x.host === noteUserHost); | ||||
| 					if (matched) { | ||||
| 						all.push({ | ||||
| 							name: matched.name, | ||||
| 							url: matched.url, | ||||
| 						}); | ||||
| 					} else { | ||||
| 						enough = false; | ||||
| 					} | ||||
| 				} | ||||
| 				for (const customReaction of customReactions) { | ||||
| 					const matched = options._hint_.emojis.find(x => x.name === customReaction.name && x.host === customReaction.host); | ||||
| 					if (matched) { | ||||
| 						all.push({ | ||||
| 							name: `${matched.name}@${matched.host || '.'}`,	// @host付きでローカルは.
 | ||||
| 							url: matched.url, | ||||
| 						}); | ||||
| 					} else { | ||||
| 						enough = false; | ||||
| 					} | ||||
| 				} | ||||
| 			} else { | ||||
| 				enough = false; | ||||
| 			} | ||||
| 			if (enough) return all; | ||||
| 
 | ||||
| 			// カスタム絵文字
 | ||||
| 			if (emojiNames?.length > 0) { | ||||
| 				const tmp = await Emojis.find({ | ||||
|  | @ -164,8 +197,6 @@ export class NoteRepository extends Repository<Note> { | |||
| 				all = concat([all, tmp]); | ||||
| 			} | ||||
| 
 | ||||
| 			const customReactions = reactionNames?.map(x => decodeReaction(x)).filter(x => x.name); | ||||
| 
 | ||||
| 			if (customReactions?.length > 0) { | ||||
| 				const where = [] as {}[]; | ||||
| 
 | ||||
|  | @ -230,7 +261,12 @@ export class NoteRepository extends Repository<Note> { | |||
| 			id: note.id, | ||||
| 			createdAt: note.createdAt.toISOString(), | ||||
| 			userId: note.userId, | ||||
| 			user: Users.pack(note.user || note.userId, meId), | ||||
| 			user: Users.pack(note.user || note.userId, meId, { | ||||
| 				detail: false, | ||||
| 				_hint_: { | ||||
| 					emojis: options?._hint_?.emojis || null | ||||
| 				} | ||||
| 			}), | ||||
| 			text: text, | ||||
| 			cw: note.cw, | ||||
| 			visibility: note.visibility, | ||||
|  | @ -258,12 +294,12 @@ export class NoteRepository extends Repository<Note> { | |||
| 			_prId_: (note as any)._prId_ || undefined, | ||||
| 
 | ||||
| 			...(opts.detail ? { | ||||
| 				reply: note.replyId ? this.pack(note.replyId, meId, { | ||||
| 				reply: note.replyId ? this.pack(note.reply || note.replyId, meId, { | ||||
| 					detail: false, | ||||
| 					_hint_: options?._hint_ | ||||
| 				}) : undefined, | ||||
| 
 | ||||
| 				renote: note.renoteId ? this.pack(note.renoteId, meId, { | ||||
| 				renote: note.renoteId ? this.pack(note.renote || note.renoteId, meId, { | ||||
| 					detail: true, | ||||
| 					_hint_: options?._hint_ | ||||
| 				}) : undefined, | ||||
|  | @ -314,10 +350,48 @@ export class NoteRepository extends Repository<Note> { | |||
| 			} | ||||
| 		} | ||||
| 
 | ||||
| 		// TODO: ここら辺の処理をaggregateEmojisみたいな関数に切り出したい
 | ||||
| 		let emojisWhere: any[] = []; | ||||
| 		for (const note of notes) { | ||||
| 			if (typeof note !== 'object') continue; | ||||
| 			emojisWhere.push({ | ||||
| 				name: In(note.emojis), | ||||
| 				host: note.userHost | ||||
| 			}); | ||||
| 			if (note.renote) { | ||||
| 				emojisWhere.push({ | ||||
| 					name: In(note.renote.emojis), | ||||
| 					host: note.renote.userHost | ||||
| 				}); | ||||
| 				if (note.renote.user) { | ||||
| 					emojisWhere.push({ | ||||
| 						name: In(note.renote.user.emojis), | ||||
| 						host: note.renote.userHost | ||||
| 					}); | ||||
| 				} | ||||
| 			} | ||||
| 			const customReactions = Object.keys(note.reactions).map(x => decodeReaction(x)).filter(x => x.name); | ||||
| 			emojisWhere = emojisWhere.concat(customReactions.map(x => ({ | ||||
| 				name: x.name, | ||||
| 				host: x.host | ||||
| 			}))); | ||||
| 			if (note.user) { | ||||
| 				emojisWhere.push({ | ||||
| 					name: In(note.user.emojis), | ||||
| 					host: note.userHost | ||||
| 				}); | ||||
| 			} | ||||
| 		} | ||||
| 		const emojis = emojisWhere.length > 0 ? await Emojis.find({ | ||||
| 			where: emojisWhere, | ||||
| 			select: ['name', 'host', 'url'] | ||||
| 		}) : null; | ||||
| 
 | ||||
| 		return await Promise.all(notes.map(n => this.pack(n, me, { | ||||
| 			...options, | ||||
| 			_hint_: { | ||||
| 				myReactions: myReactionsMap | ||||
| 				myReactions: myReactionsMap, | ||||
| 				emojis: emojis | ||||
| 			} | ||||
| 		}))); | ||||
| 	} | ||||
|  |  | |||
|  | @ -1,11 +1,13 @@ | |||
| import { EntityRepository, In, Repository } from 'typeorm'; | ||||
| import { Users, Notes, UserGroupInvitations, AccessTokens, NoteReactions } from '..'; | ||||
| import { Users, Notes, UserGroupInvitations, AccessTokens, NoteReactions, Emojis } from '..'; | ||||
| import { Notification } from '../entities/notification'; | ||||
| import { awaitAll } from '../../prelude/await-all'; | ||||
| import { SchemaType } from '../../misc/schema'; | ||||
| import { Note } from '../entities/note'; | ||||
| import { NoteReaction } from '../entities/note-reaction'; | ||||
| import { User } from '../entities/user'; | ||||
| import { decodeReaction } from '../../misc/reaction-lib'; | ||||
| import { Emoji } from '../entities/emoji'; | ||||
| 
 | ||||
| export type PackedNotification = SchemaType<typeof packedNotificationSchema>; | ||||
| 
 | ||||
|  | @ -15,6 +17,7 @@ export class NotificationRepository extends Repository<Notification> { | |||
| 		src: Notification['id'] | Notification, | ||||
| 		options: { | ||||
| 			_hintForEachNotes_: { | ||||
| 				emojis: Emoji[] | null; | ||||
| 				myReactions: Map<Note['id'], NoteReaction | null>; | ||||
| 			}; | ||||
| 		} | ||||
|  | @ -98,9 +101,47 @@ export class NotificationRepository extends Repository<Notification> { | |||
| 			myReactionsMap.set(target, myReactions.find(reaction => reaction.noteId === target) || null); | ||||
| 		} | ||||
| 
 | ||||
| 		// TODO: ここら辺の処理をaggregateEmojisみたいな関数に切り出したい
 | ||||
| 		let emojisWhere: any[] = []; | ||||
| 		for (const note of notes) { | ||||
| 			if (typeof note !== 'object') continue; | ||||
| 			emojisWhere.push({ | ||||
| 				name: In(note.emojis), | ||||
| 				host: note.userHost | ||||
| 			}); | ||||
| 			if (note.renote) { | ||||
| 				emojisWhere.push({ | ||||
| 					name: In(note.renote.emojis), | ||||
| 					host: note.renote.userHost | ||||
| 				}); | ||||
| 				if (note.renote.user) { | ||||
| 					emojisWhere.push({ | ||||
| 						name: In(note.renote.user.emojis), | ||||
| 						host: note.renote.userHost | ||||
| 					}); | ||||
| 				} | ||||
| 			} | ||||
| 			const customReactions = Object.keys(note.reactions).map(x => decodeReaction(x)).filter(x => x.name); | ||||
| 			emojisWhere = emojisWhere.concat(customReactions.map(x => ({ | ||||
| 				name: x.name, | ||||
| 				host: x.host | ||||
| 			}))); | ||||
| 			if (note.user) { | ||||
| 				emojisWhere.push({ | ||||
| 					name: In(note.user.emojis), | ||||
| 					host: note.userHost | ||||
| 				}); | ||||
| 			} | ||||
| 		} | ||||
| 		const emojis = emojisWhere.length > 0 ? await Emojis.find({ | ||||
| 			where: emojisWhere, | ||||
| 			select: ['name', 'host', 'url'] | ||||
| 		}) : null; | ||||
| 
 | ||||
| 		return await Promise.all(notifications.map(x => this.pack(x, { | ||||
| 			_hintForEachNotes_: { | ||||
| 				myReactions: myReactionsMap | ||||
| 				myReactions: myReactionsMap, | ||||
| 				emojis: emojis, | ||||
| 			} | ||||
| 		}))); | ||||
| 	} | ||||
|  |  | |||
|  | @ -5,6 +5,7 @@ import { Emojis, Notes, NoteUnreads, FollowRequests, Notifications, MessagingMes | |||
| import config from '../../config'; | ||||
| import { SchemaType } from '../../misc/schema'; | ||||
| import { awaitAll } from '../../prelude/await-all'; | ||||
| import { Emoji } from '../entities/emoji'; | ||||
| 
 | ||||
| export type PackedUser = SchemaType<typeof packedUserSchema>; | ||||
| 
 | ||||
|  | @ -149,6 +150,9 @@ export class UserRepository extends Repository<User> { | |||
| 		options?: { | ||||
| 			detail?: boolean, | ||||
| 			includeSecrets?: boolean, | ||||
| 			_hint_?: { | ||||
| 				emojis: Emoji[] | null; | ||||
| 			}; | ||||
| 		} | ||||
| 	): Promise<PackedUser> { | ||||
| 		const opts = Object.assign({ | ||||
|  | @ -166,6 +170,34 @@ export class UserRepository extends Repository<User> { | |||
| 		}) : []; | ||||
| 		const profile = opts.detail ? await UserProfiles.findOneOrFail(user.id) : null; | ||||
| 
 | ||||
| 		let emojis: Emoji[] = []; | ||||
| 		if (user.emojis.length > 0) { | ||||
| 			// 与えられたhintだけで十分(=新たにクエリする必要がない)かどうかを表すフラグ
 | ||||
| 			let enough = true; | ||||
| 			if (options?._hint_?.emojis) { | ||||
| 				for (const name of user.emojis) { | ||||
| 					const matched = options._hint_.emojis.find(x => x.name === name && x.host === user.host); | ||||
| 					if (matched) { | ||||
| 						emojis.push(matched); | ||||
| 					} else { | ||||
| 						enough = false; | ||||
| 					} | ||||
| 				} | ||||
| 			} else { | ||||
| 				enough = false; | ||||
| 			} | ||||
| 
 | ||||
| 			if (!enough) { | ||||
| 				emojis = await Emojis.find({ | ||||
| 					where: { | ||||
| 						name: In(user.emojis), | ||||
| 						host: user.host | ||||
| 					}, | ||||
| 					select: ['name', 'host', 'url', 'aliases'] | ||||
| 				}); | ||||
| 			} | ||||
| 		} | ||||
| 
 | ||||
| 		const falsy = opts.detail ? false : undefined; | ||||
| 
 | ||||
| 		const packed = { | ||||
|  | @ -190,13 +222,7 @@ export class UserRepository extends Repository<User> { | |||
| 			} : undefined) : undefined, | ||||
| 
 | ||||
| 			// カスタム絵文字添付
 | ||||
| 			emojis: user.emojis.length > 0 ? Emojis.find({ | ||||
| 				where: { | ||||
| 					name: In(user.emojis), | ||||
| 					host: user.host | ||||
| 				}, | ||||
| 				select: ['name', 'host', 'url', 'aliases'] | ||||
| 			}) : [], | ||||
| 			emojis: emojis, | ||||
| 
 | ||||
| 			...(opts.detail ? { | ||||
| 				url: profile!.url, | ||||
|  |  | |||
|  | @ -74,6 +74,10 @@ export default define(meta, async (ps, user) => { | |||
| 	const query = makePaginationQuery(Notes.createQueryBuilder('note'), ps.sinceId, ps.untilId) | ||||
| 		.andWhere(`note.id IN (${ antennaQuery.getQuery() })`) | ||||
| 		.leftJoinAndSelect('note.user', 'user') | ||||
| 		.leftJoinAndSelect('note.reply', 'reply') | ||||
| 		.leftJoinAndSelect('note.renote', 'renote') | ||||
| 		.leftJoinAndSelect('reply.user', 'replyUser') | ||||
| 		.leftJoinAndSelect('renote.user', 'renoteUser') | ||||
| 		.setParameters(antennaQuery.getParameters()); | ||||
| 
 | ||||
| 	generateVisibilityQuery(query, user); | ||||
|  |  | |||
|  | @ -88,6 +88,10 @@ export default define(meta, async (ps, user) => { | |||
| 	const query = makePaginationQuery(Notes.createQueryBuilder('note'), ps.sinceId, ps.untilId, ps.sinceDate, ps.untilDate) | ||||
| 		.andWhere('note.channelId = :channelId', { channelId: channel.id }) | ||||
| 		.leftJoinAndSelect('note.user', 'user') | ||||
| 		.leftJoinAndSelect('note.reply', 'reply') | ||||
| 		.leftJoinAndSelect('note.renote', 'renote') | ||||
| 		.leftJoinAndSelect('reply.user', 'replyUser') | ||||
| 		.leftJoinAndSelect('renote.user', 'renoteUser') | ||||
| 		.leftJoinAndSelect('note.channel', 'channel'); | ||||
| 	//#endregion
 | ||||
| 
 | ||||
|  |  | |||
|  | @ -72,6 +72,10 @@ export default define(meta, async (ps, user) => { | |||
| 	const query = makePaginationQuery(Notes.createQueryBuilder('note'), ps.sinceId, ps.untilId) | ||||
| 		.andWhere(`note.id IN (${ clipQuery.getQuery() })`) | ||||
| 		.leftJoinAndSelect('note.user', 'user') | ||||
| 		.leftJoinAndSelect('note.reply', 'reply') | ||||
| 		.leftJoinAndSelect('note.renote', 'renote') | ||||
| 		.leftJoinAndSelect('reply.user', 'replyUser') | ||||
| 		.leftJoinAndSelect('renote.user', 'renoteUser') | ||||
| 		.setParameters(clipQuery.getParameters()); | ||||
| 
 | ||||
| 	if (user) { | ||||
|  |  | |||
|  | @ -87,7 +87,11 @@ export default define(meta, async (ps, user) => { | |||
| 		.andWhere(`notification.notifieeId = :meId`, { meId: user.id }) | ||||
| 		.leftJoinAndSelect('notification.notifier', 'notifier') | ||||
| 		.leftJoinAndSelect('notification.note', 'note') | ||||
| 		.leftJoinAndSelect('note.user', 'user'); | ||||
| 		.leftJoinAndSelect('note.user', 'user') | ||||
| 		.leftJoinAndSelect('note.reply', 'reply') | ||||
| 		.leftJoinAndSelect('note.renote', 'renote') | ||||
| 		.leftJoinAndSelect('reply.user', 'replyUser') | ||||
| 		.leftJoinAndSelect('renote.user', 'renoteUser'); | ||||
| 
 | ||||
| 	query.andWhere(`notification.notifierId NOT IN (${ mutingQuery.getQuery() })`); | ||||
| 	query.setParameters(mutingQuery.getParameters()); | ||||
|  |  | |||
|  | @ -76,7 +76,11 @@ export default define(meta, async (ps) => { | |||
| 	const query = makePaginationQuery(Notes.createQueryBuilder('note'), ps.sinceId, ps.untilId) | ||||
| 		.andWhere(`note.visibility = 'public'`) | ||||
| 		.andWhere(`note.localOnly = FALSE`) | ||||
| 		.leftJoinAndSelect('note.user', 'user'); | ||||
| 		.leftJoinAndSelect('note.user', 'user') | ||||
| 		.leftJoinAndSelect('note.reply', 'reply') | ||||
| 		.leftJoinAndSelect('note.renote', 'renote') | ||||
| 		.leftJoinAndSelect('reply.user', 'replyUser') | ||||
| 		.leftJoinAndSelect('renote.user', 'renoteUser'); | ||||
| 
 | ||||
| 	if (ps.local) { | ||||
| 		query.andWhere('note.userHost IS NULL'); | ||||
|  |  | |||
|  | @ -64,7 +64,11 @@ export default define(meta, async (ps, user) => { | |||
| 				})); | ||||
| 			})); | ||||
| 		})) | ||||
| 		.leftJoinAndSelect('note.user', 'user'); | ||||
| 		.leftJoinAndSelect('note.user', 'user') | ||||
| 		.leftJoinAndSelect('note.reply', 'reply') | ||||
| 		.leftJoinAndSelect('note.renote', 'renote') | ||||
| 		.leftJoinAndSelect('reply.user', 'replyUser') | ||||
| 		.leftJoinAndSelect('renote.user', 'renoteUser'); | ||||
| 
 | ||||
| 	generateVisibilityQuery(query, user); | ||||
| 	if (user) generateMutedUserQuery(query, user); | ||||
|  |  | |||
|  | @ -49,7 +49,11 @@ export default define(meta, async (ps, user) => { | |||
| 		.andWhere(`note.score > 0`) | ||||
| 		.andWhere(`note.createdAt > :date`, { date: new Date(Date.now() - day) }) | ||||
| 		.andWhere(`note.visibility = 'public'`) | ||||
| 		.leftJoinAndSelect('note.user', 'user'); | ||||
| 		.leftJoinAndSelect('note.user', 'user') | ||||
| 		.leftJoinAndSelect('note.reply', 'reply') | ||||
| 		.leftJoinAndSelect('note.renote', 'renote') | ||||
| 		.leftJoinAndSelect('reply.user', 'replyUser') | ||||
| 		.leftJoinAndSelect('renote.user', 'renoteUser'); | ||||
| 
 | ||||
| 	if (user) generateMutedUserQuery(query, user); | ||||
| 
 | ||||
|  |  | |||
|  | @ -81,7 +81,11 @@ export default define(meta, async (ps, user) => { | |||
| 			ps.sinceId, ps.untilId, ps.sinceDate, ps.untilDate) | ||||
| 		.andWhere('note.visibility = \'public\'') | ||||
| 		.andWhere('note.channelId IS NULL') | ||||
| 		.leftJoinAndSelect('note.user', 'user'); | ||||
| 		.leftJoinAndSelect('note.user', 'user') | ||||
| 		.leftJoinAndSelect('note.reply', 'reply') | ||||
| 		.leftJoinAndSelect('note.renote', 'renote') | ||||
| 		.leftJoinAndSelect('reply.user', 'replyUser') | ||||
| 		.leftJoinAndSelect('renote.user', 'renoteUser'); | ||||
| 
 | ||||
| 	generateRepliesQuery(query, user); | ||||
| 	if (user) generateMutedUserQuery(query, user); | ||||
|  |  | |||
|  | @ -130,6 +130,10 @@ export default define(meta, async (ps, user) => { | |||
| 				.orWhere('(note.visibility = \'public\') AND (note.userHost IS NULL)'); | ||||
| 		})) | ||||
| 		.leftJoinAndSelect('note.user', 'user') | ||||
| 		.leftJoinAndSelect('note.reply', 'reply') | ||||
| 		.leftJoinAndSelect('note.renote', 'renote') | ||||
| 		.leftJoinAndSelect('reply.user', 'replyUser') | ||||
| 		.leftJoinAndSelect('renote.user', 'renoteUser') | ||||
| 		.setParameters(followingQuery.getParameters()); | ||||
| 
 | ||||
| 	generateChannelQuery(query, user); | ||||
|  |  | |||
|  | @ -98,7 +98,11 @@ export default define(meta, async (ps, user) => { | |||
| 	const query = makePaginationQuery(Notes.createQueryBuilder('note'), | ||||
| 			ps.sinceId, ps.untilId, ps.sinceDate, ps.untilDate) | ||||
| 		.andWhere('(note.visibility = \'public\') AND (note.userHost IS NULL)') | ||||
| 		.leftJoinAndSelect('note.user', 'user'); | ||||
| 		.leftJoinAndSelect('note.user', 'user') | ||||
| 		.leftJoinAndSelect('note.reply', 'reply') | ||||
| 		.leftJoinAndSelect('note.renote', 'renote') | ||||
| 		.leftJoinAndSelect('reply.user', 'replyUser') | ||||
| 		.leftJoinAndSelect('renote.user', 'renoteUser'); | ||||
| 
 | ||||
| 	generateChannelQuery(query, user); | ||||
| 	generateRepliesQuery(query, user); | ||||
|  |  | |||
|  | @ -63,7 +63,11 @@ export default define(meta, async (ps, user) => { | |||
| 			.where(`:meId = ANY(note.mentions)`, { meId: user.id }) | ||||
| 			.orWhere(`:meId = ANY(note.visibleUserIds)`, { meId: user.id }); | ||||
| 		})) | ||||
| 		.leftJoinAndSelect('note.user', 'user'); | ||||
| 		.leftJoinAndSelect('note.user', 'user') | ||||
| 		.leftJoinAndSelect('note.reply', 'reply') | ||||
| 		.leftJoinAndSelect('note.renote', 'renote') | ||||
| 		.leftJoinAndSelect('reply.user', 'replyUser') | ||||
| 		.leftJoinAndSelect('renote.user', 'renoteUser'); | ||||
| 
 | ||||
| 	generateVisibilityQuery(query, user); | ||||
| 	generateMutedUserQuery(query, user); | ||||
|  |  | |||
|  | @ -68,7 +68,11 @@ export default define(meta, async (ps, user) => { | |||
| 
 | ||||
| 	const query = makePaginationQuery(Notes.createQueryBuilder('note'), ps.sinceId, ps.untilId) | ||||
| 		.andWhere(`note.renoteId = :renoteId`, { renoteId: note.id }) | ||||
| 		.leftJoinAndSelect('note.user', 'user'); | ||||
| 		.leftJoinAndSelect('note.user', 'user') | ||||
| 		.leftJoinAndSelect('note.reply', 'reply') | ||||
| 		.leftJoinAndSelect('note.renote', 'renote') | ||||
| 		.leftJoinAndSelect('reply.user', 'replyUser') | ||||
| 		.leftJoinAndSelect('renote.user', 'renoteUser'); | ||||
| 
 | ||||
| 	generateVisibilityQuery(query, user); | ||||
| 	if (user) generateMutedUserQuery(query, user); | ||||
|  |  | |||
|  | @ -59,7 +59,11 @@ export const meta = { | |||
| export default define(meta, async (ps, user) => { | ||||
| 	const query = makePaginationQuery(Notes.createQueryBuilder('note'), ps.sinceId, ps.untilId) | ||||
| 		.andWhere('note.replyId = :replyId', { replyId: ps.noteId }) | ||||
| 		.leftJoinAndSelect('note.user', 'user'); | ||||
| 		.leftJoinAndSelect('note.user', 'user') | ||||
| 		.leftJoinAndSelect('note.reply', 'reply') | ||||
| 		.leftJoinAndSelect('note.renote', 'renote') | ||||
| 		.leftJoinAndSelect('reply.user', 'replyUser') | ||||
| 		.leftJoinAndSelect('renote.user', 'renoteUser'); | ||||
| 
 | ||||
| 	generateVisibilityQuery(query, user); | ||||
| 	if (user) generateMutedUserQuery(query, user); | ||||
|  |  | |||
|  | @ -95,7 +95,11 @@ export const meta = { | |||
| 
 | ||||
| export default define(meta, async (ps, me) => { | ||||
| 	const query = makePaginationQuery(Notes.createQueryBuilder('note'), ps.sinceId, ps.untilId) | ||||
| 		.leftJoinAndSelect('note.user', 'user'); | ||||
| 		.leftJoinAndSelect('note.user', 'user') | ||||
| 		.leftJoinAndSelect('note.reply', 'reply') | ||||
| 		.leftJoinAndSelect('note.renote', 'renote') | ||||
| 		.leftJoinAndSelect('reply.user', 'replyUser') | ||||
| 		.leftJoinAndSelect('renote.user', 'renoteUser'); | ||||
| 
 | ||||
| 	generateVisibilityQuery(query, me); | ||||
| 	if (me) generateMutedUserQuery(query, me); | ||||
|  |  | |||
|  | @ -79,7 +79,11 @@ export default define(meta, async (ps, me) => { | |||
| 
 | ||||
| 		query | ||||
| 			.andWhere('note.text ILIKE :q', { q: `%${ps.query}%` }) | ||||
| 			.leftJoinAndSelect('note.user', 'user'); | ||||
| 			.leftJoinAndSelect('note.user', 'user') | ||||
| 			.leftJoinAndSelect('note.reply', 'reply') | ||||
| 			.leftJoinAndSelect('note.renote', 'renote') | ||||
| 			.leftJoinAndSelect('reply.user', 'replyUser') | ||||
| 			.leftJoinAndSelect('renote.user', 'renoteUser'); | ||||
| 
 | ||||
| 		generateVisibilityQuery(query, me); | ||||
| 		if (me) generateMutedUserQuery(query, me); | ||||
|  |  | |||
|  | @ -123,6 +123,10 @@ export default define(meta, async (ps, user) => { | |||
| 			if (hasFollowing) qb.orWhere(`note.userId IN (${ followingQuery.getQuery() })`); | ||||
| 		})) | ||||
| 		.leftJoinAndSelect('note.user', 'user') | ||||
| 		.leftJoinAndSelect('note.reply', 'reply') | ||||
| 		.leftJoinAndSelect('note.renote', 'renote') | ||||
| 		.leftJoinAndSelect('reply.user', 'replyUser') | ||||
| 		.leftJoinAndSelect('renote.user', 'renoteUser') | ||||
| 		.setParameters(followingQuery.getParameters()); | ||||
| 
 | ||||
| 	generateChannelQuery(query, user); | ||||
|  |  | |||
|  | @ -131,6 +131,10 @@ export default define(meta, async (ps, user) => { | |||
| 	const query = makePaginationQuery(Notes.createQueryBuilder('note'), ps.sinceId, ps.untilId) | ||||
| 		.andWhere(`note.userId IN (${ listQuery.getQuery() })`) | ||||
| 		.leftJoinAndSelect('note.user', 'user') | ||||
| 		.leftJoinAndSelect('note.reply', 'reply') | ||||
| 		.leftJoinAndSelect('note.renote', 'renote') | ||||
| 		.leftJoinAndSelect('reply.user', 'replyUser') | ||||
| 		.leftJoinAndSelect('renote.user', 'renoteUser') | ||||
| 		.setParameters(listQuery.getParameters()); | ||||
| 
 | ||||
| 	generateVisibilityQuery(query, user); | ||||
|  |  | |||
|  | @ -131,7 +131,11 @@ export default define(meta, async (ps, me) => { | |||
| 	//#region Construct query
 | ||||
| 	const query = makePaginationQuery(Notes.createQueryBuilder('note'), ps.sinceId, ps.untilId, ps.sinceDate, ps.untilDate) | ||||
| 		.andWhere('note.userId = :userId', { userId: user.id }) | ||||
| 		.leftJoinAndSelect('note.user', 'user'); | ||||
| 		.leftJoinAndSelect('note.user', 'user') | ||||
| 		.leftJoinAndSelect('note.reply', 'reply') | ||||
| 		.leftJoinAndSelect('note.renote', 'renote') | ||||
| 		.leftJoinAndSelect('reply.user', 'replyUser') | ||||
| 		.leftJoinAndSelect('renote.user', 'renoteUser'); | ||||
| 
 | ||||
| 	generateVisibilityQuery(query, me); | ||||
| 	if (me) generateMutedUserQuery(query, me, user); | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue