From a515b6b4d44be5ce3966638701477c0d75a86314 Mon Sep 17 00:00:00 2001 From: Laura Hausmann Date: Wed, 4 Oct 2023 23:06:45 +0200 Subject: [PATCH] [mastodon-client] Fix ordering of conversations --- .../server/api/mastodon/helpers/timeline.ts | 20 +++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/packages/backend/src/server/api/mastodon/helpers/timeline.ts b/packages/backend/src/server/api/mastodon/helpers/timeline.ts index d9e0fe1aa..3b913b9e6 100644 --- a/packages/backend/src/server/api/mastodon/helpers/timeline.ts +++ b/packages/backend/src/server/api/mastodon/helpers/timeline.ts @@ -161,13 +161,9 @@ export class TimelineHelpers { public static async getConversations(user: ILocalUser, maxId: string | undefined, sinceId: string | undefined, minId: string | undefined, limit: number = 20): Promise> { if (limit > 40) limit = 40; - const query = PaginationHelpers.makePaginationQuery( - Notes.createQueryBuilder("note"), - sinceId, - maxId, - minId, - "COALESCE(note.threadId, note.id)", - ) + const sq = Notes.createQueryBuilder("note") + .select("COALESCE(note.threadId, note.id)", "conversationId") + .addSelect("note.id", "latest") .distinctOn(["COALESCE(note.threadId, note.id)"]) .orderBy({"COALESCE(note.threadId, note.id)": minId ? "ASC" : "DESC", "note.id": "DESC"}) .andWhere("note.visibility = 'specified'") @@ -175,7 +171,15 @@ export class TimelineHelpers { new Brackets(qb => { qb.where("note.userId = :userId"); qb.orWhere("note.visibleUserIds @> array[:userId]::varchar[]"); - })) + })); + + const query = PaginationHelpers.makePaginationQuery( + Notes.createQueryBuilder("note"), + sinceId, + maxId, + minId + ) + .innerJoin(`(${sq.getQuery()})`, "sq", "note.id = sq.latest") .setParameters({userId: user.id}) return query.take(limit).getMany().then(p => {