feat: implement LMS core (CMS, Courses, Enrollment, Progress, Auth) (Admin + API)
Build & Push Docker Image (Backend) / build (push) Successful in 54s
Build & Push Docker Image (Backend) / build (push) Successful in 54s
This commit is contained in:
+73
-3
@@ -1,3 +1,73 @@
|
||||
from django.shortcuts import render
|
||||
|
||||
# Create your views here.
|
||||
from django.utils import timezone
|
||||
from rest_framework.permissions import IsAuthenticated
|
||||
from rest_framework.response import Response
|
||||
from rest_framework.views import APIView
|
||||
|
||||
from apps.common.api.base_viewset import BaseModelViewSet
|
||||
from apps.common.api.permissions import IsStaffOrReadOnly
|
||||
from apps.courses.models import Course, Enrollment, Lesson, LessonProgress
|
||||
from apps.courses.serializers import CourseSerializer, EnrollCourseResponseSerializer, MyCourseSerializer, \
|
||||
CompleteLessonResponseSerializer
|
||||
|
||||
|
||||
class CourseViewSet(BaseModelViewSet):
|
||||
queryset = Course.objects.all()
|
||||
serializer_class = CourseSerializer
|
||||
permission_classes = [IsStaffOrReadOnly]
|
||||
|
||||
search_fields = ('title', 'description')
|
||||
filterset_fields = ['published']
|
||||
ordering = ['-created_at']
|
||||
|
||||
class EnrollCourseView(APIView):
|
||||
permission_classes = [IsAuthenticated]
|
||||
|
||||
def post(self, request, course_id):
|
||||
course = Course.objects.get(id=course_id)
|
||||
enrollment, created = Enrollment.objects.get_or_create(user=request.user, course=course)
|
||||
serializer = EnrollCourseResponseSerializer({
|
||||
'course_id' : course.id,
|
||||
'enrolled_at' : enrollment.enrolled_at,
|
||||
})
|
||||
|
||||
return Response(serializer.data)
|
||||
|
||||
class MyCoursesView(APIView):
|
||||
permission_classes = [IsAuthenticated]
|
||||
|
||||
def get(self, request):
|
||||
enrollments = Enrollment.objects.filter(user=request.user)
|
||||
|
||||
data = [
|
||||
{
|
||||
'course_id': e.course.id,
|
||||
'title': e.course.title,
|
||||
'enrolled_at': e.enrolled_at,
|
||||
} for e in enrollments
|
||||
]
|
||||
|
||||
serializer = MyCourseSerializer(data, many=True)
|
||||
return Response(serializer.data)
|
||||
|
||||
class CompleteLessonView(APIView):
|
||||
permission_classes = [IsAuthenticated]
|
||||
|
||||
def post(self, request, lesson_id):
|
||||
lesson = Lesson.objects.get(id=lesson_id)
|
||||
|
||||
progress, _ = LessonProgress.objects.get_or_create(
|
||||
user=request.user,
|
||||
lesson=lesson
|
||||
)
|
||||
|
||||
progress.completed = True
|
||||
progress.complete_at = timezone.now()
|
||||
progress.save()
|
||||
|
||||
serializer = CompleteLessonResponseSerializer({
|
||||
'lesson_id' : lesson.id,
|
||||
'completed' : progress.completed,
|
||||
'completed_at' : progress.complete_at,
|
||||
})
|
||||
|
||||
return Response(serializer.data)
|
||||
Reference in New Issue
Block a user