Skip to content

Commit

Permalink
change to mongodb atlas
Browse files Browse the repository at this point in the history
  • Loading branch information
phattd15 committed Dec 7, 2021
1 parent 339119c commit 4aa1412
Show file tree
Hide file tree
Showing 6 changed files with 98 additions and 24 deletions.
10 changes: 9 additions & 1 deletion arugo/settings.py
Original file line number Diff line number Diff line change
Expand Up @@ -71,7 +71,15 @@
"default": {
"ENGINE": "django.db.backends.sqlite3",
"NAME": BASE_DIR / "db.sqlite3",
}
},
"problemset": {
"ENGINE": "djongo",
"NAME": "arugo",
"ENFORCE_SCHEMA": False,
"CLIENT": {
"host": "mongodb+srv://p:p@cluster0.lu4wq.mongodb.net/arugo?retryWrites=true&w=majority"
},
},
}


Expand Down
51 changes: 51 additions & 0 deletions base/migrations/0009_auto_20211207_1021.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
# Generated by Django 3.2.9 on 2021-12-07 03:21

from django.conf import settings
from django.db import migrations, models
import django.db.models.deletion


class Migration(migrations.Migration):

dependencies = [
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
('base', '0008_profile_msg'),
]

operations = [
migrations.AlterField(
model_name='authquery',
name='handle',
field=models.CharField(default='mike', max_length=40),
),
migrations.AlterField(
model_name='authquery',
name='index',
field=models.CharField(default='A', max_length=4),
),
migrations.AlterField(
model_name='authquery',
name='password',
field=models.CharField(default='bruh', max_length=128),
),
migrations.AlterField(
model_name='problem',
name='index',
field=models.CharField(default='A', max_length=4),
),
migrations.AlterField(
model_name='problem',
name='name',
field=models.CharField(default='codeforces', max_length=200),
),
migrations.AlterField(
model_name='profile',
name='handle',
field=models.CharField(default='Mike', max_length=40),
),
migrations.AlterField(
model_name='profile',
name='user',
field=models.ForeignKey(default=None, on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL),
),
]
Binary file not shown.
14 changes: 7 additions & 7 deletions base/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,9 +11,9 @@

class Problem(models.Model):
contest_id = models.IntegerField(default=1)
name = models.CharField(max_length=200)
name = models.CharField(max_length=200, default="codeforces")
rating = models.IntegerField(default=1500)
index = models.CharField(max_length=4)
index = models.CharField(max_length=4, default="A")

def __str__(self):
return (
Expand All @@ -34,8 +34,8 @@ def __str__(self):


class Profile(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE)
handle = models.CharField(max_length=40)
user = models.ForeignKey(User, on_delete=models.CASCADE, default=None)
handle = models.CharField(max_length=40, default="Mike")
registration_date = models.DateField(auto_now_add=True)
rating_progress = models.CharField(max_length=1000, default="[]")
virtual_rating = models.IntegerField(default=1400)
Expand All @@ -50,12 +50,12 @@ def __str__(self):


class AuthQuery(models.Model):
handle = models.CharField(max_length=40)
password = models.CharField(max_length=128)
handle = models.CharField(max_length=40, default="mike")
password = models.CharField(max_length=128, default="bruh")
date = models.DateTimeField(auto_now_add=True)
rating = models.IntegerField(default=1400)
contest_id = models.IntegerField(default=1400)
index = models.CharField(max_length=4)
index = models.CharField(max_length=4, default="A")
valid = models.BooleanField(default=False)


Expand Down
36 changes: 24 additions & 12 deletions base/util.py
Original file line number Diff line number Diff line change
Expand Up @@ -31,11 +31,11 @@ def read_data(url):
def fetch_problemset():
URL = "https://codeforces.com/api/problemset.problems"

FetchData.objects.all().delete()
Problem.objects.all().delete()
FetchData.objects.using("problemset").all().delete()
Problem.objects.using("problemset").all().delete()

fd = FetchData()
fd.save()
fd.save(using="problemset")

data = read_data(URL)

Expand All @@ -61,10 +61,12 @@ def fetch_problemset():
rating=problem["rating"],
index=problem["index"],
)
p.save()
p.save(using="problemset")


