public static CosmosPlaylist formatToCosmosDBDocument(Playlist playlist) { var tracks = new List <CosmosTrack>(); foreach (var item in playlist.tracks.items) { var track = new CosmosTrack( item.track.id, item.track.name, item.track.popularity, item.track.preview_url, item.track.uri ); var artists = new List <string>(); foreach (var artist in item.track.artists) { artists.Add(artist.name); } track.artists = artists; tracks.Add(track); } var cosmos_playlist = new CosmosPlaylist( playlist.id, playlist.name, playlist.description, playlist.followers.total, tracks, playlist.uri ); return(cosmos_playlist); }
public static CosmosPlaylist isExistingDocument(CosmosPlaylist NewPlaylist, IEnumerable <CosmosPlaylist> OldPlaylists) { CosmosPlaylist OldPlaylist = null; foreach (var item in OldPlaylists) { if (NewPlaylist.playlist_id == item.playlist_id) { OldPlaylist = item; break; } } return(OldPlaylist); }
public static void Run( [ServiceBusTrigger("additions", Connection = "ServiceBusConnection")] CosmosPlaylist NewPlaylist, [CosmosDB( databaseName: "dailymusic", collectionName: "playlists", ConnectionStringSetting = "CosmosDBConnection", SqlQuery = "Select * from Playlists")] IEnumerable <CosmosPlaylist> OldPlaylists, [CosmosDB( databaseName: "dailymusic", collectionName: "playlists", ConnectionStringSetting = "CosmosDBConnection")] out dynamic document, [SendGrid] out SendGridMessage message, ILogger log) { CosmosPlaylist OldPlaylist = isExistingDocument(NewPlaylist, OldPlaylists); message = null; // If the Spotify Playlist does not exists in the CosmosDB, then create it if (OldPlaylist == null) { log.LogInformation("New CosmsoDB Document Detected"); document = Newtonsoft.Json.JsonConvert.SerializeObject(NewPlaylist); } else // Otherwise, determine if the CosmosDB Playlist is up-to-date { HashSet <CosmosTrack> OldTracks = new HashSet <CosmosTrack>(OldPlaylist.tracks); HashSet <CosmosTrack> NewTracks = new HashSet <CosmosTrack>(NewPlaylist.tracks); var tracks_added = TracksAdded(OldTracks, NewTracks); var tracks_removed = TracksRemoved(OldTracks, NewTracks); // Log the Tracks that have been Added and Deleted Since the Last Scan foreach (var track in tracks_added) { log.LogInformation($"Track Added: {track.name} from '{OldPlaylist.name}'"); } foreach (var track in tracks_removed) { log.LogInformation($"Track Removed: {track.name} from '{OldPlaylist.name}'"); } // No document is created if the playlist has not changed if (tracks_added.Count == 0 && tracks_removed.Count == 0) { document = null; } else // Update the existing document sends an email { if (tracks_added.Count > 0) { // Construct the Email string message_content = $"The Spotify Playlist – <b>{NewPlaylist.name}</b> – has recently been updated with new tracks:<br><br>"; foreach (var track in tracks_added) { message_content += track.ToString(); } message = new SendGridMessage(); message.AddTo("*****@*****.**"); message.SetFrom(new EmailAddress("*****@*****.**")); message.AddContent("text/html", message_content); message.SetSubject($"Music Daily {DateTime.Today.ToString("MM-dd-yyyy")}"); } document = NewPlaylist; // Update the existing document } } }