From 1a946ce032e5bd98738a0dba49ecb6e29f3abc7c Mon Sep 17 00:00:00 2001 From: timonrieger Date: Thu, 20 Nov 2025 13:13:05 +0100 Subject: [PATCH 1/3] feat: add ordering by file creation date in asset and stack repositories --- server/src/repositories/asset.repository.ts | 1 + server/src/repositories/stack.repository.ts | 3 ++- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/server/src/repositories/asset.repository.ts b/server/src/repositories/asset.repository.ts index 2e1d02ef28..1b4234ede8 100644 --- a/server/src/repositories/asset.repository.ts +++ b/server/src/repositories/asset.repository.ts @@ -565,6 +565,7 @@ export class AssetRepository { .whereRef('stacked.id', '!=', 'stack.primaryAssetId') .where('stacked.deletedAt', 'is', null) .where('stacked.visibility', '=', AssetVisibility.Timeline) + .orderBy('stacked.fileCreatedAt', 'asc') .groupBy('stack.id') .as('stacked_assets'), (join) => join.on('stack.id', 'is not', null), diff --git a/server/src/repositories/stack.repository.ts b/server/src/repositories/stack.repository.ts index d313d682bd..1cb0b33fce 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'); }; From 80b7a7cd2d6af3982e39c171077baf61b1a1b2eb Mon Sep 17 00:00:00 2001 From: timonrieger Date: Thu, 20 Nov 2025 15:25:08 +0100 Subject: [PATCH 2/3] refactor: update asset aggregation to include JSON formatting and ordering by creation date --- server/src/repositories/asset.repository.ts | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/server/src/repositories/asset.repository.ts b/server/src/repositories/asset.repository.ts index 1b4234ede8..7fc4f32d8f 100644 --- a/server/src/repositories/asset.repository.ts +++ b/server/src/repositories/asset.repository.ts @@ -6,7 +6,6 @@ import { NotNull, Selectable, SelectQueryBuilder, - ShallowDehydrateObject, sql, Updateable, UpdateResult, @@ -556,16 +555,13 @@ export class AssetRepository { eb .selectFrom('asset as stacked') .selectAll('stack') - .select((eb) => - eb - .fn>>('array_agg', [eb.table('stacked')]) - .as('assets'), + .select( + sql`array_agg(to_json(stacked) ORDER BY stacked."fileCreatedAt" ASC)`.as('assets'), ) .whereRef('stacked.stackId', '=', 'stack.id') .whereRef('stacked.id', '!=', 'stack.primaryAssetId') .where('stacked.deletedAt', 'is', null) .where('stacked.visibility', '=', AssetVisibility.Timeline) - .orderBy('stacked.fileCreatedAt', 'asc') .groupBy('stack.id') .as('stacked_assets'), (join) => join.on('stack.id', 'is not', null), From 8d71f477a59f9126d148ad9729f8e75cc2ee8918 Mon Sep 17 00:00:00 2001 From: timonrieger Date: Sun, 5 Apr 2026 23:41:22 +0200 Subject: [PATCH 3/3] refactor: add ordering by file creation date in asset aggregation queries --- server/src/queries/stack.repository.sql | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/server/src/queries/stack.repository.sql b/server/src/queries/stack.repository.sql index b5f1dc7d18..88e21d653e 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