feat(views.py): add views for calendar API and event signin/out
This commit is contained in:
@@ -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}")
|
||||
|
||||
Reference in New Issue
Block a user