You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

97 lines
3.4 KiB

from rest_framework import generics, permissions
from rest_framework.authentication import TokenAuthentication
from drf_yasg.utils import swagger_auto_schema
from drf_yasg import openapi
from apps.certificate.models import Certificate
from apps.certificate.serializers import CertificateRequestSerializer, CertificateSerializer
from utils.pagination import StandardResultsSetPagination
class CertificateRequestView(generics.CreateAPIView):
queryset = Certificate.objects.all()
serializer_class = CertificateRequestSerializer
permission_classes = [permissions.IsAuthenticated]
authentication_classes = [TokenAuthentication]
@swagger_auto_schema(
operation_description="Request a certificate for completed course",
tags=["Imam-Javad - Certificate"],
responses={
201: openapi.Response(
description="Certificate request created successfully"
)
}
)
def post(self, request, *args, **kwargs):
return super().post(request, *args, **kwargs)
def perform_create(self, serializer):
serializer.save(student=self.request.user)
class UserCertificatesListView(generics.ListAPIView):
serializer_class = CertificateSerializer
permission_classes = [permissions.IsAuthenticated]
authentication_classes = [TokenAuthentication]
pagination_class = StandardResultsSetPagination
@swagger_auto_schema(
operation_description="Get list of user's certificates",
tags=["Imam-Javad - Certificate"],
responses={
200: openapi.Response(
description="List of user certificates",
schema=CertificateSerializer(many=True)
)
}
)
def get(self, request, *args, **kwargs):
return super().get(request, *args, **kwargs)
def get_queryset(self):
return Certificate.objects.filter(student=self.request.user).order_by('-created_at')
from rest_framework.viewsets import ModelViewSet
from rest_framework.permissions import IsAdminUser
from apps.certificate.serializers import AdminCertificateSerializer
from django.db.models import Q
class AdminCertificateViewSet(ModelViewSet):
queryset = Certificate.objects.all()
serializer_class = AdminCertificateSerializer
permission_classes = [permissions.IsAuthenticated, IsAdminUser]
authentication_classes = [TokenAuthentication]
pagination_class = StandardResultsSetPagination
def get_queryset(self):
queryset = Certificate.objects.all().select_related('student', 'course')
# Search query
search_query = self.request.query_params.get('search', None)
if search_query:
queryset = queryset.filter(
Q(student__fullname__icontains=search_query) |
Q(student__email__icontains=search_query) |
Q(course__title__icontains=search_query)
)
# Filters
status_param = self.request.query_params.get('status', None)
if status_param:
queryset = queryset.filter(status=status_param)
course_id = self.request.query_params.get('course', None)
if course_id:
queryset = queryset.filter(course_id=course_id)
student_id = self.request.query_params.get('student', None)
if student_id:
queryset = queryset.filter(student_id=student_id)
return queryset.order_by('-created_at')