Skip to content

Commit 17d479b

Browse files
committed
Completed the auth test, and curriculums listing
1 parent 2393eaf commit 17d479b

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

57 files changed

+844
-53
lines changed

src/Curriculum/__init__.py

Whitespace-only changes.

src/Curriculum/admin.py

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
from django.contrib import admin
2+
3+
from .models import (Curriculum, CurriculumEnrollment, CurriculumReview,
4+
CurriculumSyllabi, SyllabiProgress, SyllabiTopic)
5+
6+
admin.site.register([
7+
Curriculum,
8+
CurriculumEnrollment,
9+
CurriculumSyllabi,
10+
SyllabiTopic,
11+
SyllabiProgress,
12+
CurriculumReview
13+
])

src/Curriculum/api/__init__.py

Whitespace-only changes.

src/Curriculum/api/base/__init__.py

Whitespace-only changes.
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
from rest_framework import serializers
2+
3+
from Curriculum.models import Curriculum, CurriculumSyllabi
4+
5+
6+
class CurriculumSyllabiSerializer(serializers.ModelSerializer):
7+
class Meta:
8+
model = CurriculumSyllabi
9+
exclude = []
10+
11+
12+
class SearchQuerySerializer(serializers.Serializer):
13+
search = serializers.CharField(
14+
required=False, allow_blank=True, max_length=255
15+
)
16+
17+
18+
class CurriculumSerializer(serializers.ModelSerializer):
19+
weeks = serializers.SerializerMethodField()
20+
21+
class Meta:
22+
model = Curriculum
23+
exclude = ['resources']
24+
25+
def get_weeks(self, obj):
26+
return obj.curriculumsyllabi_set.all().count()
27+
28+
29+
class SingleCurriculumSerializer(CurriculumSerializer):
30+
syllabus = CurriculumSyllabiSerializer(many=True)
31+
32+
class Meta:
33+
model = Curriculum
34+
exclude = ['resources']

src/Curriculum/api/base/urls.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
from django.urls import path
2+
3+
from . import views
4+
5+
app_name = 'curriculum'
6+
urlpatterns = [
7+
path('', views.CurriculumList.as_view(), name='list-curriculum'),
8+
]

src/Curriculum/api/base/views.py

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
from drf_yasg.utils import swagger_auto_schema
2+
from rest_framework import generics, status
3+
from rest_framework.response import Response
4+
from rest_framework_simplejwt.exceptions import InvalidToken, TokenError
5+
from Curriculum.models import Curriculum
6+
7+
from . import serializers
8+
9+
10+
class CurriculumList(generics.ListAPIView):
11+
permission_classes = []
12+
serializer_class = serializers.CurriculumSerializer
13+
14+
def get_queryset(self):
15+
search = self.request.GET.get('search', None)
16+
queryset = Curriculum.objects.all()
17+
if search:
18+
queryset = queryset.filter(name__icontains=search)
19+
return queryset
20+
21+
@swagger_auto_schema(
22+
query_serializer=serializers.SearchQuerySerializer
23+
)
24+
def get(self, request, *args, **kwargs):
25+
return self.list(request, *args, **kwargs)
26+
27+
28+
class SingleCurriculum(generics.RetrieveAPIView):
29+
permission_classes = []
30+
serializer_class = serializers.SingleCurriculumSerializer
31+
lookup_field = 'id'
32+
33+
def get_queryset(self):
34+
return Curriculum.objects.all()
35+
36+
37+
def get(self, request, *args, **kwargs):
38+
return self.list(request, *args, **kwargs)

