Exemple #1
0
        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 &ndash; <b>{NewPlaylist.name}</b> &ndash; 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
                }
            }
        }