feat(views.py): add views for calendar API and event signin/out

This commit is contained in:
2026-03-16 12:30:15 +01:00
parent 9890a51635
commit cf0a4777ca

View File

@@ -1,8 +1,10 @@
from django import urls
from django.contrib.auth.decorators import login_required from django.contrib.auth.decorators import login_required
from django.http import JsonResponse from django.http import JsonResponse
from django.shortcuts import render, redirect from django.shortcuts import render, redirect
from .forms import SignUpForm from .forms import SignUpForm
from home.models import EventPage
def signup(request): def signup(request):
@@ -24,3 +26,68 @@ def profile(request):
def calendar(request): def calendar(request):
return render(request, "calendar.html") return render(request, "calendar.html")
def get_calendar_events(request):
# get events from database (EventPage model)
start = request.GET.get("start")
end = request.GET.get("end")
events = (
EventPage.objects.live()
.values("id", "title", "start", "end")
.filter(start__gte=start, end__lte=end)
)
# to json
events_list = list(events)
# add page url to each event
for event in events_list:
event_page = EventPage.objects.live().filter(title=event["title"]).first()
if event_page:
event["url"] = event_page.url
return JsonResponse(events_list, safe=False)
def get_calendar_event(request, event_id):
event = EventPage.objects.live().filter(id=event_id).first()
if not event:
return JsonResponse({"error": "Event not found"}, status=404)
event_dict = {
"id": event.id,
"title": event.title,
"start": event.start,
"end": event.end,
"location": event.location,
"url": event.url,
}
return JsonResponse(event_dict)
def event_signup(request, event_id):
if not request.user.is_authenticated:
return redirect("login")
event = EventPage.objects.live().filter(id=event_id).first()
if not event:
return redirect("calendar")
event.signed_up_users.add(request.user)
# redirect to calendar page with ?modal=event_id to show modal with event details
return redirect(urls.reverse("calendar") + f"?modal={event_id}")
def event_signout(request, event_id):
if not request.user.is_authenticated:
return redirect("login")
event = EventPage.objects.live().filter(id=event_id).first()
if not event:
return redirect("calendar")
event.signed_up_users.remove(request.user)
return redirect(urls.reverse("calendar") + f"?modal={event_id}")