def update_problemset():
print("problemset updating")

AuthQuery.objects.all().delete()

URL = "https://codeforces.com/api/problemset.problems"
Expand All @@ -74,9 +76,13 @@ def update_problemset():
if data == [] or not "problems" in data:
return

FetchData.objects.using("problemset").all().delete()
fd = FetchData()
fd.save(using="problemset")

problemset = data["problems"]

for problem in problemset[:100]:
for problem in problemset[:30]:
if (
problem["type"] != "PROGRAMMING"
or not "rating" in problem
Expand All @@ -87,7 +93,7 @@ def update_problemset():
if represents_int(problem["index"]):
continue

if Problem.objects.filter(
if Problem.objects.using("problemset").filter(
contest_id=problem["contestId"], index=problem["index"]
):
continue
Expand All @@ -98,7 +104,7 @@ def update_problemset():
rating=problem["rating"],
index=problem["index"],
)
p.save()
p.save(using="problemset")


def get_latest_submissions(handle, cnt=500):
Expand Down Expand Up @@ -181,7 +187,7 @@ def get_challenge(handle, user_rating, rating):
res = []

for rt in rating:
problemset = Problem.objects.filter(rating=rt)
problemset = Problem.objects.using("problemset").filter(rating=rt)

if len(problemset) == 0:
continue
Expand Down Expand Up @@ -246,7 +252,9 @@ def validate_solution(handle, problem_id, deadline):


def accept_challenge(profile, contest_id, index):
contest = Problem.objects.filter(contest_id=contest_id, index=index)
contest = Problem.objects.using("problemset").filter(
contest_id=contest_id, index=index
)

if len(contest) == 0:
return
Expand Down Expand Up @@ -300,7 +308,9 @@ def validate_challenge(profile):
contest_id, index = parse_problem_id(profile.current_problem)
contest_id = int(contest_id)

problem = Problem.objects.get(contest_id=contest_id, index=index)
problem = Problem.objects.using("problemset").get(
contest_id=contest_id, index=index
)

if timezone.now() > profile.deadline:
delta = 0
Expand Down Expand Up @@ -408,7 +418,9 @@ def give_up_problem(profile):
contest_id, index = parse_problem_id(profile.current_problem)
contest_id = int(contest_id)

problem = Problem.objects.get(contest_id=contest_id, index=index)
problem = Problem.objects.using("problemset").get(
contest_id=contest_id, index=index
)
delta = rating_loss(profile.virtual_rating, problem.rating)

apply_rating_change(profile, delta, problem)
Expand Down Expand Up @@ -466,7 +478,7 @@ def undergoing_auth_query(handle):

def get_random_problem():
id = randint(1, 6000)
pp = Problem.objects.all()
pp = Problem.objects.using("problemset").all()
return pp[id]


Expand Down
11 changes: 7 additions & 4 deletions base/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,9 @@ def index(request):
context["history_data"] = []

for contest_id, index, delta in history:
problem = Problem.objects.get(contest_id=contest_id, index=index)
problem = Problem.objects.using("problemset").get(
contest_id=contest_id, index=index
)
color, bg_color = rating_color(problem.rating)
context["history_data"].append((problem, color, bg_color, delta))

Expand All @@ -56,11 +58,10 @@ def challenge_list(request):
if profile.in_progress:
return redirect("challenge")

fd = FetchData.objects.all()
fd = FetchData.objects.using("problemset").all()

if fd[0].last_update + timedelta(hours=12) < timezone.now():
update_problemset()
fd[0].last_update = timezone.now()

if request.method == "POST":
contest_id = request.POST.get("contest_id")
Expand Down Expand Up @@ -242,7 +243,9 @@ def challenge_site(request):
profile.save()

contest_id, index = parse_problem_id(profile.current_problem)
problem = Problem.objects.get(contest_id=contest_id, index=index)
problem = Problem.objects.using("problemset").get(
contest_id=contest_id, index=index
)
color, bg_color = rating_color(problem.rating)

context = {}
Expand Down

0 comments on commit 4aa1412

Please sign in to comment.