skip queue

This commit is contained in:
2024-07-20 09:52:50 +02:00
parent 5858cee900
commit 58e8bbbbef
7 changed files with 59 additions and 10 deletions
+27 -4
View File
@@ -26,10 +26,10 @@ class AuthView(View):
class VoteView(LoginRequiredMixin, View):
def get(self, request, undo=None):
track = get_unvoted(request.user)
(track, skipped) = get_unvoted(request.user)
if track and not track.album.image:
get_and_dither_image(track.album.image_url, track.album, "image")
return TemplateResponse(request, "Vote.html", {"track": track, "undo": undo})
return TemplateResponse(request, "Vote.html", {"track": track, "undo": undo, "skipped": skipped})
def post(self, request):
(profile,_) = Profile.objects.get_or_create(user=request.user)
try:
@@ -40,11 +40,14 @@ class VoteView(LoginRequiredMixin, View):
score = min(max(1, score), 5)
track = Track.objects.get(pk=spotify_id)
try:
Vote.objects.get(user=request.user, track=track)
prevote = Vote.objects.get(user=request.user, track=track)
except Vote.DoesNotExist:
pass
else:
raise Exception(f"{request.user} already voted for {track}")
if not prevote.skipped:
raise Exception(f"{request.user} already voted for {track}")
else:
prevote.delete()
vote = Vote.objects.create(track=track, user=request.user, points=score)
(profile,_) = Profile.objects.get_or_create(user=request.user)
profile.last_voted = track
@@ -186,6 +189,26 @@ class UndoView(LoginRequiredMixin, View):
vote.delete()
return HttpResponseRedirect('/vote/')
class SkipView(LoginRequiredMixin, View):
def get(self, request):
return HttpResponseRedirect('/vote/')
def post(self, request):
spotify_id = self.request.POST['spotify_id']
track = Track.objects.get(pk=spotify_id)
(profile,_) = Profile.objects.get_or_create(user=request.user)
if not profile.can_vote:
raise Exception(f"{request.user} tried to vote after closing for {track}")
vote = None
try:
vote = Vote.objects.get(user=request.user, track=track)
except Vote.DoesNotExist:
pass
profile.last_voted = None
profile.save()
vote = Vote.objects.create(track=track, user=request.user, points=0, skipped=True)
profile.save()
return self.get(request)
class OverView(LoginRequiredMixin, View):
def get(self, request):
votes = Vote.objects.select_related().distinct()