исправил схемы мелкие правки

This commit is contained in:
Mike0001-droid 2024-07-02 18:14:32 +05:00
parent f8cc500a23
commit c12cea204b
7 changed files with 52 additions and 32 deletions

View File

@ -56,7 +56,8 @@ class DeleteSongSchema(AutoSchema):
class PlayListSchema(AutoSchema): class PlayListSchema(AutoSchema):
def get_serializer_fields(self, path, method): def get_serializer_fields(self, path, method):
return [ if path.endswith('/create_playlist/'):
return [
coreapi.Field( coreapi.Field(
name='name', name='name',
location='form', location='form',
@ -69,6 +70,18 @@ class PlayListSchema(AutoSchema):
required=False, required=False,
schema=coreschema.Integer(description='Обложка плейлиста') schema=coreschema.Integer(description='Обложка плейлиста')
), ),
]
if path.endswith('/update_playlist/') or path.endswith('/delete_song_with_playlist/'):
return [
coreapi.Field(
name='azura_id',
location='form',
required=False,
schema=coreschema.String(description='ID трека с Азуры')
),
]
if path.endswith('/add_to_playlist/'):
return [
coreapi.Field( coreapi.Field(
name='azura_id', name='azura_id',
location='form', location='form',
@ -105,4 +118,7 @@ class PlayListSchema(AutoSchema):
required=False, required=False,
schema=coreschema.String(description='Изображение трека') schema=coreschema.String(description='Изображение трека')
), ),
] ]
return []

View File

@ -8,6 +8,7 @@ class SongSerializer(serializers.ModelSerializer):
class PlayListSerializer(serializers.ModelSerializer): class PlayListSerializer(serializers.ModelSerializer):
def validate(self, attrs): def validate(self, attrs):
if PlayList.objects.filter( if PlayList.objects.filter(
name=attrs.get('name'), name=attrs.get('name'),
user=attrs.get('user') user=attrs.get('user')
@ -17,6 +18,7 @@ class PlayListSerializer(serializers.ModelSerializer):
'playlist': ['Данный плейлист уже существует'] 'playlist': ['Данный плейлист уже существует']
}) })
return super().validate(attrs) return super().validate(attrs)
class Meta: class Meta:
model = PlayList model = PlayList
fields = ('id', 'name', 'song', 'user', 'playlist_art') fields = ('id', 'name', 'song', 'user', 'playlist_art')

View File

@ -16,8 +16,8 @@ class AzuraCast:
data.append(i) data.append(i)
return data return data
def add_to_playlist(self, azura_id, data): def add_to_playlist(self, data):
response = self.azura_requests.get_song(azura_id) response = self.azura_requests.get_song(data['azura_id'])
file_play = response.json()['unique_id'] file_play = response.json()['unique_id']
data.update(unique_id=file_play) data.update(unique_id=file_play)
return data return data

View File

