From 3c279983bc2dcea5c1b95fbf8138989bb3f09471 Mon Sep 17 00:00:00 2001 From: Timon Date: Tue, 18 Aug 2026 23:38:58 +0200 Subject: [PATCH] fix(server): Sort stacked assets by creation date (#24033) * feat: add ordering by file creation date in asset and stack repositories * refactor: update asset aggregation to include JSON formatting and ordering by creation date * refactor: add ordering by file creation date in asset aggregation queries * fix: types --------- Co-authored-by: Jason Rasmussen --- server/src/queries/stack.repository.sql | 4 ++++ server/src/repositories/asset.repository.ts | 8 ++++---- server/src/repositories/stack.repository.ts | 3 ++- 3 files changed, 10 insertions(+), 5 deletions(-) diff --git a/server/src/queries/stack.repository.sql b/server/src/queries/stack.repository.sql index b5f1dc7d1..88e21d653 100644 --- a/server/src/queries/stack.repository.sql +++ b/server/src/queries/stack.repository.sql @@ -54,6 +54,8 @@ select "asset"."deletedAt" is null and "asset"."stackId" = "stack"."id" and "asset"."visibility" in ('archive', 'timeline') + order by + "asset"."fileCreatedAt" asc ) as agg ) as "assets" from @@ -139,6 +141,8 @@ select "asset"."deletedAt" is null and "asset"."stackId" = "stack"."id" and "asset"."visibility" in ('archive', 'timeline') + order by + "asset"."fileCreatedAt" asc ) as agg ) as "assets" from diff --git a/server/src/repositories/asset.repository.ts b/server/src/repositories/asset.repository.ts index b3f23399c..5c3d4addc 100644 --- a/server/src/repositories/asset.repository.ts +++ b/server/src/repositories/asset.repository.ts @@ -594,10 +594,10 @@ export class AssetRepository { eb .selectFrom('asset as stacked') .selectAll('stack') - .select((eb) => - eb - .fn>>('array_agg', [eb.table('stacked')]) - .as('assets'), + .select( + sql< + ShallowDehydrateObject>[] + >`array_agg(to_json(stacked) ORDER BY stacked."fileCreatedAt" ASC)`.as('assets'), ) .whereRef('stacked.stackId', '=', 'stack.id') .whereRef('stacked.id', '!=', 'stack.primaryAssetId') diff --git a/server/src/repositories/stack.repository.ts b/server/src/repositories/stack.repository.ts index d313d682b..1cb0b33fc 100644 --- a/server/src/repositories/stack.repository.ts +++ b/server/src/repositories/stack.repository.ts @@ -41,7 +41,8 @@ const withAssets = (eb: ExpressionBuilder, withTags = false) => { .select((eb) => eb.fn.toJson('exifInfo').as('exifInfo')) .where('asset.deletedAt', 'is', null) .whereRef('asset.stackId', '=', 'stack.id') - .$call(withDefaultVisibility), + .$call(withDefaultVisibility) + .orderBy('asset.fileCreatedAt', 'asc'), ).as('assets'); };