diff options
Diffstat (limited to 'packages/backend/src/core/NoteCreateService.ts')
| -rw-r--r-- | packages/backend/src/core/NoteCreateService.ts | 25 |
1 files changed, 24 insertions, 1 deletions
diff --git a/packages/backend/src/core/NoteCreateService.ts b/packages/backend/src/core/NoteCreateService.ts index c252336f99..17631eea89 100644 --- a/packages/backend/src/core/NoteCreateService.ts +++ b/packages/backend/src/core/NoteCreateService.ts @@ -14,7 +14,8 @@ import { extractCustomEmojisFromMfm } from '@/misc/extract-custom-emojis-from-mf import { extractHashtags } from '@/misc/extract-hashtags.js'; import type { IMentionedRemoteUsers } from '@/models/Note.js'; import { MiNote } from '@/models/Note.js'; -import type { ChannelFollowingsRepository, ChannelsRepository, FollowingsRepository, InstancesRepository, MiFollowing, MutingsRepository, NotesRepository, NoteThreadMutingsRepository, UserListMembershipsRepository, UserProfilesRepository, UsersRepository } from '@/models/_.js'; +import { LatestNote } from '@/models/LatestNote.js'; +import type { ChannelFollowingsRepository, ChannelsRepository, FollowingsRepository, InstancesRepository, LatestNotesRepository, MiFollowing, MutingsRepository, NotesRepository, NoteThreadMutingsRepository, UserListMembershipsRepository, UserProfilesRepository, UsersRepository } from '@/models/_.js'; import type { MiDriveFile } from '@/models/DriveFile.js'; import type { MiApp } from '@/models/App.js'; import { concat } from '@/misc/prelude/array.js'; @@ -170,6 +171,9 @@ export class NoteCreateService implements OnApplicationShutdown { @Inject(DI.notesRepository) private notesRepository: NotesRepository, + @Inject(DI.latestNotesRepository) + private latestNotesRepository: LatestNotesRepository, + @Inject(DI.mutingsRepository) private mutingsRepository: MutingsRepository, @@ -514,6 +518,8 @@ export class NoteCreateService implements OnApplicationShutdown { await this.notesRepository.insert(insert); } + await this.updateLatestNote(insert); + return insert; } catch (e) { // duplicate key error @@ -1125,4 +1131,21 @@ export class NoteCreateService implements OnApplicationShutdown { public onApplicationShutdown(signal?: string | undefined): void { this.dispose(); } + + private async updateLatestNote(note: MiNote) { + // Ignore DMs + if (note.visibility === 'specified') return; + + // Make sure that this isn't an *older* post. + // We can get older posts through replies, lookups, etc. + const currentLatest = await this.latestNotesRepository.findOneBy({ userId: note.userId }); + if (currentLatest != null && currentLatest.userId >= note.id) return; + + // Record this as the latest note for the given user + const latestNote = new LatestNote({ + userId: note.userId, + noteId: note.id, + }); + await this.latestNotesRepository.upsert(latestNote, ['userId']); + } } |