12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697 |
- from rest_framework import viewsets
- from rest_framework import generics
- from rest_framework.views import APIView
- from rest_framework import status
- from rest_framework.response import Response
- from .filters import AlbumFilter, ArtistFilter, TrackFilter
- from .models import Album, Artist, Track,Playlist,PlaylistTrack
- from .serializers import AlbumSerializer, ArtistSerializer, TrackSerializer, PlaylistSerializer, UpdatePlaylistSerializer,PlaylistCreateSerializer
- class BaseAPIViewSet(viewsets.ReadOnlyModelViewSet):
- lookup_field = "uuid"
- lookup_url_kwarg = "uuid"
- class BaseAPIViewSet1(viewsets.ModelViewSet):
- lookup_field = "uuid"
- lookup_url_kwarg = "uuid"
- class ArtistViewSet(BaseAPIViewSet):
- queryset = Artist.objects.all()
- serializer_class = ArtistSerializer
- filter_class = ArtistFilter
- class AlbumViewSet(BaseAPIViewSet):
- queryset = Album.objects.all()
- serializer_class = AlbumSerializer
- filter_class = AlbumFilter
- def get_queryset(self):
- queryset = super().get_queryset()
- return queryset.select_related("artist").prefetch_related("tracks")
- class TrackViewSet(BaseAPIViewSet):
- queryset = Track.objects.all()
- serializer_class = TrackSerializer
- filter_class = TrackFilter
- def get_queryset(self):
- queryset = super().get_queryset()
- return queryset.select_related("album", "album__artist")
- class FetchPlaylist(BaseAPIViewSet1):
- queryset = Playlist.objects.all()
- serializer_class = PlaylistSerializer
- def get_queryset(self):
- queryset = super().get_queryset()
- return queryset
- class UpdatePlaylist(generics.UpdateAPIView):
- """ update for only playlist name """
- queryset = Playlist.objects.all()
- serializer_class = UpdatePlaylistSerializer
-
- def get_object(self, *args, **kwargs):
- try:
- playlist = Playlist.objects.filter(uuid=self.request.data['uuid']).get()
- except Playlist.DoesNotExist:
- return None
- return playlist
- def update(self, request, *args, **kwargs):
- playlist = self.get_object()
- if playlist:
- kwargs['partial'] = True
- return super(UpdatePlaylist, self).update(request, *args, **kwargs)
- else:
- response = {'details':"uuid does not exist"}
- return response
- class CreatePlaylist(generics.CreateAPIView):
- '''
- Playlist create using uuid and name
- '''
- serializer_class = PlaylistCreateSerializer
- def create(self, request, *args, **kwargs):
- response_data = super(CreatePlaylist, self).create(request, *args, **kwargs)
- return response_data
-
- class DeletePlaylist(APIView):
- '''
- Playlist delete using the uuid
- '''
- def post(self,request,format=None):
- try:
- playlist=Playlist.objects.get(uuid=request.POST["uuid"])
- playlist.delete()
- response= {'details':"Playlist is deleted"}
- except:
- response= {'details':"Record does not exist"}
- return Response(response)
|