From cf0a4777ca243bc3d27668f8eebc5b0440e88d52 Mon Sep 17 00:00:00 2001 From: Artur Borecki Date: Mon, 16 Mar 2026 12:30:15 +0100 Subject: [PATCH] feat(views.py): add views for calendar API and event signin/out --- kursy/views.py | 67 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 67 insertions(+) diff --git a/kursy/views.py b/kursy/views.py index 6a06715..11e0fd6 100644 --- a/kursy/views.py +++ b/kursy/views.py @@ -1,8 +1,10 @@ +from django import urls from django.contrib.auth.decorators import login_required from django.http import JsonResponse from django.shortcuts import render, redirect from .forms import SignUpForm +from home.models import EventPage def signup(request): @@ -24,3 +26,68 @@ def profile(request): def calendar(request): 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}")