Browse Source

Repository endpoints added for admin panel

some CRUD and filtering endpoints added for glossary , lesson , category and attachment objects to be managed in the admin panel.
master
Mohsen Taba 2 months ago
parent
commit
80caad3033
  1. 18
      apps/course/serializers/admin.py
  2. 12
      apps/course/urls.py
  3. 82
      apps/course/views/admin.py

18
apps/course/serializers/admin.py

@ -13,6 +13,22 @@ from apps.course.models import (
)
from apps.account.models import ProfessorUser
class AdminLessonSerializer(serializers.ModelSerializer):
class Meta:
model = Lesson
fields = '__all__'
class AdminGlossarySerializer(serializers.ModelSerializer):
class Meta:
model = Glossary
fields = '__all__'
class AdminAttachmentSerializer(serializers.ModelSerializer):
class Meta:
model = Attachment
fields = '__all__'
def serialize_file(value, serializer):
if not value:
return None
@ -21,6 +37,8 @@ def serialize_file(value, serializer):
return field.to_representation(value)
class AdminCourseCategorySerializer(serializers.ModelSerializer):
slug = serializers.SlugField(required=False, allow_blank=True)
class Meta:
model = CourseCategory
fields = ['id', 'name', 'slug']

12
apps/course/urls.py

@ -6,9 +6,15 @@ from . import views
router = DefaultRouter()
router.register(r'admin/courses', views.AdminCourseViewSet, basename='admin-courses')
router.register(r'admin/chapters', views.AdminChapterViewSet, basename='admin-chapters')
router.register(r'admin/lessons', views.AdminCourseLessonViewSet, basename='admin-lessons')
router.register(r'admin/attachments', views.AdminCourseAttachmentViewSet, basename='admin-attachments')
router.register(r'admin/glossaries', views.AdminCourseGlossaryViewSet, basename='admin-glossaries')
router.register(r'admin/course-lessons', views.AdminCourseLessonViewSet, basename='admin-course-lessons')
router.register(r'admin/course-attachments', views.AdminCourseAttachmentViewSet, basename='admin-course-attachments')
router.register(r'admin/course-glossaries', views.AdminCourseGlossaryViewSet, basename='admin-course-glossaries')
# Base model admin routes for the Repository Page
router.register(r'admin/categories', views.AdminCourseCategoryViewSet, basename='admin-categories')
router.register(r'admin/lessons', views.AdminLessonViewSet, basename='admin-lessons-base')
router.register(r'admin/attachments', views.AdminAttachmentViewSet, basename='admin-attachments-base')
router.register(r'admin/glossaries', views.AdminGlossaryViewSet, basename='admin-glossaries-base')
urlpatterns = [
path('', include(router.urls)),

82
apps/course/views/admin.py

@ -4,18 +4,26 @@ from rest_framework.permissions import IsAuthenticated, IsAdminUser
from rest_framework.authentication import TokenAuthentication
from apps.course.models import (
Course,
CourseCategory,
CourseChapter,
CourseLesson,
Lesson,
CourseAttachment,
CourseGlossary
Attachment,
CourseGlossary,
Glossary
)
from apps.course.serializers.admin import (
AdminCourseCategorySerializer,
AdminCourseListSerializer,
AdminCourseDetailSerializer,
AdminCourseChapterSerializer,
AdminCourseLessonSerializer,
AdminCourseAttachmentSerializer,
AdminCourseGlossarySerializer
AdminCourseGlossarySerializer,
AdminLessonSerializer,
AdminGlossarySerializer,
AdminAttachmentSerializer
)
class AdminCourseViewSet(viewsets.ModelViewSet):
@ -158,3 +166,73 @@ class AdminCourseGlossaryViewSet(viewsets.ModelViewSet):
instance.delete()
if glossary:
glossary.delete()
class AdminCourseCategoryViewSet(viewsets.ModelViewSet):
"""
Admin CRUD ViewSet for Course Categories.
"""
permission_classes = [IsAuthenticated, IsAdminUser]
authentication_classes = [TokenAuthentication]
serializer_class = AdminCourseCategorySerializer
def get_queryset(self):
queryset = CourseCategory.objects.all().order_by('-id')
search = self.request.query_params.get('search', None)
if search:
queryset = queryset.filter(Q(name__icontains=search) | Q(slug__icontains=search))
return queryset
class AdminLessonViewSet(viewsets.ModelViewSet):
"""
Admin CRUD ViewSet for base Lesson.
"""
permission_classes = [IsAuthenticated, IsAdminUser]
authentication_classes = [TokenAuthentication]
serializer_class = AdminLessonSerializer
def get_queryset(self):
queryset = Lesson.objects.all().order_by('-id')
search = self.request.query_params.get('search', None)
if search:
queryset = queryset.filter(title__icontains=search)
content_type = self.request.query_params.get('content_type', None)
if content_type:
queryset = queryset.filter(content_type=content_type)
return queryset
class AdminGlossaryViewSet(viewsets.ModelViewSet):
"""
Admin CRUD ViewSet for base Glossary.
"""
permission_classes = [IsAuthenticated, IsAdminUser]
authentication_classes = [TokenAuthentication]
serializer_class = AdminGlossarySerializer
def get_queryset(self):
queryset = Glossary.objects.all().order_by('-id')
search = self.request.query_params.get('search', None)
if search:
queryset = queryset.filter(Q(title__icontains=search) | Q(description__icontains=search))
return queryset
class AdminAttachmentViewSet(viewsets.ModelViewSet):
"""
Admin CRUD ViewSet for base Attachment.
"""
permission_classes = [IsAuthenticated, IsAdminUser]
authentication_classes = [TokenAuthentication]
serializer_class = AdminAttachmentSerializer
def get_queryset(self):
queryset = Attachment.objects.all().order_by('-id')
search = self.request.query_params.get('search', None)
if search:
queryset = queryset.filter(title__icontains=search)
return queryset
Loading…
Cancel
Save