рефакторинг вьюшек

This commit is contained in:
Mike0001-droid 2024-06-27 17:10:16 +05:00
parent f5725e085b
commit 21c5b29d30
3 changed files with 41 additions and 33 deletions

View File

@ -0,0 +1,25 @@
from conf.settings import AZURACAST_URL, AZURACAST_API_KEY
import requests
def authorize_url(url):
file_url = url
API_KEY = AZURACAST_API_KEY
headers = {
"Authorization": f"Bearer {API_KEY}"
}
return requests.get(file_url, headers=headers)
class AzuraCast:
api_key = AZURACAST_API_KEY
url = AZURACAST_URL
@staticmethod
def add_to_playlist(azura_id, data):
file_url = f"{AZURACAST_URL}api/station/it-radio/file/{azura_id}"
response = authorize_url(file_url)
file_play = f"{AZURACAST_URL}api/station/it-radio/file/{response.json()['unique_id']}/play"
data.update(unique_id=file_play)
return data

View File

@ -6,12 +6,12 @@ from rest_framework import status
from django.core.exceptions import ObjectDoesNotExist, MultipleObjectsReturned
from django.shortcuts import get_object_or_404, get_list_or_404
from rest_framework.permissions import IsAuthenticated, AllowAny
import requests
from audio.service import AzuraCast
from django.http import HttpResponse
from .schemas import SongSchema, DeleteSongSchema, PlayListSchema
from .models import Song, FavoriteSong, PlayList, Podkast
from .serializers import SongSerializer, FavoriteSongSerializer, PlayListSerializer, PodkastSerializer
import requests
from audio.schemas import SongSchema, DeleteSongSchema, PlayListSchema
from audio.models import Song, FavoriteSong, PlayList, Podkast
from audio.serializers import SongSerializer, FavoriteSongSerializer, PlayListSerializer, PodkastSerializer
from conf.settings.base import AZURACAST_URL, AZURACAST_API_KEY
def authorize_url(url):
@ -22,7 +22,6 @@ def authorize_url(url):
}
return requests.get(file_url, headers=headers)
class PodkastViewSet(GenericViewSet):
queryset = Podkast
serializer_class = PodkastSerializer
@ -44,7 +43,8 @@ class PodkastViewSet(GenericViewSet):
class PlayListViewSet(GenericViewSet):
queryset = PlayList
azura = AzuraCast()
queryset = PlayList.objects.all()
serializer_class = PlayListSerializer
permission_classes = (IsAuthenticated,)
def list(self, request):
@ -64,7 +64,6 @@ class PlayListViewSet(GenericViewSet):
@action(detail=False, methods=['post'], schema=PlayListSchema())
def create_playlist(self, request):
if request.data.get('name', False):
try:
instance = self.get_queryset().objects.get(pk=request.data['playlist_id'], user=request.user.pk)
@ -80,8 +79,7 @@ class PlayListViewSet(GenericViewSet):
status=status.HTTP_404_NOT_FOUND)
else:
playlist_pk = self.get_queryset().objects.filter(user=request.user.pk)
number_playlist = len(playlist_pk) + 1
name = f"Плейлист № {number_playlist}"
name = f"Плейлист № {len(playlist_pk)+1}"
data = request.data
data.update(user=request.user.pk, name=name)
serializer = self.get_serializer(data=request.data)
@ -126,36 +124,20 @@ class PlayListViewSet(GenericViewSet):
status=status.HTTP_404_NOT_FOUND)
@action(detail=False, methods=['post'], schema=PlayListSchema())
def add_to_playlist(self, request):
@action(detail=True, methods=['post'], schema=PlayListSchema())
def add_to_playlist(self, request, *args, **kwargs):
song = None
try:
song = Song.objects.get(azura_id=request.data.get('azura_id')).pk
except ObjectDoesNotExist:
file_url = f"{AZURACAST_URL}api/station/it-radio/file/{request.data['azura_id']}"
response = authorize_url(file_url)
data = request.data
file_play = f"{AZURACAST_URL}api/station/it-radio/file/{response.json()['unique_id']}/play"
data.update(unique_id=file_play)
data = self.azura.add_to_playlist(request.data['azura_id'], request.data)
song_serializer = SongSerializer(data=data)
if song_serializer.is_valid():
song_serializer.save()
song = song_serializer.data.get('id')
try:
instance = self.get_queryset().objects.get(pk=request.data.get('playlist_id'))
except ObjectDoesNotExist:
return Response(
{'detail': 'Плейлиста не существует', 'error': {'PlayList': 'Плейлиста не существует'}},
status=status.HTTP_404_NOT_FOUND)
songs = list(instance.song.all().values_list('pk', flat=True)) + [song]
data = {
'playlist_id': request.data.get('playlist_id'),
'song': songs
}
serializer = PlayListSerializer(data=data, partial=True, instance=instance)
serializer.is_valid(raise_exception=True)
serializer.save()
song = song_serializer.data
instance = self.get_object()
instance.song.add(song)
serializer = self.get_serializer(instance)
return Response(serializer.data)
@ -164,6 +146,7 @@ class SongViewSet(GenericViewSet):
serializer_class = SongSerializer
permission_classes = (IsAuthenticated,)
def list(self, request):
songs_pk = FavoriteSong.objects.filter(user=request.user, song__isnull=False).values_list('song_id', flat=True)
songs = self.get_queryset().objects.filter(id__in=songs_pk)