@ -26,9 +26,8 @@ class PodkastViewSet(GenericViewSet):
serializer = self.get_serializer(queryset) serializer = self.get_serializer(queryset)
return Response(serializer.data, status=status.HTTP_200_OK) return Response(serializer.data, status=status.HTTP_200_OK)
except ObjectDoesNotExist: except ObjectDoesNotExist:
return Response( return Response({'detail': 'Объекта не существует', 'error': {'PlayList': 'Объекта не существует'}},
{'detail': 'Объекта не существует', 'error': {'PlayList': 'Объекта не существует'}}, status=status.HTTP_404_NOT_FOUND)
status=status.HTTP_404_NOT_FOUND)
class PlayListViewSet(GenericViewSet): class PlayListViewSet(GenericViewSet):
@ -48,9 +47,8 @@ class PlayListViewSet(GenericViewSet):
serializer = self.get_serializer(queryset) serializer = self.get_serializer(queryset)
return Response(serializer.data, status=status.HTTP_200_OK) return Response(serializer.data, status=status.HTTP_200_OK)
except ObjectDoesNotExist: except ObjectDoesNotExist:
return Response( return Response({'detail': 'Объекта не существует', 'error': {'PlayList': 'Объекта не существует'}},
{'detail': 'Объекта не существует', 'error': {'PlayList': 'Объекта не существует'}}, status=status.HTTP_404_NOT_FOUND)
status=status.HTTP_404_NOT_FOUND)
@action(detail=False, methods=['post'], schema=PlayListSchema()) @action(detail=False, methods=['post'], schema=PlayListSchema())
def create_playlist(self, request): def create_playlist(self, request):
@ -77,11 +75,12 @@ class PlayListViewSet(GenericViewSet):
def update_playlist(self, request, *args, **kwargs): def update_playlist(self, request, *args, **kwargs):
instance = self.get_object() instance = self.get_object()
serializer = self.get_serializer(data=request.data, partial=True, instance=instance) serializer = self.get_serializer(data=request.data, partial=True, instance=instance)
serializer.is_valid(raise_exception=True) if serializer.is_valid(raise_exception=True):
serializer.save() serializer.save()
return Response(serializer.data) return Response(serializer.data)
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
@action(detail=True, methods=['post']) @action(detail=True, methods=['delete'])
def delete_playlist(self, request, *args, **kwargs): def delete_playlist(self, request, *args, **kwargs):
item = self.get_object() item = self.get_object()
item.delete() item.delete()
@ -95,25 +94,30 @@ class PlayListViewSet(GenericViewSet):
item.song.remove(song) item.song.remove(song)
return Response({'detail': 'Объект удалён'}, status=status.HTTP_200_OK) return Response({'detail': 'Объект удалён'}, status=status.HTTP_200_OK)
except ObjectDoesNotExist: except ObjectDoesNotExist:
return Response( return Response({'detail': 'Объекта не существует', 'error': {'PlayList': 'Объекта не существует'}},
{'detail': 'Объекта не существует', 'error': {'PlayList': 'Объекта не существует'}}, status=status.HTTP_404_NOT_FOUND)
status=status.HTTP_404_NOT_FOUND)
@action(detail=True, methods=['post'], schema=PlayListSchema()) @action(detail=True, methods=['post'], schema=PlayListSchema())
def add_to_playlist(self, request, *args, **kwargs): def add_to_playlist(self, request, *args, **kwargs):
instance = self.get_object()
song = None song = None
try: try:
song = Song.objects.get(azura_id=request.data.get('azura_id')).pk song = Song.objects.get(azura_id=request.data.get('azura_id')).pk
except ObjectDoesNotExist: except ObjectDoesNotExist:
data = self.azura.add_to_playlist(request.data['azura_id'], request.data) data = self.azura.add_to_playlist(request.data)
song_serializer = SongSerializer(data=data) song_serializer = SongSerializer(data=data)
if song_serializer.is_valid(): if song_serializer.is_valid():
song_serializer.save() song_serializer.save()
song = song_serializer.data['id'] song = song_serializer.data['id']
instance = self.get_object() else:
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
instance.song.add(song) instance.song.add(song)
serializer = self.get_serializer(instance) serializer = self.get_serializer(instance)
return Response(serializer.data) return Response(serializer.data)
class FavoriteSongViewSet(GenericViewSet): class FavoriteSongViewSet(GenericViewSet):
azura = AzuraCast() azura = AzuraCast()
@ -152,13 +156,15 @@ class FavoriteSongViewSet(GenericViewSet):
serializer = SongSerializer(data=data) serializer = SongSerializer(data=data)
if serializer.is_valid(): if serializer.is_valid():
serializer.save() serializer.save()
data = { data = {
"song": serializer.data['id'], "song": serializer.data['id'],
"user": request.user.pk "user": request.user.pk
} }
else:
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
serializer = self.get_serializer(data=data) serializer = self.get_serializer(data=data)
if serializer.validate(data): if serializer.is_valid(data):
serializer.save() serializer.save()
return Response(serializer.data, status=status.HTTP_201_CREATED) return Response(serializer.data, status=status.HTTP_201_CREATED)
else: else:
@ -172,9 +178,8 @@ class FavoriteSongViewSet(GenericViewSet):
queryset.delete() queryset.delete()
return Response(status=status.HTTP_202_ACCEPTED) return Response(status=status.HTTP_202_ACCEPTED)
except ObjectDoesNotExist: except ObjectDoesNotExist:
return Response( return Response({'detail': 'Объекта не существует', 'error': {'Song': 'Объекта не существует'}},
{'detail': 'Объекта не существует', 'error': {'Song': 'Объекта не существует'}}, status=status.HTTP_404_NOT_FOUND)
status=status.HTTP_404_NOT_FOUND)
class SongViewSet(GenericViewSet): class SongViewSet(GenericViewSet):

View File

@ -142,6 +142,7 @@ REST_FRAMEWORK = {
'DEFAULT_SCHEMA_CLASS': 'rest_framework.schemas.coreapi.AutoSchema' 'DEFAULT_SCHEMA_CLASS': 'rest_framework.schemas.coreapi.AutoSchema'
} }
CORS_ALLOW_CREDENTIALS = True
CORS_ALLOWED_ORIGINS = [ CORS_ALLOWED_ORIGINS = [
'http://localhost:5173', # Adjust the port if your Vue app is served on a different one 'http://localhost:5173', # Adjust the port if your Vue app is served on a different one
'http://127.0.0.1:5173', 'http://127.0.0.1:5173',
@ -154,10 +155,6 @@ SIMPLE_JWT = {
'REFRESH_TOKEN_LIFETIME': timedelta(days=30), 'REFRESH_TOKEN_LIFETIME': timedelta(days=30),
} }
CORS_ALLOW_CREDENTIALS = True
CORS_ALLOWED_ORIGINS = [
'http://localhost:5173',
]
MIN_LEN_PASSWORD = 8 MIN_LEN_PASSWORD = 8
###AZURACAST CONFIG### ###AZURACAST CONFIG###