summaryrefslogtreecommitdiff
path: root/packages/backend/src/core/NoteCreateService.ts
diff options
context:
space:
mode:
Diffstat (limited to 'packages/backend/src/core/NoteCreateService.ts')
-rw-r--r--packages/backend/src/core/NoteCreateService.ts25
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']);
+ }
}