Skip to content

Commit 3c8fa2a

Browse files
committed
change user profile on submit
1 parent 1690eed commit 3c8fa2a

File tree

2 files changed

+22
-25
lines changed

2 files changed

+22
-25
lines changed

account/models.py

+3-21
Original file line numberDiff line numberDiff line change
@@ -70,33 +70,15 @@ class Meta:
7070

7171
class UserProfile(models.Model):
7272
user = models.OneToOneField(User, on_delete=models.CASCADE)
73-
# Task_problems_status examples:
74-
# {
75-
# "problems": {
76-
# "1": {
77-
# "status": JudgeStatus.ACCEPTED,
78-
# "Score:" 80,
79-
# "passed test case": [1, 2],
80-
# "_id": "1000"
81-
# }
82-
# },
83-
# "contest_problems": {
84-
# "1": {
85-
# "status": JudgeStatus.Error,
86-
# "Score:" 80,
87-
# "passed test case": [1, 2],
88-
# "_id": "1000"
89-
# }
90-
# }
91-
# }
73+
# dict of problem.id:max_grade
9274
problems_status = JSONField(default=dict)
9375
real_name = models.TextField(null=True)
9476
blog = models.URLField(null=True)
9577
github = models.TextField(null=True)
9678
school = models.TextField(null=True)
9779
major = models.TextField(null=True)
9880
language = models.TextField(null=True)
99-
#for Contest
81+
# for Contest
10082
accepted_number = models.IntegerField(default=0)
10183
total_score = models.IntegerField(default=0)
10284

@@ -109,4 +91,4 @@ def add_score(self, this_time_score, last_time_score=None):
10991
self.total_score = models.F("total_score") - last_time_score + this_time_score
11092
self.save()
11193
class Meta:
112-
db_table = "user_profile"
94+
db_table = "user_profile"

submission/views/user.py

+19-4
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,6 @@ def check_contest_permission(self, request):
7373
def post(self, request):
7474
# print(request.data)
7575
data = request.data
76-
hide_id = False
7776

7877
error = self.throttling(request)
7978
if error:
@@ -133,10 +132,26 @@ def post(self, request):
133132
self.error(str(e))
134133
problem.save()
135134

136-
if hide_id:
137-
return self.success()
135+
score = submission.grade
136+
user = User.objects.get(id=request.user.id)
137+
assert user
138+
profile = UserProfile.objects.get(user=user)
139+
assert profile
140+
if problem._id not in profile.problems_status:
141+
profile.problems_status[problem._id] = score
142+
profile.total_score += score
143+
if score == 100:
144+
profile.accepted_number += 1
138145
else:
139-
return self.success(SubmissionModelSerializer(submission).data)
146+
prev_score = profile.problems_status[problem._id]
147+
if score > prev_score:
148+
profile.problems_status[problem._id] = score
149+
profile.total_score += (score - prev_score)
150+
if score == 100:
151+
profile.accepted_number += 1
152+
profile.save()
153+
154+
return self.success(SubmissionModelSerializer(submission).data)
140155

141156
@login_required
142157
def get(self, request):

0 commit comments

Comments
 (0)