From 00181fdd08b4e47dd538ed1a1537ab497ddb2d2f Mon Sep 17 00:00:00 2001 From: Peter Steinberger Date: Sat, 16 May 2026 01:31:02 +0100 Subject: [PATCH] fix: refresh sqlite media overwrite age --- src/media/store.test.ts | 29 +++++++++++++++++++++++++++++ src/media/store.ts | 1 + 2 files changed, 30 insertions(+) diff --git a/src/media/store.test.ts b/src/media/store.test.ts index 2cdf7eea502..b4fbcec43b7 100644 --- a/src/media/store.test.ts +++ b/src/media/store.test.ts @@ -600,6 +600,35 @@ describe("media store", () => { await expectCleanupBehaviorCase({ setup, run }); }); + it("keeps stable-id media when a stale blob is refreshed", async () => { + await withTempStore(async (store) => { + const now = Date.now(); + try { + vi.useFakeTimers({ now: now - 60_000 }); + await store.saveMediaBufferWithId({ + subdir: "stable-refresh", + id: "stable.txt", + buffer: Buffer.from("old"), + contentType: "text/plain", + }); + vi.setSystemTime(now); + + await store.saveMediaBufferWithId({ + subdir: "stable-refresh", + id: "stable.txt", + buffer: Buffer.from("fresh"), + contentType: "text/plain", + }); + await store.cleanOldMedia(30_000, { recursive: true, pruneEmptyDirs: true }); + + const result = await store.readMediaBuffer("stable.txt", "stable-refresh"); + expect(result.buffer).toEqual(Buffer.from("fresh")); + } finally { + vi.useRealTimers(); + } + }); + }); + it.each([ { name: "sets correct mime for xlsx by extension", diff --git a/src/media/store.ts b/src/media/store.ts index c6d287de785..788dd73800c 100644 --- a/src/media/store.ts +++ b/src/media/store.ts @@ -253,6 +253,7 @@ function upsertMediaBlob(params: { content_type: (eb) => eb.ref("excluded.content_type"), size_bytes: (eb) => eb.ref("excluded.size_bytes"), blob: (eb) => eb.ref("excluded.blob"), + created_at: (eb) => eb.ref("excluded.created_at"), updated_at: (eb) => eb.ref("excluded.updated_at"), }), ),