using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using MoreLinq; using Sony.Filtr.Buzz; using Sony.Filtr.Contracts.Definitions; using Sony.Filtr.Core.EditorialPlaylists; using Sony.Filtr.Utility.Extensions; namespace Sony.Filtr.Worker.Onetime { public class SetBuzzAccountPlaylistFollowers { private readonly EditorialPlaylistManager _editorialPlaylistManager; private readonly BuzzAccountManager _buzzAccountManager; public SetBuzzAccountPlaylistFollowers(EditorialPlaylistManager editorialPlaylistManager, BuzzAccountManager buzzAccountManager) { _editorialPlaylistManager = editorialPlaylistManager; _buzzAccountManager = buzzAccountManager; } public async Task ExecuteAsync() { var allBuzzUsers = await _buzzAccountManager.GetBuzzUsersAsync(musicServiceId: (int)MusicService.Spotify); var buzzUserLookup = allBuzzUsers.ToDictionary(k => k.Username, v => v); var allEditorialPlaylist = await _editorialPlaylistManager.GetEditorialPlaylistsAsync(onlySony: false, lightWeight:true); allEditorialPlaylist = allEditorialPlaylist.DistinctBy(p => p.SpotifyLink).Where(p=> buzzUserLookup.ContainsKey(p.SpotifyLink.ExtractSpotifyPlaylistUserName())).ToList(); var playlistAttributes = await _editorialPlaylistManager.GetPlaylistAttributesAsync(allEditorialPlaylist); var groupedEditorialPlaylist = playlistAttributes.GroupBy(g => g.EditorialPlaylist.SpotifyLink.ExtractSpotifyPlaylistUserName()); await groupedEditorialPlaylist.ForEachAsync(10, async playlistsForUser => { var buzzUser = buzzUserLookup.GetValueOrDefault(playlistsForUser.Key); if (buzzUser != null) { var playlistFollowers = playlistsForUser.Select(p => p.Attributes.Followers).Sum(); buzzUser.PlaylistSubscribers = (int?)playlistFollowers; Console.WriteLine($"{buzzUser.Username} has {playlistFollowers} playlist followers"); await _buzzAccountManager.UpdateBuzzUserAsync(buzzUser, new List { "PlaylistSubscribers" }); } }); } } }