Skip to content

Commit cd285e3

Browse files
committed
updated views for contest and fixed minor bugs
1 parent 13f5081 commit cd285e3

File tree

1 file changed

+68
-6
lines changed

1 file changed

+68
-6
lines changed

questions/views.py

+68-6
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
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
44
from io import BytesIO
55
from reportlab.lib.pagesizes import letter
66
from reportlab.pdfgen import canvas
77

88
from django.contrib.auth.decorators import login_required
9-
9+
from icecream import ic
1010
@login_required
1111
def questions_groups(request, group_id):
1212
questions = Question.objects.filter(question_group=group_id)
@@ -18,22 +18,33 @@ def questions_groups(request, group_id):
1818

1919
submissions = Submission.objects.filter(user=request.user, question__question_group=group_id)
2020
user = request.user
21+
contest = Contest.objects.filter(user=user, question_group=group_id).first()
2122
context = {
2223
'questions': questions.order_by('id'),
2324
'languages': language,
2425
"group": QuestionGroup.objects.get(id=group_id),
2526
"user": user,
26-
"submissions": submissions
27+
"submissions": submissions,
28+
"contest": contest
2729
}
2830
return render(request, 'questions_groups.html', context)
2931

3032
@login_required
3133
def question(request, question_id):
3234
question = Question.objects.get(id=question_id)
3335
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
3443
context = {
3544
'question': question,
36-
'user': user
45+
'user': user,
46+
'contest': contest,
47+
'submission':submission
3748
}
3849
return render(request, 'question.html', context)
3950

@@ -44,6 +55,7 @@ def question(request, question_id):
4455
from io import BytesIO
4556
from datetime import datetime
4657
from .models import Question, Submission, QuestionGroup
58+
from datetime import datetime, timedelta
4759

4860
@login_required
4961
def generate_report(request, group_id):
@@ -127,3 +139,53 @@ def generate_report(request, group_id):
127139
doc.build(elements)
128140
buffer.seek(0)
129141
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

Comments
 (0)