feat: add Go microservice, Dockerfile, docker-compose, and API submission endpoint
This commit is contained in:
@@ -0,0 +1,100 @@
|
||||
// Checkout & Bestätigungsseite
|
||||
|
||||
(function () {
|
||||
const backLink = document.getElementById("backLink");
|
||||
const summarySection = document.getElementById("summarySection");
|
||||
const confirmationSection = document.getElementById("confirmationSection");
|
||||
const summaryActivity = document.getElementById("summaryActivity");
|
||||
const summaryDate = document.getElementById("summaryDate");
|
||||
const summaryName = document.getElementById("summaryName");
|
||||
const activityIcon = document.getElementById("activityIcon");
|
||||
const checkoutBtn = document.getElementById("checkoutBtn");
|
||||
|
||||
const selectedActivity = localStorage.getItem("selectedActivity");
|
||||
const selectedDate = localStorage.getItem("selectedDate");
|
||||
const selectedName = localStorage.getItem("selectedName");
|
||||
|
||||
if (!selectedActivity || !selectedDate || !selectedName) {
|
||||
window.location.href = "index.html";
|
||||
return;
|
||||
}
|
||||
|
||||
summaryActivity.textContent = selectedActivity;
|
||||
summaryName.textContent = selectedName;
|
||||
|
||||
const dateObj = new Date(`${selectedDate}T00:00:00`);
|
||||
const formattedDate = dateObj.toLocaleDateString("de-DE", {
|
||||
weekday: "long",
|
||||
day: "numeric",
|
||||
month: "long",
|
||||
year: "numeric",
|
||||
});
|
||||
summaryDate.textContent = formattedDate;
|
||||
|
||||
// Icons aus selectedActivities oder appsettings.json laden
|
||||
let storedActivities = [];
|
||||
try {
|
||||
storedActivities = JSON.parse(localStorage.getItem("selectedActivities") || "[]");
|
||||
} catch (e) {}
|
||||
|
||||
if (storedActivities.length > 0) {
|
||||
activityIcon.textContent = storedActivities.map((a) => a.icon).join(" ");
|
||||
} else {
|
||||
fetch("appsettings.json")
|
||||
.then((res) => res.json())
|
||||
.then((settings) => {
|
||||
const match = (settings.activities || []).find((a) => a.name === selectedActivity);
|
||||
if (match && match.icon) {
|
||||
activityIcon.textContent = match.icon;
|
||||
}
|
||||
})
|
||||
.catch(() => {});
|
||||
}
|
||||
|
||||
checkoutBtn.addEventListener("click", () => {
|
||||
checkoutBtn.disabled = true;
|
||||
const originalText = checkoutBtn.textContent;
|
||||
checkoutBtn.textContent = "Wird übermittelt... 💌";
|
||||
|
||||
const payload = {
|
||||
activity: selectedActivity,
|
||||
activities: storedActivities,
|
||||
date: selectedDate,
|
||||
dateType: localStorage.getItem("selectedDateType") || "long",
|
||||
name: selectedName,
|
||||
};
|
||||
|
||||
fetch("/api/submit", {
|
||||
method: "POST",
|
||||
headers: {
|
||||
"Content-Type": "application/json",
|
||||
},
|
||||
body: JSON.stringify(payload),
|
||||
})
|
||||
.then((res) => {
|
||||
if (!res.ok) {
|
||||
throw new Error("Fehler beim Übermitteln.");
|
||||
}
|
||||
return res.json();
|
||||
})
|
||||
.then((data) => {
|
||||
if (data.success) {
|
||||
summarySection.classList.add("hidden");
|
||||
if (backLink) {
|
||||
backLink.classList.add("hidden");
|
||||
}
|
||||
confirmationSection.classList.remove("hidden");
|
||||
} else {
|
||||
alert(data.message || "Es gab ein Problem bei der Übermittlung.");
|
||||
checkoutBtn.disabled = false;
|
||||
checkoutBtn.textContent = originalText;
|
||||
}
|
||||
})
|
||||
.catch((err) => {
|
||||
console.error("Submission error:", err);
|
||||
alert("Übermittlung fehlgeschlagen. Bitte versuche es erneut.");
|
||||
checkoutBtn.disabled = false;
|
||||
checkoutBtn.textContent = originalText;
|
||||
});
|
||||
});
|
||||
})();
|
||||
Reference in New Issue
Block a user