From aedc1e32c9d499de6953d57ed70e1ca4c8acb31f Mon Sep 17 00:00:00 2001 From: julien Lengrand-Lambert Date: Fri, 10 Oct 2025 14:35:28 +0000 Subject: [PATCH] Add unregister endpoint and participant removal functionality --- src/app.py | 12 ++++++++++++ src/static/app.js | 31 ++++++++++++++++++++++++++++--- 2 files changed, 40 insertions(+), 3 deletions(-) diff --git a/src/app.py b/src/app.py index c47f8be..4160109 100644 --- a/src/app.py +++ b/src/app.py @@ -110,3 +110,15 @@ def signup_for_activity(activity_name: str, email: str): # Add student activity["participants"].append(email) return {"message": f"Signed up {email} for {activity_name}"} + +# Unregister endpoint +@app.post("/activities/{activity_name}/unregister") +def unregister_from_activity(activity_name: str, email: str): + """Remove a student from an activity""" + activity = activities.get(activity_name) + if not activity: + raise HTTPException(status_code=404, detail="Activity not found") + if email not in activity["participants"]: + raise HTTPException(status_code=404, detail="Participant not found in activity") + activity["participants"].remove(email) + return {"message": f"{email} removed from {activity_name}"} diff --git a/src/static/app.js b/src/static/app.js index 7c09176..7a358b3 100644 --- a/src/static/app.js +++ b/src/static/app.js @@ -26,9 +26,13 @@ document.addEventListener("DOMContentLoaded", () => { Participants: ${ details.participants.length > 0 - ? `` + ? `` : `

No participants yet.

` } @@ -42,6 +46,27 @@ document.addEventListener("DOMContentLoaded", () => { ${participantsHTML} `; + // Add event listener for delete icons + activityCard.querySelectorAll('.delete-participant').forEach(icon => { + icon.addEventListener('click', async (e) => { + const activityName = icon.getAttribute('data-activity'); + const participant = icon.getAttribute('data-participant'); + try { + const response = await fetch(`/activities/${encodeURIComponent(activityName)}/unregister?email=${encodeURIComponent(participant)}`, { + method: 'POST', + }); + const result = await response.json(); + if (response.ok) { + fetchActivities(); // Refresh list + } else { + alert(result.detail || 'Failed to remove participant.'); + } + } catch (err) { + alert('Error removing participant.'); + } + }); + }); + activitiesList.appendChild(activityCard); // Add option to select dropdown