diff --git a/src/app/api/import/__tests__/route.test.ts b/src/app/api/import/__tests__/route.test.ts index 9fbe930ac..09e8d95b3 100644 --- a/src/app/api/import/__tests__/route.test.ts +++ b/src/app/api/import/__tests__/route.test.ts @@ -1023,6 +1023,20 @@ describe("POST /api/import — write failure classification", () => { }); expect(persisted.size).toBe(2); + const reverseOrderResponse = await POST( + request({ + moodEntries: [ + { date: "2026-05-01", mood: "GUT", score: 4, tags: "tag-421" }, + { date: "2026-05-01", mood: "GUT", score: 4, tags: "tag-250" }, + ], + }), + ); + expect(await reverseOrderResponse.json()).toEqual({ + data: { measurements: 0, moodEntries: 0, skipped: 2 }, + error: null, + }); + expect(persisted.size).toBe(2); + const repeatedRowResponse = await POST( request({ moodEntries: [ diff --git a/src/app/api/import/route.ts b/src/app/api/import/route.ts index aee49a813..96983102d 100644 --- a/src/app/api/import/route.ts +++ b/src/app/api/import/route.ts @@ -315,9 +315,11 @@ export const POST = apiHandler(async (request: NextRequest) => { ) { const loggedAt = e.loggedAt ?? stableFallbackMoodInstant(e, occurrence, probe); - if (!e.loggedAt) { - if (reservedFallbackInstants.has(loggedAt.getTime())) continue; - reservedFallbackInstants.add(loggedAt.getTime()); + if ( + !e.loggedAt && + reservedFallbackInstants.has(loggedAt.getTime()) + ) { + continue; } try { if (e.externalId) { @@ -364,6 +366,9 @@ export const POST = apiHandler(async (request: NextRequest) => { }, }); } + if (!e.loggedAt) { + reservedFallbackInstants.add(loggedAt.getTime()); + } stats.moodEntries++; break; } catch (err) { @@ -400,6 +405,7 @@ export const POST = apiHandler(async (request: NextRequest) => { existing.tags === (e.tags || null) && (existing.externalId ?? null) === null ) { + reservedFallbackInstants.add(loggedAt.getTime()); stats.skipped++; break; }