//using System; //using System.Collections.Generic; //using System.Data.SqlTypes; //using System.IO; //using System.Linq; //using System.Text; //using System.Threading.Tasks; //using MoreLinq; //using Sony.Filtr.Buzz; //using Sony.Filtr.Core.EditorialPlaylists; //namespace Sony.Filtr.Worker.Onetime //{ // public class GetMostAddedTracks // { // private readonly EditorialPlaylistManager _editorialPlaylistManager; // private readonly BuzzAccountManager _buzzAccountManager; // public GetMostAddedTracks(EditorialPlaylistManager editorialPlaylistManager, BuzzAccountManager buzzAccountManager) // { // _editorialPlaylistManager = editorialPlaylistManager; // _buzzAccountManager = buzzAccountManager; // } // public async Task ExecuteAsync() // { // var allPlaylists = await _editorialPlaylistManager.GetLightweightEditorialPlaylistsAsync(null, false, false); // var distinctPlaylists = allPlaylists.Where(p=> p.BuzzCategoryId.HasValue).DistinctBy(p => p.SpotifyLinkUri).ToList(); // var buzzCategories = _buzzAccountManager.GetBuzzCategories().ToDictionary(k=> k.ID, v=> v.Name); // foreach (var buzzCategoryGroup in distinctPlaylists.Where(p => p.BuzzCategoryId.HasValue).GroupBy(p=> p.BuzzCategoryId.Value)) // { // var allPlaylistTracks = await _editorialPlaylistManager.GetTracksAsync(buzzCategoryGroup.ToList()); // var allTracks = allPlaylistTracks.SelectMany(t => t.Value.DistinctBy(ti => ti.ISRC)).Where(t => !string.IsNullOrWhiteSpace(t.ISRC)); // var trackGroups = allTracks.GroupBy(t => t.ISRC).OrderByDescending(g => g.Count()); // FileInfo file = new FileInfo(string.Format("MostAddedTracks-{0}.csv", buzzCategories[buzzCategoryGroup.Key])); // using (var fileStream = file.OpenWrite()) // { // fileStream.Write(Encoding.UTF8.GetPreamble(), 0, Encoding.UTF8.GetPreamble().Length); // using (var fileWriter = new StreamWriter(fileStream)) // { // foreach (var trackGroup in trackGroups) // { // var track = trackGroup.First(); // var earliestAdded = trackGroup.Select(t => t.EarliestAddedDate) // .Where( // t => t.HasValue && t.Value != DateTime.MinValue && t.Value != SqlDateTime.MinValue.Value) // .Min(t => t); // var csv = string.Join(";", trackGroup.Key, track.Artists.First().Name, track.Name, // track.LinkString, earliestAdded, trackGroup.Count()); // fileWriter.WriteLine(csv); // } // } // } // } // } // } //}