from api.models import Course, File, Professor, Semester, Topic from api.serializers import ( CourseSerializer, FileSerializer, ProfessorSerializer, SemesterSerializer, TopicSerializer, ) from django.contrib.auth import authenticate from rest_framework import generics, status from rest_framework.authentication import TokenAuthentication from rest_framework.authtoken.models import Token from rest_framework.permissions import IsAuthenticated from rest_framework.response import Response from rest_framework.views import APIView from rest_framework import filters class TopicListCreateAPIView(generics.ListCreateAPIView): queryset = Topic.objects.all() serializer_class = TopicSerializer authentication_classes = [TokenAuthentication] permission_classes = [IsAuthenticated] filter_backends = [filters.SearchFilter] search_fields = ["name"] class TopicDetailAPIView(generics.RetrieveUpdateDestroyAPIView): queryset = Topic.objects.all() serializer_class = TopicSerializer authentication_classes = [TokenAuthentication] permission_classes = [IsAuthenticated] class ProfessorListCreateAPIView(generics.ListCreateAPIView): queryset = Professor.objects.all() serializer_class = ProfessorSerializer authentication_classes = [TokenAuthentication] permission_classes = [IsAuthenticated] filter_backends = [filters.SearchFilter] search_fields = ["name"] class ProfessorDetailAPIView(generics.RetrieveUpdateDestroyAPIView): queryset = Professor.objects.all() serializer_class = ProfessorSerializer authentication_classes = [TokenAuthentication] permission_classes = [IsAuthenticated] class SemesterListCreateAPIView(generics.ListCreateAPIView): queryset = Semester.objects.all() serializer_class = SemesterSerializer authentication_classes = [TokenAuthentication] permission_classes = [IsAuthenticated] filter_backends = [filters.SearchFilter] search_fields = ["name"] class SemesterDetailAPIView(generics.RetrieveUpdateDestroyAPIView): queryset = Semester.objects.all() serializer_class = SemesterSerializer authentication_classes = [TokenAuthentication] permission_classes = [IsAuthenticated] def delete(self, request, *args, **kwargs): instance = self.get_object() self.perform_destroy(instance) return Response(status=status.HTTP_204_NO_CONTENT) class CourseListCreateAPIView(generics.ListCreateAPIView): queryset = Course.objects.all() serializer_class = CourseSerializer authentication_classes = [TokenAuthentication] permission_classes = [IsAuthenticated] filter_backends = [filters.SearchFilter] search_fields = ["name"] class CourseDetailAPIView(generics.RetrieveUpdateDestroyAPIView): queryset = Course.objects.all() serializer_class = CourseSerializer authentication_classes = [TokenAuthentication] permission_classes = [IsAuthenticated] class FileListCreateAPIView(generics.ListCreateAPIView): queryset = File.objects.all() serializer_class = FileSerializer authentication_classes = [TokenAuthentication] permission_classes = [IsAuthenticated] filter_backends = [filters.SearchFilter] search_fields = ["name"] class FileDetailAPIView(generics.RetrieveUpdateDestroyAPIView): queryset = File.objects.all() serializer_class = FileSerializer authentication_classes = [TokenAuthentication] permission_classes = [IsAuthenticated]