src/Curriculum/apps.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
from django.apps import AppConfig
2+
3+
4+
class CurriculumConfig(AppConfig):
5+
default_auto_field = 'django.db.models.BigAutoField'
6+
name = 'Curriculum'
Lines changed: 93 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,93 @@
1+
# Generated by Django 4.0 on 2023-04-27 20:17
2+
3+
import django.core.validators
4+
from django.db import migrations, models
5+
import django.db.models.deletion
6+
7+
8+
class Migration(migrations.Migration):
9+
10+
initial = True
11+
12+
dependencies = [
13+
('account', '0001_initial'),
14+
('Resource', '0001_initial'),
15+
]
16+
17+
operations = [
18+
migrations.CreateModel(
19+
name='Curriculum',
20+
fields=[
21+
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
22+
('name', models.CharField(max_length=255)),
23+
('description', models.TextField()),
24+
('objective', models.TextField()),
25+
('prerequisites', models.TextField()),
26+
('enrolled', models.IntegerField(default=0)),
27+
('difficulty', models.CharField(choices=[('B', 'Beginner'), ('I', 'Intermediate'), ('A', 'Advanced')], max_length=1)),
28+
('resources', models.ManyToManyField(blank=True, to='Resource.Resource')),
29+
],
30+
),
31+
migrations.CreateModel(
32+
name='CurriculumEnrollment',
33+
fields=[
34+
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
35+
('enrolled_at', models.DateTimeField(auto_now_add=True)),
36+
('progress', models.PositiveSmallIntegerField(default=0, validators=[django.core.validators.MinValueValidator(0), django.core.validators.MaxValueValidator(100)])),
37+
('completed', models.BooleanField(default=False)),
38+
('curriculum', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='Curriculum.curriculum')),
39+
('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='account.user')),
40+
],
41+
),
42+
migrations.CreateModel(
43+
name='CurriculumSyllabi',
44+
fields=[
45+
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
46+
('order', models.IntegerField(default=0)),
47+
('title', models.CharField(max_length=255)),
48+
('description', models.TextField()),
49+
('curriculum', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='Curriculum.curriculum')),
50+
],
51+
options={
52+
'ordering': ['order'],
53+
},
54+
),
55+
migrations.CreateModel(
56+
name='SyllabiTopic',
57+
fields=[
58+
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
59+
('order', models.IntegerField(default=0)),
60+
('title', models.CharField(max_length=255)),
61+
('description', models.TextField()),
62+
('resources', models.ManyToManyField(blank=True, to='Resource.Resource')),
63+
('syllabi', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='Curriculum.curriculumsyllabi')),
64+
],
65+
options={
66+
'ordering': ['order'],
67+
},
68+
),
69+
migrations.CreateModel(
70+
name='SyllabiProgress',
71+
fields=[
72+
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
73+
('completed', models.BooleanField(default=False)),
74+
('completed_at', models.DateTimeField(blank=True, null=True)),
75+
('enrollment', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='Curriculum.curriculumenrollment')),
76+
('syllabi', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='Curriculum.curriculumsyllabi')),
77+
('topic', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='Curriculum.syllabitopic')),
78+
],
79+
),
80+
migrations.CreateModel(
81+
name='CurriculumReview',
82+
fields=[
83+
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
84+
('rating', models.PositiveSmallIntegerField(default=0, validators=[django.core.validators.MinValueValidator(1), django.core.validators.MaxValueValidator(5)])),
85+
('review', models.TextField()),
86+
('created_at', models.DateTimeField(auto_now_add=True)),
87+
('updated_at', models.DateTimeField(auto_now=True)),
88+
('sentiment', models.CharField(blank=True, max_length=255, null=True)),
89+
('label', models.CharField(blank=True, choices=[('A', 'Course Content'), ('B', 'Exercises'), ('C', 'Course Structure'), ('D', 'Learning Experience'), ('E', 'Support')], max_length=1, null=True)),
90+
('enrollment', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='Curriculum.curriculumenrollment')),
91+
],
92+
),
93+
]
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
# Generated by Django 4.0 on 2023-04-27 20:28
2+
3+
from django.db import migrations, models
4+
5+
6+
class Migration(migrations.Migration):
7+
8+
dependencies = [
9+
('Curriculum', '0001_initial'),
10+
]
11+
12+
operations = [
13+
migrations.AddField(
14+
model_name='curriculum',
15+
name='rating',
16+
field=models.FloatField(default=0.0),
17+
),
18+
]

0 commit comments

Comments
 (0)