Skip to content

Commit 7322feb

Browse files
committed
added db indexes for upcoming events
1 parent fc29ed7 commit 7322feb

5 files changed

+91
-4
lines changed
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
# Generated by Django 4.2.7 on 2025-11-03 06:10
2+
3+
from django.db import migrations, models
4+
5+
6+
class Migration(migrations.Migration):
7+
8+
dependencies = [
9+
("events", "0016_remove_events_events_dtstart_89a1ed_idx_and_more"),
10+
]
11+
12+
operations = [
13+
migrations.AlterField(
14+
model_name="eventsubmission",
15+
name="submitted_by",
16+
field=models.CharField(
17+
help_text="Clerk user ID who submitted this event", max_length=255
18+
),
19+
),
20+
]
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
# Generated by Django 4.2.7 on 2025-11-03 06:11
2+
3+
from django.db import migrations, models
4+
5+
6+
class Migration(migrations.Migration):
7+
8+
dependencies = [
9+
("events", "0017_alter_eventsubmission_submitted_by"),
10+
]
11+
12+
operations = [
13+
migrations.RemoveIndex(
14+
model_name="events",
15+
name="events_school_status_dtstart_utc_added_at_idx",
16+
),
17+
migrations.AddIndex(
18+
model_name="events",
19+
index=models.Index(
20+
fields=["school", "status", "dtstart_utc", "dtend_utc", "added_at"],
21+
name="events_school_status_dtstart_utc_dtend_utc_added_at_idx",
22+
),
23+
),
24+
]
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
# Generated by Django 4.2.7 on 2025-11-03 06:24
2+
3+
from django.db import migrations, models
4+
5+
6+
class Migration(migrations.Migration):
7+
8+
dependencies = [
9+
(
10+
"events",
11+
"0018_remove_events_events_school_status_dtstart_utc_added_at_idx_and_more",
12+
),
13+
]
14+
15+
operations = [
16+
migrations.RemoveIndex(
17+
model_name="events",
18+
name="events_school_status_dtstart_utc_dtend_utc_added_at_idx",
19+
),
20+
migrations.AddIndex(
21+
model_name="events",
22+
index=models.Index(
23+
fields=["school", "status", "dtend_utc"],
24+
name="events_school_status_dtend_idx",
25+
),
26+
),
27+
migrations.AddIndex(
28+
model_name="events",
29+
index=models.Index(
30+
condition=models.Q(("dtend_utc__isnull", True)),
31+
fields=["school", "status", "dtstart_utc"],
32+
name="events_school_status_dtstart_nullend_idx",
33+
),
34+
),
35+
]

backend/apps/events/models.py

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -131,8 +131,12 @@ class Events(models.Model):
131131
class Meta:
132132
db_table = "events"
133133
indexes = [
134-
# Composite index for school, status, dtstart_utc (used for ordering), and added_at
135-
models.Index(fields=["school", "status", "dtstart_utc", "added_at"], name="events_school_status_dtstart_utc_added_at_idx"),
134+
models.Index(fields=["school", "status", "dtend_utc"], name="events_school_status_dtend_idx"),
135+
models.Index(
136+
fields=["school", "status", "dtstart_utc"],
137+
condition=models.Q(dtend_utc__isnull=True),
138+
name="events_school_status_dtstart_nullend_idx",
139+
),
136140
]
137141

138142
def __str__(self):

backend/apps/events/views.py

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,9 +37,13 @@ def get_events(request):
3737
school="University of Waterloo"
3838
)
3939

40-
# Apply default dtstart_utc filter only if not provided in request
40+
# Apply default upcoming events filter only if not provided in request
4141
if not dtstart_utc_param:
42-
queryset = queryset.filter(dtstart_utc__gte=timezone.now() - timedelta(hours=1))
42+
now = timezone.now()
43+
one_hour_ago = now - timedelta(hours=1)
44+
queryset = queryset.filter(
45+
Q(dtend_utc__gte=now) | (Q(dtend_utc__isnull=True) & Q(dtstart_utc__gte=one_hour_ago))
46+
)
4347

4448
queryset = queryset.order_by("dtstart_utc")
4549

0 commit comments

Comments
 (0)