summaryrefslogtreecommitdiff
path: root/packages/backend/src/server/api/endpoints/notes
diff options
context:
space:
mode:
authorHazelnoot <acomputerdog@gmail.com>2024-10-21 14:18:34 -0400
committerHazelnoot <acomputerdog@gmail.com>2024-10-21 17:55:06 -0400
commit6430a191f7d291f67d3fa7788383533fce1558c2 (patch)
treee49260ed8ccd8d9c196f1fa866eb35dbad39ad35 /packages/backend/src/server/api/endpoints/notes
parentmerge: Re-add missing JP i18n string for allowClickingNotifications (!702) (diff)
downloadsharkey-6430a191f7d291f67d3fa7788383533fce1558c2.tar.gz
sharkey-6430a191f7d291f67d3fa7788383533fce1558c2.tar.bz2
sharkey-6430a191f7d291f67d3fa7788383533fce1558c2.zip
fix duplicate users in the following feed
Diffstat (limited to 'packages/backend/src/server/api/endpoints/notes')
-rw-r--r--packages/backend/src/server/api/endpoints/notes/following.ts38
1 files changed, 26 insertions, 12 deletions
diff --git a/packages/backend/src/server/api/endpoints/notes/following.ts b/packages/backend/src/server/api/endpoints/notes/following.ts
index 83e8f404e9..5df52e4045 100644
--- a/packages/backend/src/server/api/endpoints/notes/following.ts
+++ b/packages/backend/src/server/api/endpoints/notes/following.ts
@@ -63,7 +63,32 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint-
.setParameter('me', me.id)
// Limit to latest notes
- .innerJoin(SkLatestNote, 'latest', 'note.id = latest.note_id')
+ .innerJoin(
+ (sub: SelectQueryBuilder<SkLatestNote>) => {
+ sub
+ .from(SkLatestNote, 'latest')
+
+ // Return only one note per user
+ .addSelect('latest.user_id', 'user_id')
+ .addSelect('MAX(latest.note_id)', 'note_id')
+ .groupBy('latest.user_id');
+
+ // Match selected note types.
+ if (!ps.includeNonPublic) {
+ sub.andWhere('latest.is_public = true');
+ }
+ if (!ps.includeReplies) {
+ sub.andWhere('latest.is_reply = false');
+ }
+ if (!ps.includeQuotes) {
+ sub.andWhere('latest.is_quote = false');
+ }
+
+ return sub;
+ },
+ 'latest',
+ 'note.id = latest.note_id',
+ )
// Avoid N+1 queries from the "pack" method
.innerJoinAndSelect('note.user', 'user')
@@ -87,17 +112,6 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint-
query.andWhere('note."fileIds" != \'{}\'');
}
- // Match selected note types.
- if (!ps.includeNonPublic) {
- query.andWhere('latest.is_public');
- }
- if (!ps.includeReplies) {
- query.andWhere('latest.is_reply = false');
- }
- if (!ps.includeQuotes) {
- query.andWhere('latest.is_quote = false');
- }
-
// Match selected user types.
if (!ps.includeBots) {
query.andWhere('"user"."isBot" = false');