vote undo

todo: only accept undo endpoint when allowed
This commit is contained in:
2024-02-22 23:19:12 +01:00
parent 1fb29e637d
commit d73910ab02
6 changed files with 62 additions and 49 deletions
+20 -10
View File
@@ -14,17 +14,16 @@ spt = spotify.Spotify()
class AuthView(View):
def get(self, request):
if request.user.is_authenticated:
#return TemplateResponse(request, "Nominate.html", {})
return HttpResponseRedirect('/vote')
return HttpResponseRedirect('/vote/')
else:
return TemplateResponse(request, "Login.html", {})
class VoteView(LoginRequiredMixin, View):
def get(self, request, error=None):
def get(self, request, undo=None):
track = 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, "error": error})
return TemplateResponse(request, "Vote.html", {"track": track, "undo": undo})
def post(self, request):
try:
spotify_id = self.request.POST['spotify_id']
@@ -37,13 +36,10 @@ class VoteView(LoginRequiredMixin, View):
pass
else:
raise Exception(f"{request.user} already voted for {track}")
Vote.objects.create(track=track, user=request.user, points=score)
print(track)
vote = Vote.objects.create(track=track, user=request.user, points=score)
return self.get(request, undo=vote)
except Exception as e:
print(e)
return self.get(request, str(e))
else:
return self.get(request)
class NominateView(LoginRequiredMixin, View):
def get(self, request):
@@ -127,4 +123,18 @@ class SettingsView(LoginRequiredMixin, View):
except:
pass
finally:
return self.get(request)
return self.get(request)
class UndoView(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)
vote = None
try:
vote = Vote.objects.get(user=request.user, track=track)
except Vote.DoesNotExist:
raise Exception(f"{request.user} did not vote for {track}")
vote.delete()
return HttpResponseRedirect('/vote/')