Files
harheimertc/.output/server/chunks/_/termine.mjs

105 lines
3.4 KiB
JavaScript

import { promises } from 'fs';
import path from 'path';
import { randomUUID } from 'crypto';
const getDataPath = (filename) => {
const cwd = process.cwd();
if (cwd.endsWith(".output")) {
return path.join(cwd, "../public/data", filename);
}
return path.join(cwd, "public/data", filename);
};
const TERMINE_FILE = getDataPath("termine.csv");
async function readTermine() {
try {
const data = await promises.readFile(TERMINE_FILE, "utf-8");
const lines = data.split("\n").filter((line) => line.trim() !== "");
if (lines.length < 2) return [];
const termine = [];
for (let i = 1; i < lines.length; i++) {
const values = [];
let current = "";
let inQuotes = false;
for (let j = 0; j < lines[i].length; j++) {
const char = lines[i][j];
if (char === '"') {
inQuotes = !inQuotes;
} else if (char === "," && !inQuotes) {
values.push(current.trim());
current = "";
} else {
current += char;
}
}
values.push(current.trim());
if (values.length >= 4) {
termine.push({
id: randomUUID(),
// Generate ID on-the-fly for editing
datum: values[0],
uhrzeit: values[1] || "",
titel: values[2] || "",
beschreibung: values[3] || "",
kategorie: values[4] || "Sonstiges"
});
}
}
return termine;
} catch (error) {
if (error.code === "ENOENT") {
return [];
}
console.error("Fehler beim Lesen der Termine:", error);
return [];
}
}
async function writeTermine(termine) {
try {
let csv = '"datum","uhrzeit","titel","beschreibung","kategorie"\n';
for (const termin of termine) {
const datum = termin.datum || "";
const uhrzeit = termin.uhrzeit || "";
const titel = termin.titel || "";
const beschreibung = termin.beschreibung || "";
const kategorie = termin.kategorie || "";
const escapedDatum = datum.replace(/"/g, '""');
const escapedUhrzeit = uhrzeit.replace(/"/g, '""');
const escapedTitel = titel.replace(/"/g, '""');
const escapedBeschreibung = beschreibung.replace(/"/g, '""');
const escapedKategorie = kategorie.replace(/"/g, '""');
csv += `"${escapedDatum}","${escapedUhrzeit}","${escapedTitel}","${escapedBeschreibung}","${escapedKategorie}"
`;
}
await promises.writeFile(TERMINE_FILE, csv, "utf-8");
return true;
} catch (error) {
console.error("Fehler beim Schreiben der Termine:", error);
return false;
}
}
async function saveTermin(terminData) {
const termine = await readTermine();
const newTermin = {
datum: terminData.datum,
uhrzeit: terminData.uhrzeit || "",
titel: terminData.titel,
beschreibung: terminData.beschreibung || "",
kategorie: terminData.kategorie || "Sonstiges"
};
termine.push(newTermin);
termine.sort((a, b) => new Date(a.datum) - new Date(b.datum));
await writeTermine(termine);
return true;
}
async function deleteTermin(terminData) {
let termine = await readTermine();
termine = termine.filter(
(t) => !(t.datum === terminData.datum && (t.uhrzeit || "") === (terminData.uhrzeit || "") && t.titel === terminData.titel && t.beschreibung === terminData.beschreibung && t.kategorie === terminData.kategorie)
);
await writeTermine(termine);
return true;
}
export { deleteTermin as d, readTermine as r, saveTermin as s };
//# sourceMappingURL=termine.mjs.map