using System.Linq; using Nancy; using Sony.Filtr.Applications; using Sony.Filtr.Core.InfluentialPlaylists; using Sony.Filtr.SpotifyWebAPI; namespace Sony.Filtr.AdminAPI.Modules.Stats { public class InfluentialPlaylistModule : BaseModule { private readonly SpotifyWebApi _spotifyWebApi; private readonly InfluentialPlaylistsManager _influentialPlaylistsManager; public InfluentialPlaylistModule(ApplicationInstanceManager applicationInstanceManager, SpotifyWebApi spotifyWebApi, InfluentialPlaylistsManager influentialPlaylistsManager) : base(applicationInstanceManager) { _spotifyWebApi = spotifyWebApi; _influentialPlaylistsManager = influentialPlaylistsManager; Put["UploadInfluentialPlaylists", "/InfluentialPlaylists/UploadFile/"] = parameters => { var playlistChartFile = Request.Files.FirstOrDefault(); var playlistChartFileStream = Request.Body; if (playlistChartFileStream == null || Request.Query.year == null || Request.Query.month == null) return HttpStatusCode.BadRequest; var year = (int)Request.Query.year; var month = (int)Request.Query.month; _influentialPlaylistsManager.ImportPlaylistFile(playlistChartFileStream, year, month); return HttpStatusCode.Accepted; }; Get["GetInfluentialPlaylistMarkets", "/InfluentialPlaylists/Markets/"] = parameters => { var chartMarkets = _influentialPlaylistsManager.GetMarkets(); return Response.AsJson(chartMarkets); }; Get["GetInfluentialPlaylistDates", "/InfluentialPlaylists/{market}/Dates/"] = parameters => { string market = parameters.market; var chartMarkets = _influentialPlaylistsManager.GetMarketDates(market); return Response.AsJson(chartMarkets); }; // Get latest chart for market Get["GetInfluentialPlaylistCharts", "/InfluentialPlaylists/{market}/"] = parameters => { string market = parameters.market; var playListChartDates = _influentialPlaylistsManager.GetMarketDates(market); var latestDate = playListChartDates.Last(); var chart = _influentialPlaylistsManager.GetPlaylistChartWithStats(market, latestDate); return Response.AsJson(chart); }; Get["GetInfluentialPlaylistChartsForYear", "/InfluentialPlaylists/{market}/{year}/{month}/"] = parameters => { string market = parameters.market; var year = (int)parameters.market; var month = (int)parameters.market; var date = new TopPlaylistDate() {Month = month, Year = year}; var chart = _influentialPlaylistsManager.GetPlaylistChartWithStats(market, date); return Response.AsJson(chart); }; } } }