diff options
| author | syuilo <Syuilotan@yahoo.co.jp> | 2023-03-03 20:56:50 +0900 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2023-03-03 20:56:50 +0900 |
| commit | b23a9b1a88f481c50fc9c8f126608b90fab18266 (patch) | |
| tree | 04e4fba228d2c2bb86ab6007be641d5f9e5daa17 /packages/backend/src/core | |
| parent | Merge pull request #10177 from misskey-dev/develop (diff) | |
| parent | 13.9.1 (diff) | |
| download | misskey-b23a9b1a88f481c50fc9c8f126608b90fab18266.tar.gz misskey-b23a9b1a88f481c50fc9c8f126608b90fab18266.tar.bz2 misskey-b23a9b1a88f481c50fc9c8f126608b90fab18266.zip | |
Merge pull request #10181 from misskey-dev/develop
Release: 13.9.1
Diffstat (limited to 'packages/backend/src/core')
3 files changed, 4 insertions, 31 deletions
diff --git a/packages/backend/src/core/entities/DriveFileEntityService.ts b/packages/backend/src/core/entities/DriveFileEntityService.ts index f5b1f98153..158fafa9d5 100644 --- a/packages/backend/src/core/entities/DriveFileEntityService.ts +++ b/packages/backend/src/core/entities/DriveFileEntityService.ts @@ -1,5 +1,5 @@ import { forwardRef, Inject, Injectable } from '@nestjs/common'; -import { DataSource, In } from 'typeorm'; +import { DataSource } from 'typeorm'; import { DI } from '@/di-symbols.js'; import type { NotesRepository, DriveFilesRepository } from '@/models/index.js'; import type { Config } from '@/config.js'; @@ -21,7 +21,6 @@ type PackOptions = { }; import { bindThis } from '@/decorators.js'; import { isMimeImage } from '@/misc/is-mime-image.js'; -import { isNotNull } from '@/misc/is-not-null.js'; @Injectable() export class DriveFileEntityService { @@ -256,29 +255,10 @@ export class DriveFileEntityService { @bindThis public async packMany( - files: DriveFile[], + files: (DriveFile['id'] | DriveFile)[], options?: PackOptions, ): Promise<Packed<'DriveFile'>[]> { const items = await Promise.all(files.map(f => this.packNullable(f, options))); return items.filter((x): x is Packed<'DriveFile'> => x != null); } - - @bindThis - public async packManyByIdsMap( - fileIds: DriveFile['id'][], - options?: PackOptions, - ): Promise<Map<Packed<'DriveFile'>['id'], Packed<'DriveFile'>>> { - const files = await this.driveFilesRepository.findBy({ id: In(fileIds) }); - const packedFiles = await this.packMany(files, options); - return new Map(packedFiles.map(f => [f.id, f])); - } - - @bindThis - public async packManyByIds( - fileIds: DriveFile['id'][], - options?: PackOptions, - ): Promise<Packed<'DriveFile'>[]> { - const filesMap = await this.packManyByIdsMap(fileIds, options); - return fileIds.map(id => filesMap.get(id)).filter(isNotNull); - } } diff --git a/packages/backend/src/core/entities/GalleryPostEntityService.ts b/packages/backend/src/core/entities/GalleryPostEntityService.ts index fb147ae181..ab29e7dba1 100644 --- a/packages/backend/src/core/entities/GalleryPostEntityService.ts +++ b/packages/backend/src/core/entities/GalleryPostEntityService.ts @@ -41,8 +41,7 @@ export class GalleryPostEntityService { title: post.title, description: post.description, fileIds: post.fileIds, - // TODO: packMany causes N+1 queries - files: this.driveFileEntityService.packManyByIds(post.fileIds), + files: this.driveFileEntityService.packMany(post.fileIds), tags: post.tags.length > 0 ? post.tags : undefined, isSensitive: post.isSensitive, likedCount: post.likedCount, diff --git a/packages/backend/src/core/entities/NoteEntityService.ts b/packages/backend/src/core/entities/NoteEntityService.ts index c732a98a11..2ffe5f1c21 100644 --- a/packages/backend/src/core/entities/NoteEntityService.ts +++ b/packages/backend/src/core/entities/NoteEntityService.ts @@ -11,7 +11,6 @@ import type { Note } from '@/models/entities/Note.js'; import type { NoteReaction } from '@/models/entities/NoteReaction.js'; import type { UsersRepository, NotesRepository, FollowingsRepository, PollsRepository, PollVotesRepository, NoteReactionsRepository, ChannelsRepository, DriveFilesRepository } from '@/models/index.js'; import { bindThis } from '@/decorators.js'; -import { isNotNull } from '@/misc/is-not-null.js'; import type { OnModuleInit } from '@nestjs/common'; import type { CustomEmojiService } from '../CustomEmojiService.js'; import type { ReactionService } from '../ReactionService.js'; @@ -258,7 +257,6 @@ export class NoteEntityService implements OnModuleInit { skipHide?: boolean; _hint_?: { myReactions: Map<Note['id'], NoteReaction | null>; - packedFiles: Map<Note['fileIds'][number], Packed<'DriveFile'>>; }; }, ): Promise<Packed<'Note'>> { @@ -286,7 +284,6 @@ export class NoteEntityService implements OnModuleInit { const reactionEmojiNames = Object.keys(note.reactions) .filter(x => x.startsWith(':') && x.includes('@') && !x.includes('@.')) // リモートカスタム絵文字のみ .map(x => this.reactionService.decodeReaction(x).reaction.replaceAll(':', '')); - const packedFiles = options?._hint_?.packedFiles; const packed: Packed<'Note'> = await awaitAll({ id: note.id, @@ -307,7 +304,7 @@ export class NoteEntityService implements OnModuleInit { emojis: host != null ? this.customEmojiService.populateEmojis(note.emojis, host) : undefined, tags: note.tags.length > 0 ? note.tags : undefined, fileIds: note.fileIds, - files: packedFiles != null ? note.fileIds.map(fi => packedFiles.get(fi)).filter(isNotNull) : this.driveFileEntityService.packManyByIds(note.fileIds), + files: this.driveFileEntityService.packMany(note.fileIds), replyId: note.replyId, renoteId: note.renoteId, channelId: note.channelId ?? undefined, @@ -391,14 +388,11 @@ export class NoteEntityService implements OnModuleInit { } await this.customEmojiService.prefetchEmojis(this.customEmojiService.aggregateNoteEmojis(notes)); - const fileIds = notes.flatMap(n => n.fileIds); - const packedFiles = await this.driveFileEntityService.packManyByIdsMap(fileIds); return await Promise.all(notes.map(n => this.pack(n, me, { ...options, _hint_: { myReactions: myReactionsMap, - packedFiles, }, }))); } |