Skip to content

Commit 6cdd009

Browse files
committed
single event page and also google og image to logo
1 parent fa790a6 commit 6cdd009

File tree

5 files changed

+395
-1
lines changed

5 files changed

+395
-1
lines changed

backend/apps/events/urls.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88

99
urlpatterns = [
1010
path("", views.get_events, name="events"),
11+
path("<int:event_id>/", views.get_event, name="event_detail"),
1112
path("export.ics", views.export_events_ics, name="export_events_ics"),
1213
path(
1314
"google-calendar-urls/",

backend/apps/events/views.py

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
from django.http import HttpResponse
33
from django.utils import timezone
44
from django.utils.html import escape
5+
from django.shortcuts import get_object_or_404
56
from ratelimit.decorators import ratelimit
67
from rest_framework import status
78
from rest_framework.decorators import api_view, permission_classes
@@ -82,6 +83,46 @@ def get_events(request):
8283
return Response({"error": str(e)}, status=status.HTTP_500_INTERNAL_SERVER_ERROR)
8384

8485

86+
@api_view(["GET"])
87+
@permission_classes([AllowAny])
88+
@ratelimit(key="ip", rate="60/hr", block=True)
89+
def get_event(request, event_id):
90+
"""Get a single event by ID"""
91+
try:
92+
event = get_object_or_404(Events, id=event_id)
93+
94+
# Return selected event fields (same as get_events)
95+
fields = [
96+
"id",
97+
"title",
98+
"description",
99+
"location",
100+
"dtstart",
101+
"dtend",
102+
"price",
103+
"food",
104+
"registration",
105+
"source_image_url",
106+
"club_type",
107+
"added_at",
108+
"school",
109+
"source_url",
110+
"ig_handle",
111+
"discord_handle",
112+
"x_handle",
113+
"tiktok_handle",
114+
"fb_handle",
115+
]
116+
117+
event_data = {field: getattr(event, field) for field in fields}
118+
event_data["display_handle"] = events_utils.determine_display_handle(event_data)
119+
120+
return Response(event_data)
121+
122+
except Exception as e:
123+
return Response({"error": str(e)}, status=status.HTTP_500_INTERNAL_SERVER_ERROR)
124+
125+
85126
@api_view(["GET"])
86127
@permission_classes([AllowAny])
87128
def test_similarity(request):

frontend/index.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
<meta property="og:type" content="website" />
1515
<meta property="og:title" content="Wat2Do - Discover University of Waterloo Club Events" />
1616
<meta property="og:description" content="Find and explore exciting club events at the University of Waterloo. Browse upcoming events, discover campus clubs, and stay connected with the UW community." />
17-
<meta property="og:image" content="https://bug-free-octo-spork.s3.us-east-2.amazonaws.com/open-graph-image.png" />
17+
<meta property="og:image" content="https://bug-free-octo-spork.s3.us-east-2.amazonaws.com/wat2do-email.svg" />
1818
<meta property="og:image:width" content="1200" />
1919
<meta property="og:image:height" content="630" />
2020
<meta property="og:image:type" content="image/png" />

frontend/src/app/App.tsx

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import { BrowserRouter as Router, Routes, Route } from "react-router-dom";
22
import { QueryClient, QueryClientProvider } from "@tanstack/react-query";
33
import { Analytics } from "@vercel/analytics/react";
44
import { EventsPage } from "@/features/events";
5+
import EventDetailPage from "@/features/events/pages/EventDetailPage";
56
import { ClubsPage } from "@/features/clubs";
67
import { AdminPage } from "@/features/admin";
78
import { UnsubscribePage } from "@/features/newsletter";
@@ -37,6 +38,7 @@ function App() {
3738
<Routes>
3839
<Route path="/" element={<EventsPage />} />
3940
<Route path="/events" element={<EventsPage />} />
41+
<Route path="/events/:eventId" element={<EventDetailPage />} />
4042
<Route path="/clubs" element={<ClubsPage />} />
4143
<Route path="/about" element={<AboutPage />} />
4244
<Route path="/contact" element={<ContactPage />} />

0 commit comments

Comments
 (0)