Skip to content

Commit e6e1878

Browse files
Tony QiuTony Qiu
authored andcommitted
cleaned up db, includes longitude, latitude, school, duration, proper utc dates
1 parent f0370e7 commit e6e1878

File tree

18 files changed

+70
-67
lines changed

18 files changed

+70
-67
lines changed

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ pip install -r requirements.txt
4242
python manage.py makemigrations
4343
python manage.py migrate
4444
# PRODUCTION=1 python manage.py migrate
45+
python scripts/populate-local-db-with-prod-data.py
4546
python manage.py runserver 8000
4647
```
4748

backend/apps/core/management/__init__.py

Whitespace-only changes.

backend/apps/core/management/commands/__init__.py

Whitespace-only changes.

backend/apps/events/views.py

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -81,8 +81,8 @@ def get_events(request):
8181
"title",
8282
"description",
8383
"location",
84-
"dtstart",
85-
"dtend",
84+
"dtstart_utc",
85+
"dtend_utc",
8686
"price",
8787
"food",
8888
"registration",
@@ -121,8 +121,8 @@ def get_event(request, event_id):
121121
"title",
122122
"description",
123123
"location",
124-
"dtstart",
125-
"dtend",
124+
"dtstart_utc",
125+
"dtend_utc",
126126
"price",
127127
"food",
128128
"registration",
@@ -267,13 +267,13 @@ def escape_text(text):
267267
dtstamp = now.strftime("%Y%m%dT%H%M%SZ")
268268

269269
for event in events:
270-
start_date = event.dtstart.strftime("%Y%m%d")
271-
start_time = event.dtstart.strftime("%H%M%S")
272-
end_time = event.dtend.strftime("%H%M%S") if event.dtend else start_time
270+
start_date = event.dtstart_utc.strftime("%Y%m%d")
271+
start_time = event.dtstart_utc.strftime("%H%M%S")
272+
end_time = event.dtend_utc.strftime("%H%M%S") if event.dtend_utc else start_time
273273

274274
lines.append("BEGIN:VEVENT")
275-
lines.append(f"DTSTART:{start_date}T{start_time}")
276-
lines.append(f"DTEND:{start_date}T{end_time}")
275+
lines.append(f"DTSTART:{start_date}T{start_time}Z")
276+
lines.append(f"DTEND:{start_date}T{end_time}Z")
277277
lines.append(f"DTSTAMP:{dtstamp}")
278278
lines.append(f"SUMMARY:{escape_text(event.title)}")
279279

@@ -343,13 +343,13 @@ def get_google_calendar_urls(request):
343343
from urllib.parse import urlencode
344344

345345
for event in events:
346-
# Format dates for Google Calendar (YYYYMMDDTHHMMSS)
347-
start_date = event.dtstart.strftime("%Y%m%d")
348-
start_time = event.dtstart.strftime("%H%M%S")
349-
end_time = event.dtend.strftime("%H%M%S") if event.dtend else start_time
346+
# Format dates for Google Calendar (YYYYMMDDTHHMMSSZ for UTC)
347+
start_date = event.dtstart_utc.strftime("%Y%m%d")
348+
start_time = event.dtstart_utc.strftime("%H%M%S")
349+
end_time = event.dtend_utc.strftime("%H%M%S") if event.dtend_utc else start_time
350350

351-
start_datetime = f"{start_date}T{start_time}"
352-
end_datetime = f"{start_date}T{end_time}"
351+
start_datetime = f"{start_date}T{start_time}Z"
352+
end_datetime = f"{start_date}T{end_time}Z"
353353

354354
# Build details field
355355
details_parts = []
@@ -387,7 +387,7 @@ def rss_feed(request):
387387
Simple RSS feed of upcoming events (returns application/rss+xml).
388388
"""
389389
now = timezone.now()
390-
items = Events.objects.filter(dtstart__gte=now).order_by("dtstart")[:50]
390+
items = Events.objects.filter(dtstart_utc__gte=now).order_by("dtstart_utc")[:50]
391391

392392
site_url = getattr(settings, "SITE_URL", "https://wat2do.ca")
393393
rss_items = []

backend/apps/promotions/views.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -186,8 +186,8 @@ def get_promoted_events(request):
186186
{
187187
"id": event.id,
188188
"title": event.title,
189-
"dtstart": event.dtstart.isoformat(),
190-
"dtend": event.dtend.isoformat() if event.dtend else None,
189+
"dtstart": event.dtstart_utc.isoformat(),
190+
"dtend": event.dtend_utc.isoformat() if event.dtend_utc else None,
191191
"location": event.location,
192192
"description": event.description,
193193
"source_image_url": event.source_image_url,

backend/services/email_service.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -30,18 +30,18 @@ def _get_events_added_today(self):
3030
events = (
3131
Events.objects.filter(added_at__date=today)
3232
.select_related()
33-
.order_by("dtstart", "dtend")
33+
.order_by("dtstart_utc", "dtend_utc")
3434
)
3535

3636
events_data = []
3737
for event in events:
3838
# Format the event data for email template
39-
event_date = event.dtstart.strftime("%B %d, %Y")
39+
event_date = event.dtstart_utc.strftime("%B %d, %Y")
4040

4141
# Format time range
42-
start_time = event.dtstart.strftime("%I:%M %p").lstrip("0")
43-
if event.dtend:
44-
end_time = event.dtend.strftime("%I:%M %p").lstrip("0")
42+
start_time = event.dtstart_utc.strftime("%I:%M %p").lstrip("0")
43+
if event.dtend_utc:
44+
end_time = event.dtend_utc.strftime("%I:%M %p").lstrip("0")
4545
time_range = f"{start_time} - {end_time}"
4646
else:
4747
time_range = f"Starting at {start_time}"

backend/services/openai_service.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -109,6 +109,7 @@ def extract_events_from_caption(
109109
"dtend": string, // end date in YYYY-MM-DD HH:MM:SS+HH format if found, empty string if not
110110
"dtstart_utc": string, // start date in UTC format YYYY-MM-DD HH:MM:SSZ (convert from dtstart using tz)
111111
"dtend_utc": string, // end date in UTC format YYYY-MM-DD HH:MM:SSZ (convert from dtend using tz)
112+
"duration": string, // duration in HH:MM:SS format (e.g., "02:30:00" for 2.5 hours), empty string if dtend is not available
112113
"all_day": boolean, // true if event is all day (no specific time mentioned), false otherwise
113114
"location": string, // location of the event
114115
"latitude": number or null, // latitude coordinate if location can be geocoded (e.g., 43.4723)
@@ -133,6 +134,7 @@ def extract_events_from_caption(
133134
- If recurring events are mentioned (e.g., "every Friday"), just create one event
134135
- For dtstart and dtend, if year not found, assume {now.year}
135136
- For dtstart_utc and dtend_utc: convert the local time (dtstart/dtend) to UTC using the timezone (tz). Format as YYYY-MM-DD HH:MM:SSZ. If dtstart/dtend are empty, then dtstart_utc/dtend_utc should also be empty
137+
- For duration: calculate the duration between dtstart and dtend in HH:MM:SS format (e.g., "02:30:00" for 2 hours 30 minutes). If dtend is empty or not available, use empty string ""
136138
- When interpreting relative terms like "tonight", "tomorrow", "weekly", "every Friday", use the current date context above and the date the post was made. If an explicit date is found in the image, use that date
137139
- For weekly events, calculate the next occurrence based on the current date and day of week
138140
- For (off-campus) addresses: use the format "[Street Address], [City], [Province] [Postal Code]" when possible

backend/utils/embedding_utils.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,8 @@ def find_similar_events(
2626
title,
2727
description,
2828
location,
29-
dtstart,
30-
dtend,
29+
dtstart_utc,
30+
dtend_utc,
3131
club_type,
3232
1 - (embedding <=> %s::vector) as similarity
3333
FROM events
@@ -38,7 +38,7 @@ def find_similar_events(
3838

3939
# Add date filter if provided
4040
if min_date:
41-
base_query += " AND dtstart >= %s"
41+
base_query += " AND dtstart_utc >= %s"
4242
params.append(min_date)
4343

4444
# Add similarity threshold

backend/utils/filters.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,8 @@
66
class EventFilter(FilterSet):
77
"""Filter for Event queryset"""
88

9-
dtstart = DateTimeFilter(field_name="dtstart", lookup_expr="gte")
10-
dtend = DateTimeFilter(field_name="dtstart", lookup_expr="lte")
9+
dtstart_utc = DateTimeFilter(field_name="dtstart_utc", lookup_expr="gte")
10+
dtend_utc = DateTimeFilter(field_name="dtstart_utc", lookup_expr="lte")
1111
min_price = NumberFilter(field_name="price", lookup_expr="gte")
1212
max_price = NumberFilter(field_name="price", lookup_expr="lte")
1313
club_type = CharFilter(field_name="club_type")
@@ -17,8 +17,8 @@ class EventFilter(FilterSet):
1717
class Meta:
1818
model = Events
1919
fields = [
20-
"dtstart",
21-
"dtend",
20+
"dtstart_utc",
21+
"dtend_utc",
2222
"min_price",
2323
"max_price",
2424
"club_type",

frontend/src/features/events/components/EventsCalendar.tsx

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -103,13 +103,13 @@ const EventPopup: React.FC<{
103103
<div className="space-y-2 text-sm text-gray-600 dark:text-gray-400">
104104
<div className="flex items-center gap-2">
105105
<CalendarIcon className="h-4 w-4 flex-shrink-0" />
106-
<span>{formatPrettyDate(event.dtstart)}</span>
106+
<span>{formatPrettyDate(event.dtstart_utc)}</span>
107107
</div>
108108

109109
<div className="flex items-center gap-2">
110110
<Clock className="h-4 w-4 flex-shrink-0" />
111111
<span>
112-
{formatEventTimeRange(event.dtstart, event.dtend)}
112+
{formatEventTimeRange(event.dtstart_utc, event.dtend_utc)}
113113
</span>
114114
</div>
115115

@@ -234,9 +234,9 @@ const EventsCalendar: React.FC<{ events: Event[] }> = ({ events }) => {
234234
}, [currentView, currentDate]);
235235

236236
const calendarEvents = events.map((event) => {
237-
const start = new Date(removeTimezoneInfo(event.dtstart));
238-
const end = event.dtend
239-
? new Date(removeTimezoneInfo(event.dtend))
237+
const start = new Date(removeTimezoneInfo(event.dtstart_utc));
238+
const end = event.dtend_utc
239+
? new Date(removeTimezoneInfo(event.dtend_utc))
240240
: new Date(start.getTime() + 60 * 60 * 1000); // Default end time = 1 hour after start
241241
return {
242242
...event,

0 commit comments

Comments
 (0)