fix(import): make mood collision probing order independent

This commit is contained in:
Marc-André Bombeck committed 2026-07-20 13:55:22 +02:00
1 parent 4124c483eb
commit a846bbc90d
2 files changed
+23 -3

No files matched your search

@@ -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: [
+9 -3
View File
@@ -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;
}