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')