From e9c65648945c8ef986142068d8c5fd0232d27e0c Mon Sep 17 00:00:00 2001 From: Mark Hoekveen Date: Mon, 26 Feb 2024 19:45:36 +0100 Subject: [PATCH] Only undo last voted --- playlist/models/profile.py | 2 ++ playlist/views.py | 12 ++++++++---- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/playlist/models/profile.py b/playlist/models/profile.py index 6b690d9..3a23481 100644 --- a/playlist/models/profile.py +++ b/playlist/models/profile.py @@ -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): diff --git a/playlist/views.py b/playlist/views.py index 9d3ee49..98a4721 100644 --- a/playlist/views.py +++ b/playlist/views.py @@ -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/')