예제 #1
0
        public async Task <bool> SaveToPlaylist(AddSongToPlaylistDto addSongToPlaylistDto, ProfileReadDto spotifyProfile)
        {
            var uri         = $"spotify:track:{addSongToPlaylistDto.SongId}";
            var accessToken = addSongToPlaylistDto.AccessToken;

            AppendAuthHeader(accessToken);

            var isPlaylistFound = await FindSpotifyPlaylist(accessToken, addSongToPlaylistDto.PlaylistId);

            if (!isPlaylistFound)
            {
                addSongToPlaylistDto.PlaylistId = await CreatePlaylist(addSongToPlaylistDto.AccessToken, spotifyProfile.SpotifyId);

                if (addSongToPlaylistDto.PlaylistId == null)
                {
                    return(false);
                }

                await _spotiRepository.ConnectPlaylistToAccountAsync(spotifyProfile.SpotifyId, addSongToPlaylistDto.PlaylistId);
            }

            RemoveTrackFromSpotifyPlaylist(addSongToPlaylistDto.PlaylistId, uri, accessToken);

            using var response = await _client.PostAsync($"https://api.spotify.com/v1/playlists/{addSongToPlaylistDto.PlaylistId}/tracks?uris={uri}", null);

            if (response.IsSuccessStatusCode)
            {
                //Track was created in the playlist
                return(true);
            }
            //if status code 403 - error or playlist size is 10 000
            return(false);
        }
예제 #2
0
        public async Task <IActionResult> AddToPlaylist(AddSongToPlaylistDto addSongToPlaylistDto)
        {
            var spotifyProfile = (ProfileReadDto)HttpContext.Items["User"];

            var playlistId = await _accountService.FindUserGetDatabasePlaylist(spotifyProfile);

            addSongToPlaylistDto.PlaylistId = playlistId;

            var isSuccessful = await _accountService.SaveToPlaylist(addSongToPlaylistDto, spotifyProfile);

            if (isSuccessful)
            {
                return(Ok());
            }
            return(Forbid());
        }