Skip to content

Commit caa6f76

Browse files
base student report view
1 parent 7ecdd9b commit caa6f76

File tree

4 files changed

+52
-3
lines changed

4 files changed

+52
-3
lines changed
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
class ReadingReportMaker:
2+
def __init__(self, classroom, student):
3+
self.classroom = classroom
4+
self.student = student
5+
6+
def make(self):
7+
return {'success': True}

classroom/serializers/__init__.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
from .classroom import (AddReadingExerciseSerializer, AddStudentSerializer,
22
ClassroomSerializer, RemoveReadingExerciseSerializer,
3-
RemoveStudentSerializer)
3+
RemoveStudentSerializer,
4+
StudentReadingReportSerializer)
45
from .exercise import (ReadingExerciseSerializer,
56
ReadingExerciseSubmitSerializer)
67
from .question import ReadingQuestionSerializer

classroom/serializers/classroom.py

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,32 @@
1+
from copy import copy
2+
13
from django.utils.translation import gettext as _
24
from rest_framework import serializers
5+
from rest_framework.reverse import reverse
36

47
from account.serializers import UserSerializer
58
from classroom.models import Classroom
69
from classroom.utils.serializer import ValidateUniqueTogetherMixin
710

811

12+
class _StudentSerializer(UserSerializer):
13+
reading_report_url = serializers.SerializerMethodField()
14+
15+
class Meta(UserSerializer.Meta):
16+
fields = copy(UserSerializer.Meta.fields)
17+
fields.append('reading_report_url')
18+
19+
def get_reading_report_url(self, student):
20+
request = self.context['request']
21+
classroom_pk = self.context['view'].kwargs['pk']
22+
url = reverse('classroom-student-reading-report', kwargs={'pk': classroom_pk}, request=request)
23+
url += f'?student={student.pk}'
24+
return url
25+
26+
927
class ClassroomSerializer(ValidateUniqueTogetherMixin, serializers.HyperlinkedModelSerializer):
1028
teacher = UserSerializer(read_only=True)
11-
students = UserSerializer(many=True, read_only=True)
29+
students = _StudentSerializer(many=True, read_only=True)
1230

1331
class Meta:
1432
model = Classroom
@@ -50,3 +68,7 @@ class AddReadingExerciseSerializer(serializers.Serializer):
5068

5169
class RemoveReadingExerciseSerializer(serializers.Serializer):
5270
pk = serializers.IntegerField()
71+
72+
73+
class StudentReadingReportSerializer(serializers.Serializer):
74+
student = serializers.IntegerField(write_only=True)

classroom/views/classroom.py

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,22 @@
1+
from django.contrib.auth import get_user_model
12
from django.utils.translation import gettext as _
23
from rest_framework.decorators import action
4+
from rest_framework.generics import get_object_or_404
35
from rest_framework.response import Response
46
from rest_framework.viewsets import ModelViewSet
57

68
from classroom.business.teacher import classroom as teacher_business
9+
from classroom.business.all.student_report import ReadingReportMaker
710
from classroom.filters import ClassroomFilter
811
from classroom.models import Classroom
912
from classroom.permissions import IsTeacherOrReadOnly
1013
from classroom.serializers import (AddReadingExerciseSerializer,
1114
AddStudentSerializer, ClassroomSerializer,
1215
RemoveReadingExerciseSerializer,
13-
RemoveStudentSerializer)
16+
RemoveStudentSerializer,
17+
StudentReadingReportSerializer)
18+
19+
User = get_user_model()
1420

1521

1622
class ClassroomViewSet(ModelViewSet):
@@ -85,3 +91,16 @@ def remove_reading_exercises(self, request, pk):
8591
classroom = self.get_object()
8692
teacher_business.remove_reading_exercises_to_classroom(classroom, exercise_pks)
8793
return Response()
94+
95+
@action(
96+
methods=['GET'], detail=True, url_path='student-reading-report',
97+
serializer_class=StudentReadingReportSerializer,
98+
)
99+
def student_reading_report(self, request, pk):
100+
serializer = self.get_serializer(data=request.query_params)
101+
serializer.is_valid(raise_exception=True)
102+
classroom = self.get_object()
103+
student = get_object_or_404(User.students.all(), pk=serializer.validated_data['student'])
104+
report_maker = ReadingReportMaker(classroom, student)
105+
report = report_maker.make()
106+
return Response(report)

0 commit comments

Comments
 (0)