From c915f91fbe8d97201d813c792f4e1fe8c4401e15 Mon Sep 17 00:00:00 2001 From: Martin Kagamino Lehoux Date: Tue, 6 Oct 2026 00:46:53 +0200 Subject: 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. --- src/lib/server/services/groceries.ts | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) (limited to 'src/lib/server/services/groceries.ts') diff --git a/src/lib/server/services/groceries.ts b/src/lib/server/services/groceries.ts index 9aa8102..fc66300 100644 --- a/src/lib/server/services/groceries.ts +++ b/src/lib/server/services/groceries.ts @@ -20,12 +20,15 @@ export async function loadUnchecked( .select() .from(groceries) .where(eq(groceries.checked, false)) - .orderBy(desc(groceries.createdAt)), + .orderBy(desc(groceries.createdAt), desc(groceries.id)), db .select() .from(categories) .orderBy(asc(categories.order), asc(categories.name)), - db.select().from(references).orderBy(desc(references.qualityScore)), + db + .select() + .from(references) + .orderBy(desc(references.qualityScore), asc(references.id)), ]); return { @@ -38,12 +41,18 @@ export async function loadAll( db = defaultDb, ): Promise<{ items: EnrichedGrocery[]; categories: Category[] }> { const [items, cats, refs] = await Promise.all([ - db.select().from(groceries).orderBy(desc(groceries.createdAt)), + db + .select() + .from(groceries) + .orderBy(desc(groceries.createdAt), desc(groceries.id)), db .select() .from(categories) .orderBy(asc(categories.order), asc(categories.name)), - db.select().from(references).orderBy(desc(references.qualityScore)), + db + .select() + .from(references) + .orderBy(desc(references.qualityScore), asc(references.id)), ]); return { -- cgit v1.3