mirror of
https://code.eliotberriot.com/funkwhale/funkwhale.git
synced 2025-10-05 06:59:24 +02:00
Permissions and db state fixes with new index field
This commit is contained in:
parent
257e67b5a6
commit
e87e2654e8
6 changed files with 148 additions and 20 deletions
|
@ -1,4 +1,5 @@
|
|||
from django.conf import settings
|
||||
from django.db import transaction
|
||||
from rest_framework import serializers
|
||||
from taggit.models import Tag
|
||||
|
||||
|
@ -12,16 +13,23 @@ class PlaylistTrackSerializer(serializers.ModelSerializer):
|
|||
|
||||
class Meta:
|
||||
model = models.PlaylistTrack
|
||||
fields = ('id', 'track', 'playlist', 'position')
|
||||
fields = ('id', 'track', 'playlist', 'index', 'creation_date')
|
||||
|
||||
|
||||
class PlaylistTrackCreateSerializer(serializers.ModelSerializer):
|
||||
class PlaylistTrackWriteSerializer(serializers.ModelSerializer):
|
||||
index = serializers.IntegerField(
|
||||
required=False, min_value=0, allow_null=True)
|
||||
|
||||
class Meta:
|
||||
model = models.PlaylistTrack
|
||||
fields = ('id', 'track', 'playlist', 'index')
|
||||
|
||||
def validate_playlist(self, value):
|
||||
if self.context.get('request'):
|
||||
# validate proper ownership on the playlist
|
||||
if self.context['request'].user != value.user:
|
||||
raise serializers.ValidationError(
|
||||
'You do not have the permission to edit this playlist')
|
||||
existing = value.playlist_tracks.count()
|
||||
if existing >= settings.PLAYLISTS_MAX_TRACKS:
|
||||
raise serializers.ValidationError(
|
||||
|
@ -29,6 +37,29 @@ class PlaylistTrackCreateSerializer(serializers.ModelSerializer):
|
|||
settings.PLAYLISTS_MAX_TRACKS))
|
||||
return value
|
||||
|
||||
@transaction.atomic
|
||||
def create(self, validated_data):
|
||||
index = validated_data.pop('index', None)
|
||||
instance = super().create(validated_data)
|
||||
instance.playlist.insert(instance, index)
|
||||
return instance
|
||||
|
||||
@transaction.atomic
|
||||
def update(self, instance, validated_data):
|
||||
update_index = 'index' in validated_data
|
||||
index = validated_data.pop('index', None)
|
||||
super().update(instance, validated_data)
|
||||
if update_index:
|
||||
instance.playlist.insert(instance, index)
|
||||
return instance
|
||||
|
||||
def get_unique_together_validators(self):
|
||||
"""
|
||||
We explicitely disable unique together validation here
|
||||
because it collides with our internal logic
|
||||
"""
|
||||
return []
|
||||
|
||||
|
||||
class PlaylistSerializer(serializers.ModelSerializer):
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue