asdsa
This commit is contained in:
@@ -39,12 +39,19 @@ function parseArgs() {
|
||||
};
|
||||
}
|
||||
|
||||
const isNotes = (base: string) => /\bnotes\b/i.test(base);
|
||||
/** Erkennt "Notes", "Note" und verklebte Varianten ("Notesb102312").
|
||||
* Es wird nur der Teil NACH dem ersten Komma durchsucht, damit Nachnamen
|
||||
* wie "Note, John" nicht fälschlich als Notes-Datei gelten. */
|
||||
function isNotes(base: string): boolean {
|
||||
const comma = base.indexOf(",");
|
||||
const scope = comma >= 0 ? base.slice(comma + 1) : base;
|
||||
return /\bnotes?[a-z]?\d*\b/i.test(scope);
|
||||
}
|
||||
|
||||
/** "Stone, Mike via Anna Stone 031220 Notes.pdf" → "stone,mike" */
|
||||
function nameKey(base: string): string {
|
||||
let s = base.replace(/\.pdf$/i, "");
|
||||
s = s.replace(/\bnotes\b/gi, " ");
|
||||
s = s.replace(/\bnotes?[a-z]?\d*\b/gi, " "); // Note/Notes/Notesb102312 raus
|
||||
s = s.replace(/\b\d{4,8}\b/g, " "); // Datums-Tokens raus
|
||||
s = s.replace(/\s+/g, " ").trim();
|
||||
const comma = s.indexOf(",");
|
||||
@@ -101,27 +108,31 @@ async function main() {
|
||||
console.error(`→ ${orphanPath}`);
|
||||
}
|
||||
|
||||
// Vorhandene Ergebnisse übernehmen (Notes-Einträge dabei verwerfen)
|
||||
// Vorhandene Ergebnisse laden
|
||||
const existing = new Map<string, BuyerRecord>();
|
||||
try {
|
||||
const prev: BuyerRecord[] = JSON.parse(await fsp.readFile(args.buyers, "utf8"));
|
||||
for (const r of prev) if (!isNotes(r.file_name)) existing.set(r.file_name, r);
|
||||
for (const r of prev) existing.set(r.file_name, r);
|
||||
} catch {
|
||||
console.error(`Hinweis: ${args.buyers} nicht gefunden — starte mit leerem Bestand.`);
|
||||
}
|
||||
|
||||
// Seed: alle Hauptdateien, vorhandene Daten bleiben erhalten
|
||||
let seeded = 0;
|
||||
const out: BuyerRecord[] = mainFiles.sort().map((f) => {
|
||||
// In die Extraktion gehen: alle Hauptdateien + Notes OHNE Gegenstück.
|
||||
// Notes MIT Gegenstück fallen weg (auch deren alte Einträge).
|
||||
const includeFiles = [...mainFiles, ...orphans];
|
||||
let seeded = 0, carried = 0;
|
||||
const out: BuyerRecord[] = includeFiles.sort().map((f) => {
|
||||
const prev = existing.get(f);
|
||||
if (prev) return prev;
|
||||
if (prev) { carried++; return prev; }
|
||||
seeded++;
|
||||
return { file_name: f, is_buyer_sheet: false, ...EMPTY_FIELDS, _parser: "seed" };
|
||||
});
|
||||
|
||||
await fsp.mkdir(path.dirname(args.out), { recursive: true });
|
||||
await fsp.writeFile(args.out, JSON.stringify(out, null, 2));
|
||||
console.error(`Seed geschrieben: ${out.length} Einträge (${existing.size} übernommen, ${seeded} neu) → ${args.out}`);
|
||||
console.error(
|
||||
`Seed geschrieben: ${out.length} Einträge (${carried} übernommen, ${seeded} neu, davon ${orphans.length} Orphan-Notes) → ${args.out}`
|
||||
);
|
||||
}
|
||||
|
||||
main().catch((e) => { console.error("Abbruch:", e instanceof Error ? e.message : e); process.exit(1); });
|
||||
Reference in New Issue
Block a user