Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 14 additions & 2 deletions account/views/profile.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@

from account.serializers import ProfileSerializer, EducationSerializer, WorkExperienceSerializer, UserSerializer, \
PublicProfileSerializer
from practice.models import Track, Practice, Subdomain
from practice.models import Track, Practice, Subdomain, PracticeSolution
from account.models import Profile, WorkExperience, Education
from practice.serializers import TrackSerializer, PracticeSerializer, PracticeFilterSerializer

Expand Down Expand Up @@ -67,7 +67,19 @@ class SinglePracticeView(APIView):
def get(self, request, track_slug, practice_slug):
practice = Practice.objects.get(slug=practice_slug)
serializer = PracticeSerializer(practice)
return Response(serializer.data)
solved = PracticeSolution.objects.filter(practice=practice).filter(user=request.user).exists()
data = {'solved': solved}
data.update(serializer.data)
return Response(data)

def post(self, request, track_slug, practice_slug):
practice = Practice.objects.get(slug=practice_slug)
user = request.user
solution = PracticeSolution.objects.get_or_create(user_id=user.id, practice_id=practice.id)
msg = {
'message': 'Solution submitted successfully'
}
return Response(msg)


class JobsView(APIView):
Expand Down
35 changes: 35 additions & 0 deletions practice/migrations/0002_auto_20201018_1229.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
# Generated by Django 3.0.7 on 2020-10-18 12:29

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),
('practice', '0001_initial'),
]

operations = [
migrations.AlterField(
model_name='practice',
name='subdomain',
field=models.ManyToManyField(related_name='subdomain', to='practice.Subdomain'),
),
migrations.CreateModel(
name='PracticeSolution',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('timestamp', models.DateTimeField(auto_now_add=True)),
('practice', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='practice.Practice')),
('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)),
],
),
migrations.AddField(
model_name='practice',
name='solutions',
field=models.ManyToManyField(related_name='solutions', through='practice.PracticeSolution', to=settings.AUTH_USER_MODEL),
),
]
9 changes: 8 additions & 1 deletion practice/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -35,12 +35,19 @@ class Practice(models.Model):
body = RichTextField()
difficulty = models.IntegerField()
timestamp = models.DateTimeField(auto_now_add=True)
subdomain = models.ManyToManyField(Subdomain)
subdomain = models.ManyToManyField(Subdomain, related_name='subdomain')
solutions = models.ManyToManyField(User, through='PracticeSolution', related_name='solutions')

def __str__(self):
return self.title


class PracticeSolution(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE)
practice = models.ForeignKey(Practice, on_delete=models.CASCADE)
timestamp = models.DateTimeField(auto_now_add=True)


def generate_slug_from_title(sender, instance, *args, **kwargs):
if not instance.slug:
instance.slug = unique_slug_generator(instance, for_=instance.title)
Expand Down
12 changes: 9 additions & 3 deletions practice/serializers.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
from rest_framework import serializers

from practice.models import Track, Practice
from practice.models import Track, Practice, PracticeSolution


class TrackSerializer(serializers.ModelSerializer):
Expand All @@ -12,10 +12,16 @@ class Meta:
class PracticeSerializer(serializers.ModelSerializer):
class Meta:
model = Practice
fields = '__all__'
exclude = ('solutions', )


class PracticeFilterSerializer(serializers.Serializer):
track = serializers.IntegerField()
difficulty = serializers.ListField(child=serializers.IntegerField(), allow_empty=True, allow_null=True)
subdomain = serializers.ListField(child=serializers.IntegerField(), allow_empty=True, allow_null=True)
subdomain = serializers.ListField(child=serializers.IntegerField(), allow_empty=True, allow_null=True)


class PracticeSolutionSerializer(serializers.ModelSerializer):
class Meta:
model = PracticeSolution
fields = '__all__'