from rest_framework.viewsets import ModelViewSet, ReadOnlyModelViewSet from rest_framework.permissions import IsAuthenticated from colloscope.models import * from colloscope.serializers import * class SchoolViewset(ReadOnlyModelViewSet): serializer_class = SchoolSerializer permission_classes = [IsAuthenticated] def get_queryset(self): return School.objects.all() class ClassViewset(ReadOnlyModelViewSet): serializer_class = ClassSerializer permission_classes = [IsAuthenticated] def get_queryset(self): return Class.objects.all() class TermViewset(ReadOnlyModelViewSet): serializer_class = TermSerializer permission_classes = [IsAuthenticated] def get_queryset(self): return Term.objects.all() class SubjectViewset(ReadOnlyModelViewSet): serializer_class = SubjectSerializer permission_classes = [IsAuthenticated] def get_queryset(self): return Subject.objects.all() class GroupTypeViewset(ReadOnlyModelViewSet): serializer_class = GroupTypeSerializer permission_classes = [IsAuthenticated] def get_queryset(self): return GroupType.objects.all() class GroupViewset(ReadOnlyModelViewSet): serializer_class = GroupSerializer permission_classes = [IsAuthenticated] def get_queryset(self): return Group.objects.all() class StudentViewset(ReadOnlyModelViewSet): serializer_class = StudentSerializer permission_classes = [IsAuthenticated] def get_queryset(self): return Student.objects.all() class ColleurViewset(ReadOnlyModelViewSet): serializer_class = ColleurSerializer permission_classes = [IsAuthenticated] def get_queryset(self): return Colleur.objects.all() class SlotViewset(ReadOnlyModelViewSet): serializer_class = SlotSerializer permission_classes = [IsAuthenticated] def get_queryset(self): return Slot.objects.all() class ColleViewset(ModelViewSet): serializer_class = ColleSerializer permission_classes = [IsAuthenticated] def get_queryset(self): return (Colle.objects .select_related("slot", "slot__term") .prefetch_related("swap_set") .annotate(base_vol=Count("groups__members")) .annotate(swap_plus=Count("swap", filter=Q(swap__enroll=1), distinct=True)) .annotate(swap_minus=Count("swap", filter=Q(swap__enroll=0), distinct=True)) .annotate(volume=F("base_vol") + F("swap_plus") - F("swap_minus")) .order_by("datetime", "slot__time")) class CalendarLinkViewset(ReadOnlyModelViewSet): serializer_class = CalendarLinkSerializer permission_classes = [IsAuthenticated] def get_queryset(self): return CalendarLink.objects.all()