adds vote posting

also moves some validation code to the model
This commit is contained in:
2025-05-22 15:17:35 +02:00
parent 501044eef2
commit 3de8234fb9
7 changed files with 49 additions and 10 deletions
+17 -1
View File
@@ -1,5 +1,5 @@
from rest_framework import serializers
from playlist.models import Vote
from playlist.models import Vote, Track
class VoteSerializer(serializers.HyperlinkedModelSerializer):
class Meta:
@@ -10,3 +10,19 @@ class VoteSerializer(serializers.HyperlinkedModelSerializer):
'track': {'view_name': 'api-track', 'lookup_field': 'id'},
'user': {'view_name': 'api-user', 'lookup_field': 'id'}
}
class VoteSaveSerializer(serializers.ModelSerializer):
class Meta:
model = Vote
fields = ['track', 'points', 'skipped']
def create(self, validated_data):
"""
Create a new vote. Deletes a previous skipped vote if it exists.
"""
user = self.context['request'].user
track = validated_data['track']
previous_vote = Vote.objects.filter(user=user, track=track).first()
if previous_vote and previous_vote.skipped:
previous_vote.delete()
return Vote.objects.create(**validated_data)