Only undo last voted

This commit is contained in:
2024-02-26 19:45:36 +01:00
parent a89b858c81
commit e9c6564894
2 changed files with 10 additions and 4 deletions
+2
View File
@@ -1,5 +1,6 @@
from django.db import models
from django.contrib.auth.models import User
from .track import Track
from django.db.models.signals import post_save
from django.dispatch import receiver
@@ -14,6 +15,7 @@ class Background(models.Model):
class Profile(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
background = models.ForeignKey(Background, null=True, on_delete=models.SET_NULL)
last_voted = models.ForeignKey(Track, null=True, on_delete=models.SET_NULL)
@receiver(post_save, sender=User)
def create_user_profile(sender, instance, created, **kwargs):
+8 -4
View File
@@ -37,6 +37,9 @@ class VoteView(LoginRequiredMixin, View):
else:
raise Exception(f"{request.user} already voted for {track}")
vote = Vote.objects.create(track=track, user=request.user, points=score)
(profile,_) = Profile.objects.get_or_create(user=request.user)
profile.last_voted = track
profile.save()
return self.get(request, undo=vote)
except Exception as e:
print(e)
@@ -117,7 +120,6 @@ class NominateView(LoginRequiredMixin, View):
class SettingsView(LoginRequiredMixin, View):
def get(self, request):
backgrounds = Background.objects.all()
print(backgrounds)
(profile,created) = Profile.objects.get_or_create(user=request.user)
context = {
"backgrounds": backgrounds,
@@ -125,12 +127,9 @@ class SettingsView(LoginRequiredMixin, View):
}
return TemplateResponse(request, "Settings.html", context)
def post(self, request):
print(request.POST)
try:
bg = Background.objects.get(pk=request.POST['background'])
print(f"{request.user} wants their background set to {bg}")
(profile,_) = Profile.objects.get_or_create(user=request.user)
print(profile)
profile.background = bg
profile.save()
except:
@@ -144,11 +143,16 @@ class UndoView(LoginRequiredMixin, View):
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 profile.last_voted != track:
raise Exception(f"{request.user} is not allowed to undo vote for {track}")
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}")
profile.last_voted = None
profile.save()
vote.delete()
return HttpResponseRedirect('/vote/')