fix(nas): issued-order PDFs overwrite in place - no more _1 duplicate copies
saveIssuedPdf ran through uniquePath, so whenever two archive calls raced (the fire-and-forget ?save=1 after a save vs. the /file fallback, or two quick saves) the second write landed as <number>_1.pdf - and those copies were invisible to the reader and cleaner (exact-name match), accumulating forever. Now the issued archive writes to the deterministic Vydane/YYYY/MM/<number>.pdf and overwrites (same model as the offers manager), and cleanIssued also sweeps stale <number>_N.pdf duplicates so existing junk self-heals on the next save/delete. Document numbers are digit-only (never contain _), so the suffix match cannot hit a different document. uniquePath remains for received-invoice uploads where name collisions are legitimate. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
@@ -53,4 +53,29 @@ describe("NasDocumentManager issued-PDF round-trip", () => {
|
||||
blank.saveIssuedPdf("25P0003", 2026, 6, Buffer.from("x")),
|
||||
).toBeNull();
|
||||
});
|
||||
|
||||
it("re-saving the same number OVERWRITES in place — never a _1 duplicate", () => {
|
||||
const first = nas.saveIssuedPdf("25P0004", 2026, 6, Buffer.from("v1"));
|
||||
const second = nas.saveIssuedPdf("25P0004", 2026, 6, Buffer.from("v2"));
|
||||
|
||||
// Same canonical path both times, newest content wins.
|
||||
expect(second).toBe(first);
|
||||
const dir = path.join(tmpBase, "Vydané", "2026", "06");
|
||||
expect(fs.readdirSync(dir)).toEqual(["25P0004.pdf"]);
|
||||
expect(nas.readIssued(second!)!.data.toString()).toBe("v2");
|
||||
});
|
||||
|
||||
it("cleanIssued also sweeps stale _N duplicates left by the old racy save", () => {
|
||||
nas.saveIssuedPdf("25P0005", 2026, 6, Buffer.from("canonical"));
|
||||
// Simulate duplicates the pre-fix uniquePath save created during races.
|
||||
const dir = path.join(tmpBase, "Vydané", "2026", "06");
|
||||
fs.writeFileSync(path.join(dir, "25P0005_1.pdf"), "stale");
|
||||
fs.writeFileSync(path.join(dir, "25P0005_2.pdf"), "stale");
|
||||
// A DIFFERENT number must not be touched by the suffix match.
|
||||
nas.saveIssuedPdf("25P0006", 2026, 6, Buffer.from("other"));
|
||||
|
||||
nas.cleanIssued("25P0005");
|
||||
|
||||
expect(fs.readdirSync(dir).sort()).toEqual(["25P0006.pdf"]);
|
||||
});
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user