-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy path0001_initial.py
More file actions
213 lines (207 loc) · 12.4 KB
/
0001_initial.py
File metadata and controls
213 lines (207 loc) · 12.4 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
# Generated by Django 3.2.4 on 2023-11-10 22:10
from django.conf import settings
import django.core.validators
from django.db import migrations, models
import django.db.models.deletion
import phonenumber_field.modelfields
class Migration(migrations.Migration):
initial = True
dependencies = [
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
]
operations = [
migrations.CreateModel(
name='Course',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('course_code', models.CharField(max_length=10)),
('department', models.CharField(max_length=10)),
('course_title', models.CharField(max_length=100)),
('description', models.CharField(blank=True, max_length=255)),
('archived', models.BooleanField(default=False)),
('invite_only', models.BooleanField(default=False)),
],
),
migrations.CreateModel(
name='Question',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('text', models.TextField()),
('video_chat_url', models.URLField(blank=True, null=True)),
('note', models.CharField(blank=True, max_length=255, null=True)),
('resolved_note', models.BooleanField(default=True)),
('status', models.CharField(choices=[('ASKED', 'Asked'), ('WITHDRAWN', 'Withdrawn'), ('ACTIVE', 'Active'), ('REJECTED', 'Rejected'), ('ANSWERED', 'Answered')], default='ASKED', max_length=9)),
('time_asked', models.DateTimeField(auto_now_add=True)),
('time_response_started', models.DateTimeField(blank=True, null=True)),
('time_responded_to', models.DateTimeField(blank=True, null=True)),
('rejected_reason', models.CharField(blank=True, max_length=255, null=True)),
('should_send_up_soon_notification', models.BooleanField(default=False)),
('student_descriptor', models.CharField(blank=True, max_length=255, null=True)),
('asked_by', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='asked_questions', to=settings.AUTH_USER_MODEL)),
],
),
migrations.CreateModel(
name='Queue',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('name', models.CharField(max_length=255)),
('description', models.TextField()),
('question_template', models.TextField(blank=True, default='')),
('archived', models.BooleanField(default=False)),
('pin_enabled', models.BooleanField(default=False)),
('pin', models.CharField(blank=True, max_length=50, null=True)),
('estimated_wait_time', models.IntegerField(default=-1)),
('active', models.BooleanField(default=False)),
('rate_limit_enabled', models.BooleanField(default=False)),
('rate_limit_length', models.IntegerField(blank=True, null=True)),
('rate_limit_questions', models.IntegerField(blank=True, null=True)),
('rate_limit_minutes', models.IntegerField(blank=True, null=True)),
('video_chat_setting', models.CharField(choices=[('REQUIRED', 'required'), ('OPTIONAL', 'optional'), ('DISABLED', 'disabled')], default='OPTIONAL', max_length=8)),
('course', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='ohq.course')),
],
),
migrations.CreateModel(
name='Semester',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('year', models.IntegerField()),
('term', models.CharField(choices=[('SPRING', 'Spring'), ('SUMMER', 'Summer'), ('FALL', 'Fall'), ('WINTER', 'Winter')], default='FALL', max_length=6)),
],
),
migrations.CreateModel(
name='Review',
fields=[
('rating', models.IntegerField(blank=True, null=True, validators=[django.core.validators.MinValueValidator(1), django.core.validators.MaxValueValidator(5)])),
('content', models.TextField()),
('question', models.OneToOneField(blank=True, on_delete=django.db.models.deletion.CASCADE, primary_key=True, related_name='reviews', serialize=False, to='ohq.question')),
('time_updated', models.DateTimeField(auto_now=True)),
],
),
migrations.CreateModel(
name='Tag',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('name', models.CharField(max_length=255)),
('course', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='ohq.course')),
],
),
migrations.CreateModel(
name='QueueStatistic',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('metric', models.CharField(choices=[('HEATMAP_AVG_WAIT', 'Average wait-time heatmap'), ('HEATMAP_QUESTIONS_PER_TA', 'Questions per TA heatmap'), ('AVG_WAIT', 'Average wait-time per day'), ('NUM_ANSWERED', 'Number of questions answered per day'), ('STUDENTS_HELPED', 'Students helped per day'), ('AVG_TIME_HELPING', 'Average time helping students')], max_length=256)),
('value', models.DecimalField(decimal_places=8, max_digits=16)),
('day', models.IntegerField(blank=True, choices=[(1, 'Sunday'), (2, 'Monday'), (3, 'Tuesday'), (4, 'Wednesday'), (5, 'Thursday'), (6, 'Friday'), (7, 'Saturday')], null=True)),
('hour', models.IntegerField(blank=True, null=True, validators=[django.core.validators.MinValueValidator(0), django.core.validators.MaxValueValidator(23)])),
('date', models.DateField(blank=True, null=True)),
('queue', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='ohq.queue')),
],
),
migrations.AddField(
model_name='question',
name='queue',
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='ohq.queue'),
),
migrations.AddField(
model_name='question',
name='responded_to_by',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='responded_questions', to=settings.AUTH_USER_MODEL),
),
migrations.AddField(
model_name='question',
name='tags',
field=models.ManyToManyField(blank=True, to='ohq.Tag'),
),
migrations.CreateModel(
name='Profile',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('sms_notifications_enabled', models.BooleanField(default=False)),
('sms_verification_code', models.CharField(blank=True, max_length=6, null=True)),
('sms_verification_timestamp', models.DateTimeField(blank=True, null=True)),
('sms_verified', models.BooleanField(default=False)),
('phone_number', phonenumber_field.modelfields.PhoneNumberField(blank=True, max_length=128, null=True, region=None)),
('user', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)),
],
),
migrations.CreateModel(
name='MembershipInvite',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('email', models.EmailField(max_length=254)),
('kind', models.CharField(choices=[('STUDENT', 'Student'), ('TA', 'TA'), ('HEAD_TA', 'Head TA'), ('PROFESSOR', 'Professor')], default='STUDENT', max_length=9)),
('time_created', models.DateTimeField(auto_now_add=True)),
('course', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='ohq.course')),
],
),
migrations.CreateModel(
name='Membership',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('kind', models.CharField(choices=[('STUDENT', 'Student'), ('TA', 'TA'), ('HEAD_TA', 'Head TA'), ('PROFESSOR', 'Professor')], default='STUDENT', max_length=9)),
('time_created', models.DateTimeField(auto_now_add=True)),
('last_active', models.DateTimeField(blank=True, null=True)),
('course', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='ohq.course')),
('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)),
],
),
migrations.CreateModel(
name='CourseStatistic',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('metric', models.CharField(choices=[('STUDENT_QUESTIONS_ASKED', 'Student: Questions asked'), ('STUDENT_TIME_BEING_HELPED', 'Student: Time being helped'), ('INSTR_QUESTIONS_ANSWERED', 'Instructor: Questions answered'), ('INSTR_TIME_ANSWERING', 'Instructor: Time answering questions')], max_length=256)),
('value', models.DecimalField(decimal_places=8, max_digits=16)),
('date', models.DateField(blank=True, null=True)),
('course', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='ohq.course')),
('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)),
],
),
migrations.AddField(
model_name='course',
name='members',
field=models.ManyToManyField(through='ohq.Membership', to=settings.AUTH_USER_MODEL),
),
migrations.AddField(
model_name='course',
name='semester',
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='ohq.semester'),
),
migrations.CreateModel(
name='Announcement',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('content', models.TextField()),
('time_updated', models.DateTimeField(auto_now=True)),
('author', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='announcements', to=settings.AUTH_USER_MODEL)),
('course', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='announcements', to='ohq.course')),
],
),
migrations.AddConstraint(
model_name='tag',
constraint=models.UniqueConstraint(fields=('name', 'course'), name='unique_course_tag'),
),
migrations.AddConstraint(
model_name='queuestatistic',
constraint=models.UniqueConstraint(fields=('queue', 'metric', 'day', 'hour', 'date'), name='unique_statistic'),
),
migrations.AddConstraint(
model_name='queue',
constraint=models.UniqueConstraint(fields=('course', 'name'), name='unique_queue_name'),
),
migrations.AddConstraint(
model_name='membershipinvite',
constraint=models.UniqueConstraint(fields=('course', 'email'), name='unique_invited_course_user'),
),
migrations.AddConstraint(
model_name='membership',
constraint=models.UniqueConstraint(fields=('course', 'user'), name='unique_membership'),
),
migrations.AddConstraint(
model_name='coursestatistic',
constraint=models.UniqueConstraint(fields=('user', 'course', 'metric', 'date'), name='course_statistic'),
),
migrations.AddConstraint(
model_name='course',
constraint=models.UniqueConstraint(fields=('course_code', 'department', 'semester'), name='unique_course_name'),
),
]