Skip to content

Commit 13f5081

Browse files
committed
added contest model for tracking of individual contests
1 parent a46ba0e commit 13f5081

File tree

3 files changed

+36
-2
lines changed

3 files changed

+36
-2
lines changed

questions/admin.py

+2-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
from django.contrib import admin
2-
from .models import QuestionGroup, Question, Submission
2+
from .models import QuestionGroup, Question, Submission, Contest
33
# Register your models here.
44

55
admin.site.register(QuestionGroup)
66
admin.site.register(Question)
77
admin.site.register(Submission)
8+
admin.site.register(Contest)

questions/models.py

+31-1
Original file line numberDiff line numberDiff line change
@@ -30,4 +30,34 @@ class Submission(models.Model):
3030
test_status = models.BooleanField(default=False)
3131

3232
def __str__(self):
33-
return f"{self.user.username} - {self.question.title}"
33+
return f"{self.user.username} - {self.question.title}"
34+
35+
36+
from django.db import models
37+
from django.contrib.auth.models import User
38+
from datetime import timedelta
39+
from django.utils import timezone
40+
class Contest(models.Model):
41+
user = models.ForeignKey(User, on_delete=models.CASCADE)
42+
question_group = models.ForeignKey(QuestionGroup, on_delete=models.CASCADE)
43+
start_time = models.DateTimeField(null=True, blank=True)
44+
duration = models.DurationField(default=timedelta(minutes=60)) # Default 60 minutes
45+
46+
class Meta:
47+
unique_together = ('user', 'question_group')
48+
49+
def __str__(self):
50+
return f"{self.user.username} - {self.question_group.name}"
51+
52+
def is_active(self):
53+
if self.start_time:
54+
end_time = self.start_time + self.duration
55+
return self.start_time <= timezone.now() <= end_time
56+
return False
57+
58+
def time_left(self):
59+
if self.start_time:
60+
end_time = self.start_time + self.duration
61+
remaining_time = end_time - timezone.now()
62+
return max(timedelta(0), remaining_time)
63+
return timedelta(0)

questions/urls.py

+3
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,9 @@
77
path('group/<int:group_id>/', questions_groups , name='q_group'),
88
path('<int:question_id>/', question, name='question'),
99
path('report/<int:group_id>/', generate_report, name='generate_report'),
10+
path('contest/<int:group_id>/', add_user_to_contest, name='add_user_to_contest'),
11+
path('contest/deduct/<int:contest_id>/<int:time>/', deduct_time, name='deduct_time'),
12+
path('contest/increase/<int:contest_id>/<int:time>/', increase_time, name='increase_time'),
1013
# path('<int:question_id>/results/', views.results, name='results'),
1114
# path('<int:question_id>/vote/', views.vote, name='vote'),
1215
]

0 commit comments

Comments
 (0)