Skip to content

Commit 3728c0c

Browse files
committed
Revise indices further
1 parent effd53f commit 3728c0c

2 files changed

Lines changed: 138 additions & 9 deletions

File tree

Lines changed: 122 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,122 @@
1+
# Generated by Django 5.2.4 on 2025-10-02 17:07
2+
3+
import uuid
4+
from django.conf import settings
5+
from django.db import migrations, models
6+
7+
8+
class Migration(migrations.Migration):
9+
10+
dependencies = [
11+
('clubs', '0131_alter_club_tags'),
12+
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
13+
]
14+
15+
operations = [
16+
migrations.AlterField(
17+
model_name='applicationsubmission',
18+
name='status',
19+
field=models.IntegerField(choices=[(1, 'Pending'), (2, 'Rejected after written application'), (3, 'Rejected after interview(s)'), (4, 'Accepted')], db_index=True, default=1),
20+
),
21+
migrations.AlterField(
22+
model_name='badge',
23+
name='purpose',
24+
field=models.CharField(choices=[('fair', 'Fair'), ('org', 'Organization')], db_index=True, max_length=255),
25+
),
26+
migrations.AlterField(
27+
model_name='club',
28+
name='archived',
29+
field=models.BooleanField(db_index=True, default=False),
30+
),
31+
migrations.AlterField(
32+
model_name='clubapplication',
33+
name='application_end_time',
34+
field=models.DateTimeField(db_index=True),
35+
),
36+
migrations.AlterField(
37+
model_name='clubapplication',
38+
name='application_start_time',
39+
field=models.DateTimeField(db_index=True),
40+
),
41+
migrations.AlterField(
42+
model_name='clubapplication',
43+
name='result_release_time',
44+
field=models.DateTimeField(db_index=True),
45+
),
46+
migrations.AlterField(
47+
model_name='clubfair',
48+
name='end_time',
49+
field=models.DateTimeField(db_index=True),
50+
),
51+
migrations.AlterField(
52+
model_name='clubfair',
53+
name='start_time',
54+
field=models.DateTimeField(db_index=True),
55+
),
56+
migrations.AlterField(
57+
model_name='event',
58+
name='ics_uuid',
59+
field=models.UUIDField(db_index=True, default=uuid.uuid4),
60+
),
61+
migrations.AlterField(
62+
model_name='event',
63+
name='type',
64+
field=models.IntegerField(choices=[(0, 'Other'), (1, 'Recruitment'), (2, 'GBM'), (3, 'Speaker'), (4, 'Activities Fair'), (5, 'Social'), (6, 'Career')], db_index=True, default=1),
65+
),
66+
migrations.AlterField(
67+
model_name='eventshowing',
68+
name='end_time',
69+
field=models.DateTimeField(db_index=True),
70+
),
71+
migrations.AlterField(
72+
model_name='historicalclub',
73+
name='archived',
74+
field=models.BooleanField(db_index=True, default=False),
75+
),
76+
migrations.AlterField(
77+
model_name='membership',
78+
name='role',
79+
field=models.IntegerField(choices=[(0, 'Owner'), (10, 'Officer'), (20, 'Member')], db_index=True, default=20),
80+
),
81+
migrations.AlterField(
82+
model_name='ticket',
83+
name='type',
84+
field=models.CharField(db_index=True, max_length=100),
85+
),
86+
migrations.AddIndex(
87+
model_name='club',
88+
index=models.Index(fields=['approved', 'archived'], name='clubs_club_approve_a30dc8_idx'),
89+
),
90+
migrations.AddIndex(
91+
model_name='clubfair',
92+
index=models.Index(fields=['end_time', 'start_time'], name='fair_time_idx'),
93+
),
94+
migrations.AddIndex(
95+
model_name='clubvisit',
96+
index=models.Index(fields=['club', 'visit_type', 'created_at'], name='clubs_clubv_club_id_3cfb7e_idx'),
97+
),
98+
migrations.AddIndex(
99+
model_name='eventshowing',
100+
index=models.Index(fields=['start_time', 'end_time'], name='clubs_event_start_t_d0f1a9_idx'),
101+
),
102+
migrations.AddIndex(
103+
model_name='eventshowing',
104+
index=models.Index(fields=['event', 'start_time'], name='event_start_idx'),
105+
),
106+
migrations.AddIndex(
107+
model_name='ticket',
108+
index=models.Index(fields=['showing', 'type'], name='clubs_ticke_showing_94ab22_idx'),
109+
),
110+
migrations.AddIndex(
111+
model_name='ticket',
112+
index=models.Index(fields=['showing', 'owner'], name='clubs_ticke_showing_7450aa_idx'),
113+
),
114+
migrations.AddIndex(
115+
model_name='ticket',
116+
index=models.Index(fields=['showing', 'holder'], name='clubs_ticke_showing_86d999_idx'),
117+
),
118+
migrations.AddIndex(
119+
model_name='ticket',
120+
index=models.Index(condition=models.Q(('buyable', True), ('holder__isnull', True), ('owner__isnull', True)), fields=['showing', 'type'], name='ticket_available_idx'),
121+
),
122+
]

