diff --git a/main.go b/main.go index 0736f29..310aea3 100644 --- a/main.go +++ b/main.go @@ -14,6 +14,7 @@ import ( "net/http" "os" "path/filepath" + "strconv" "strings" _ "github.com/lib/pq" @@ -252,7 +253,7 @@ func handleRSVPPost(w http.ResponseWriter, r *http.Request) { resp := map[string]any{"numPeople": numPeople, "donation": donation} if req.DonationCents > 0 { - stripeURL, err := createCheckoutSession(eventID, email, req.DonationCents) + stripeURL, err := createCheckoutSession(eventID, email, req.DonationCents, numPeople) if err != nil { log.Println("[ERROR] failed to create checkout session:", err) http.Error(w, "failed to create checkout session", http.StatusInternalServerError) @@ -265,7 +266,7 @@ func handleRSVPPost(w http.ResponseWriter, r *http.Request) { json.NewEncoder(w).Encode(resp) } -func createCheckoutSession(eventID, email string, amountCents int64) (string, error) { +func createCheckoutSession(eventID, email string, amountCents int64, numPeople int) (string, error) { baseURL := os.Getenv("BASE_URL") params := &stripe.CheckoutSessionParams{ CustomerEmail: stripe.String(email), @@ -288,8 +289,9 @@ func createCheckoutSession(eventID, email string, amountCents int64) (string, er SuccessURL: stripe.String(fmt.Sprintf("%s/api/donate/success/%s?session_id={CHECKOUT_SESSION_ID}", baseURL, eventID)), CancelURL: stripe.String(fmt.Sprintf("%s/%s", baseURL, eventID)), Metadata: map[string]string{ - "event_id": eventID, - "email": email, + "event_id": eventID, + "email": email, + "num_people": fmt.Sprintf("%d", numPeople), }, } @@ -371,7 +373,13 @@ func handleDonateSuccess(w http.ResponseWriter, r *http.Request) { } amount := float64(sess.AmountTotal) / 100 - http.Redirect(w, r, fmt.Sprintf("/%s?donated=%.2f", eventID, amount), http.StatusSeeOther) + redirectURL := fmt.Sprintf("/%s?donated=%.2f", eventID, amount) + if numPeopleStr := sess.Metadata["num_people"]; numPeopleStr != "" { + if numPeople, err := strconv.Atoi(numPeopleStr); err == nil && numPeople > 0 { + redirectURL += fmt.Sprintf("&num_people=%d", numPeople) + } + } + http.Redirect(w, r, redirectURL, http.StatusSeeOther) } func handleStripeWebhook(w http.ResponseWriter, r *http.Request) { diff --git a/static/afac26.html b/static/afac26.html index db3cb36..dd9fdfc 100644 --- a/static/afac26.html +++ b/static/afac26.html @@ -141,12 +141,7 @@ Switch User - - +
Applause for a Cause @@ -199,10 +194,26 @@ const eventId = 'afac26'; - const donatedAmount = new URLSearchParams(location.search).get('donated'); - if (donatedAmount) { - document.getElementById('thank-you').textContent = `Thank you for your $${parseFloat(donatedAmount).toFixed(2)} donation!`; - document.getElementById('thank-you').style.display = 'block'; + function showConfirmation(numPeople, donatedAmount) { + const parts = []; + if (numPeople > 0) { + const word = numPeople === 1 ? 'person' : 'people'; + parts.push(`Your RSVP for ${numPeople} ${word} is confirmed.`); + } + if (donatedAmount) { + parts.push(`Thank you for your $${donatedAmount.toFixed(2)} donation!`); + } + if (parts.length) { + document.getElementById('thank-you').textContent = parts.join(' '); + document.getElementById('thank-you').style.display = 'block'; + } + } + + const params = new URLSearchParams(location.search); + const donatedParam = params.get('donated'); + const numPeopleParam = params.get('num_people'); + if (donatedParam || numPeopleParam) { + showConfirmation(parseInt(numPeopleParam) || 0, donatedParam ? parseFloat(donatedParam) : null); history.replaceState({}, '', location.pathname); } @@ -291,9 +302,7 @@ location.href = data.url; } else { updateUI(data); - const word = data.numPeople === 1 ? 'person' : 'people'; - document.getElementById('rsvp-confirmed').textContent = `Your RSVP has been updated to ${data.numPeople} ${word}.`; - document.getElementById('rsvp-confirmed').style.display = 'block'; + showConfirmation(data.numPeople, null); } });