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/')