backend/clubs/models.py

Lines changed: 16 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
from django.core.mail import EmailMultiAlternatives
1919
from django.core.validators import validate_email
2020
from django.db import models, transaction
21-
from django.db.models import Sum
21+
from django.db.models import Q, Sum
2222
from django.db.models.deletion import ProtectedError
2323
from django.dispatch import receiver
2424
from django.template.loader import render_to_string
@@ -295,7 +295,7 @@ class Club(models.Model):
295295
(APPLICATION_AND_INTERVIEW, "Application and Interview Required"),
296296
)
297297

298-
approved = models.BooleanField(null=True, default=None, db_index=True)
298+
approved = models.BooleanField(null=True, default=None)
299299
approved_by = models.ForeignKey(
300300
get_user_model(),
301301
null=True,
@@ -957,6 +957,11 @@ def __str__(self):
957957
f"({self.start_time.strftime(fmt)} - {self.end_time.strftime(fmt)})"
958958
)
959959

960+
class Meta:
961+
indexes = [
962+
models.Index(fields=["end_time", "start_time"], name="fair_time_idx"),
963+
]
964+
960965

961966
class ClubFairRegistration(models.Model):
962967
"""
@@ -1035,7 +1040,7 @@ class EventShowing(models.Model):
10351040
"""
10361041

10371042
event = models.ForeignKey(Event, on_delete=models.CASCADE)
1038-
start_time = models.DateTimeField(db_index=True)
1043+
start_time = models.DateTimeField()
10391044
end_time = models.DateTimeField(db_index=True)
10401045
location = models.CharField(max_length=255, null=True, blank=True)
10411046
ticket_order_limit = models.IntegerField(default=10)
@@ -1050,6 +1055,7 @@ def __str__(self):
10501055
class Meta:
10511056
indexes = [
10521057
models.Index(fields=["start_time", "end_time"]),
1058+
models.Index(fields=["event", "start_time"], name="event_start_idx"),
10531059
]
10541060

10551061

@@ -1115,9 +1121,7 @@ class ClubVisit(models.Model):
11151121
(MANAGE_PAGE, "Manage Page Visit"),
11161122
(FAIR_PAGE, "Fair Page Visit"),
11171123
)
1118-
visit_type = models.IntegerField(
1119-
choices=VISIT_TYPES, default=CLUB_PAGE, db_index=True
1120-
)
1124+
visit_type = models.IntegerField(choices=VISIT_TYPES, default=CLUB_PAGE)
11211125

11221126
created_at = models.DateTimeField(auto_now_add=True)
11231127
updated_at = models.DateTimeField(auto_now=True)
@@ -1426,9 +1430,6 @@ def __str__(self):
14261430

14271431
class Meta:
14281432
unique_together = (("club", "person"),)
1429-
indexes = [
1430-
models.Index(fields=["person", "club", "role"]),
1431-
]
14321433

14331434

14341435
def get_token():
@@ -2212,6 +2213,12 @@ class Meta:
22122213
models.Index(fields=["showing", "type"]),
22132214
models.Index(fields=["showing", "owner"]),
22142215
models.Index(fields=["showing", "holder"]),
2216+
# Speed up available ticket lookups for add-to-cart
2217+
models.Index(
2218+
fields=["showing", "type"],
2219+
name="ticket_available_idx",
2220+
condition=Q(owner__isnull=True, holder__isnull=True, buyable=True),
2221+
),
22152222
]
22162223

22172224
def delete(self, *args, **kwargs):

0 commit comments

Comments
 (0)