Implement member management enhancements; add bulk import functionality and duplicate checking based on geburtsdatum. Update API to support new fields and improve error handling for member data submissions. Refactor member-related components for better user experience and data validation.

This commit is contained in:
Torsten Schulz (local)
2025-11-05 14:34:31 +01:00
parent dd4691b462
commit 623a63c29f
21 changed files with 1765 additions and 513 deletions

View File

@@ -72,16 +72,57 @@ async function writeMembers(members) {
return false;
}
}
function normalizeDate(dateString) {
if (!dateString) return "";
try {
const date = new Date(dateString);
if (isNaN(date.getTime())) return dateString.trim();
return date.toISOString().split("T")[0];
} catch (e) {
return dateString.trim();
}
}
function findDuplicateMember(members, firstName, lastName, geburtsdatum) {
const normalizedFirstName = (firstName || "").trim().toLowerCase();
const normalizedLastName = (lastName || "").trim().toLowerCase();
const normalizedDate = normalizeDate(geburtsdatum);
return members.find((m) => {
const mFirstName = (m.firstName || "").trim().toLowerCase();
const mLastName = (m.lastName || "").trim().toLowerCase();
const mDate = normalizeDate(m.geburtsdatum);
return mFirstName === normalizedFirstName && mLastName === normalizedLastName && mDate === normalizedDate && mDate !== "";
});
}
async function saveMember(memberData) {
const members = await readMembers();
if (memberData.id) {
const index = members.findIndex((m) => m.id === memberData.id);
if (index !== -1) {
const duplicate = findDuplicateMember(
members.filter((m) => m.id !== memberData.id),
memberData.firstName,
memberData.lastName,
memberData.geburtsdatum
);
if (duplicate) {
throw new Error("Ein Mitglied mit diesem Namen und Geburtsdatum existiert bereits.");
}
members[index] = { ...members[index], ...memberData };
} else {
throw new Error("Mitglied nicht gefunden");
}
} else {
if (memberData.firstName && memberData.lastName && memberData.geburtsdatum) {
const duplicate = findDuplicateMember(
members,
memberData.firstName,
memberData.lastName,
memberData.geburtsdatum
);
if (duplicate) {
throw new Error("Ein Mitglied mit diesem Namen und Geburtsdatum existiert bereits.");
}
}
const newMember = {
...memberData,
id: randomUUID()
@@ -99,5 +140,5 @@ async function deleteMember(id) {
return true;
}
export { deleteMember as d, readMembers as r, saveMember as s };
export { deleteMember as d, normalizeDate as n, readMembers as r, saveMember as s, writeMembers as w };
//# sourceMappingURL=members.mjs.map