1
- from django .shortcuts import render
2
- from .models import QuestionGroup , Question
3
- from django .http import HttpResponse
1
+ from django .shortcuts import render , redirect
2
+ from .models import QuestionGroup , Question , Contest , Submission
3
+ from django .http import HttpResponse , JsonResponse
4
4
from io import BytesIO
5
5
from reportlab .lib .pagesizes import letter
6
6
from reportlab .pdfgen import canvas
7
7
8
8
from django .contrib .auth .decorators import login_required
9
-
9
+ from icecream import ic
10
10
@login_required
11
11
def questions_groups (request , group_id ):
12
12
questions = Question .objects .filter (question_group = group_id )
@@ -18,22 +18,33 @@ def questions_groups(request, group_id):
18
18
19
19
submissions = Submission .objects .filter (user = request .user , question__question_group = group_id )
20
20
user = request .user
21
+ contest = Contest .objects .filter (user = user , question_group = group_id ).first ()
21
22
context = {
22
23
'questions' : questions .order_by ('id' ),
23
24
'languages' : language ,
24
25
"group" : QuestionGroup .objects .get (id = group_id ),
25
26
"user" : user ,
26
- "submissions" : submissions
27
+ "submissions" : submissions ,
28
+ "contest" : contest
27
29
}
28
30
return render (request , 'questions_groups.html' , context )
29
31
30
32
@login_required
31
33
def question (request , question_id ):
32
34
question = Question .objects .get (id = question_id )
33
35
user = request .user
36
+ contest = Contest .objects .filter (user = user , question_group = question .question_group ).first ()
37
+
38
+ try :
39
+ submission = Submission .objects .filter (user = user , question = question ).first ()
40
+ ic (submission .id )
41
+ except :
42
+ submission = None
34
43
context = {
35
44
'question' : question ,
36
- 'user' : user
45
+ 'user' : user ,
46
+ 'contest' : contest ,
47
+ 'submission' :submission
37
48
}
38
49
return render (request , 'question.html' , context )
39
50
@@ -44,6 +55,7 @@ def question(request, question_id):
44
55
from io import BytesIO
45
56
from datetime import datetime
46
57
from .models import Question , Submission , QuestionGroup
58
+ from datetime import datetime , timedelta
47
59
48
60
@login_required
49
61
def generate_report (request , group_id ):
@@ -127,3 +139,53 @@ def generate_report(request, group_id):
127
139
doc .build (elements )
128
140
buffer .seek (0 )
129
141
return HttpResponse (buffer , content_type = "application/pdf" )
142
+
143
+ @login_required
144
+ def add_user_to_contest (request , group_id ):
145
+ # Ensure the user is authenticated
146
+ if not request .user .is_authenticated :
147
+ return HttpResponse ("Unauthorized" , status = 401 )
148
+
149
+ # Ensure the group exists
150
+ group = get_object_or_404 (QuestionGroup , id = group_id )
151
+
152
+ # Create a new contest instance
153
+ contest , created = Contest .objects .get_or_create (
154
+ user = request .user ,
155
+ question_group = group ,
156
+ defaults = {
157
+ 'start_time' : datetime .now (),
158
+ 'duration' : timedelta (minutes = 120 )
159
+ }
160
+ )
161
+ if created :
162
+ contest .save ()
163
+ return redirect ('questions:q_group' , group_id = group_id )
164
+
165
+ @login_required
166
+ def deduct_time (request , contest_id , time ):
167
+ # Ensure the user is authenticated
168
+ if not request .user .is_authenticated :
169
+ return HttpResponse ("Unauthorized" , status = 401 )
170
+
171
+ # Ensure the contest exists
172
+ contest = get_object_or_404 (Contest , id = contest_id )
173
+
174
+ # Deduct 5 minutes from the contest duration
175
+ contest .duration -= timedelta (minutes = time )
176
+ contest .save ()
177
+ return JsonResponse ({'status' : 'success' , 'new_duration' : contest .duration .total_seconds ()})
178
+
179
+ @login_required
180
+ def increase_time (request , contest_id , time ):
181
+ # Ensure the user is authenticated
182
+ if not request .user .is_authenticated :
183
+ return HttpResponse ("Unauthorized" , status = 401 )
184
+
185
+ # Ensure the contest exists
186
+ contest = get_object_or_404 (Contest , id = contest_id )
187
+
188
+ # Increase the contest duration by the specified time
189
+ contest .duration += timedelta (minutes = time )
190
+ contest .save ()
191
+ return JsonResponse ({'status' : 'success' , 'new_duration' : contest .duration .total_seconds ()})
0 commit comments