aboutsummaryrefslogtreecommitdiff
path: root/src/lib/server/services/references.ts
diff options
context:
space:
mode:
authorMartin Kagamino Lehoux <martin@lehoux.net>2026-10-06 00:46:53 +0200
committerMartin Kagamino Lehoux <martin@lehoux.net>2026-10-06 00:46:53 +0200
commitc915f91fbe8d97201d813c792f4e1fe8c4401e15 (patch)
tree7b341e4d7548205776557437bd2245ec59bf0a57 /src/lib/server/services/references.ts
parentf7366834ee41bbb4ac8a9a252224241a884af41b (diff)
fix: make grocery and reference ordering deterministic
Every list query lacked a tiebreak, so rows sharing a sort key (same-ms createdAt inserts, tied or NULL quality scores) came back in unspecified order and bestRef flipped between loads. Add explicit tiebreaks: items createdAt desc, id desc (newest first); references qualityScore desc, id asc (first inserted wins ties). Categories were already total (order, name unique). Pin the rules with service tests.
Diffstat (limited to 'src/lib/server/services/references.ts')
-rw-r--r--src/lib/server/services/references.ts4
1 files changed, 2 insertions, 2 deletions
diff --git a/src/lib/server/services/references.ts b/src/lib/server/services/references.ts
index 99ba487..c5b6630 100644
--- a/src/lib/server/services/references.ts
+++ b/src/lib/server/services/references.ts
@@ -1,6 +1,6 @@
import { db as defaultDb } from '$lib/server/db';
import { references } from '$lib/server/db/schema';
-import { eq, desc } from 'drizzle-orm';
+import { eq, desc, asc } from 'drizzle-orm';
import type { AppDatabase } from './groceries';
import type { Reference } from './types';
@@ -12,7 +12,7 @@ export async function loadForGrocery(
.select()
.from(references)
.where(eq(references.groceryId, groceryId))
- .orderBy(desc(references.qualityScore));
+ .orderBy(desc(references.qualityScore), asc(references.id));
}
export async function add(