43 lines
1.5 KiB
Python
43 lines
1.5 KiB
Python
from django.shortcuts import render
|
|
from django.db.models import Avg
|
|
from rest_framework.views import APIView
|
|
from rest_framework.response import Response
|
|
from playlist.models import Session, Profile, Track, Vote
|
|
from playlist.serializers import TrackSerializer, SessionSerializer
|
|
from drf_spectacular.utils import extend_schema
|
|
|
|
def index(request):
|
|
return render(request, 'voting/index.html')
|
|
|
|
def session(request, session_id):
|
|
return render(request, 'voting/session.html', {'room_name': session_id})
|
|
|
|
@extend_schema(
|
|
responses={200: SessionSerializer(many=True)},
|
|
description="Retrieve a list of all available sessions."
|
|
)
|
|
class SessionListView(APIView):
|
|
def get(self, request):
|
|
if request.user.is_superuser:
|
|
sessions = Session.objects.all()
|
|
else:
|
|
sessions = Session.objects.filter(voting_open=True)
|
|
return Response(SessionSerializer(sessions, many=True).data)
|
|
|
|
@extend_schema(
|
|
responses={200: SessionSerializer()},
|
|
description="Gets session details."
|
|
)
|
|
class SessionDetailView(APIView):
|
|
def get(self, request, session_id):
|
|
session = Session.objects.get(session_id=session_id)
|
|
return Response(SessionSerializer(session).data)
|
|
|
|
|
|
class SessionInfoView(APIView):
|
|
def get(self, request, session_id):
|
|
track_count = len(Track.objects.all())
|
|
vote_count = len(Vote.objects.all())
|
|
average_vote = Vote.objects.all().aggregate(Avg("points", default=0))['points__avg']
|
|
return Response({'track_count': track_count, 'vote_count': vote_count, 'average_vote': average_vote})
|