using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using MoreLinq; using NLog; using Sony.Filtr.Contracts.Entities; using Sony.Filtr.Core.EditorialPlaylists; using Sony.Filtr.ErrorLogging; using Sony.Filtr.Search; using Sony.Filtr.Utility.Extensions; namespace Sony.Filtr.Tasks.Tasks.Spotify { public class IndexEditorialPlaylists : IScheduledTask { private readonly EditorialPlaylistManager _editorialPlaylistManager; private readonly PlaylistCategoryManager _playlistCategoryManager; private readonly SearchManager _searchManager; private readonly Logger _logger; public IndexEditorialPlaylists(EditorialPlaylistManager editorialPlaylistManager, PlaylistCategoryManager playlistCategoryManager, SearchManager searchManager) { _editorialPlaylistManager = editorialPlaylistManager; _playlistCategoryManager = playlistCategoryManager; _searchManager = searchManager; _logger = LogManager.GetLogger("IndexEditorialPlaylists"); } public async Task ExecuteAsync(Guid scheduledTaskLogId) { var editorialPlaylists = await _editorialPlaylistManager.GetEditorialPlaylistsAsync(null, onlyActive: false, lightWeight: true); await IndexPlaylistsAsync(editorialPlaylists); return null; } private async Task IndexPlaylistsAsync(List sonyPlaylists) { try { _logger.Debug("Begin indexing playlists"); await sonyPlaylists.Batch(25).ForEachAsync(1, async playlistBatch => { try { var extendedPlaylistAttributes = await _editorialPlaylistManager.GetPlaylistAttributesAsync(sonyPlaylists); var categories = await _playlistCategoryManager.GetCategoriesAsync(sonyPlaylists); await _searchManager.IndexPlaylistsAsync(extendedPlaylistAttributes, categories); } catch (Exception ex) { _logger.Error(ex, "Error when indexing playlist batch."); ErrorLoggingManager.Instance.LogError(ex); } }); _logger.Debug("Done indexing playlists"); } catch (Exception ex) { _logger.Error(ex, "Could not index playlists"); ErrorLoggingManager.Instance.LogError(ex); } } } }