Example #1
0
def playlist(request):
    if request.method == 'GET':
        queryset = Playlist.objects.filter(user=request.user).order_by('-created_at')
        playlist_serializer = PlaylistSerializer(queryset, context={'request': request}, many=True)
        return Response(playlist_serializer.data, status=status.HTTP_200_OK)
    data = request.data
    user = request.user
    playlist_to_save = Playlist()
    playlist_to_save.title = data.get('title')
    playlist_to_save.message = data.get('message')
    playlist_to_save.locked = True if data.get('locked') == 'true' else False
    playlist_to_save.public = True if data.get('public') == 'true' else False
    playlist_to_save.latitude = data.get('latitude')
    playlist_to_save.longitude = data.get('longitude')
    playlist_to_save.user = user
    playlist_to_save.playlist_image = request.FILES.get('image')
    playlist_to_save.playlist_video = request.FILES.get('video')
    playlist_to_save.save()

    songs = data.get('songs', [])
    if type(songs) == type(""):
        songs = json.loads(songs)

    # Save songs
    for song_json in songs:
        images = song_json['album']['images']
        song, _ = Song.objects.get_or_create(
            title=song_json['name'],
            spotify_id=song_json['id'],
            spotify_uri=song_json['uri'],
            track_preview_url=song_json['preview_url'],
            album_artwork=images[0].get('url') if images else '',
            album_title=song_json['album']['name']
        )
        song.save()
        playlist_to_save.songs.add(song)

        for artist_json in song_json['artists']:
            artist, _ = Artist.objects.get_or_create(
                name=artist_json['name'],
                spotify_id=artist_json['id']
            )
            song.artists.add(artist)
    
    profiles = data.get('profiles', [])
    if type(profiles) == type(""):
        profiles = json.loads(profiles)
    
    for profile in profiles:
        share_with_user = get_object_or_404(user_model, username=profile['user']['username'])
        # user_id = profile_json['user']['id']
        playlist_to_save.shared_with_users.add(share_with_user)
    
    # notify_feed_of_playlist(user.userprofile, playlist_to_save)

    return Response(PlaylistSerializer(playlist_to_save,
                                       context={'request': request}).data,
                    status=status.HTTP_201_CREATED)