colles.mp2i-vms.fr/colloscope/viewsets.py

102 lines
2.7 KiB
Python

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