using System.Collections.Generic; using Nancy; using Nancy.Metadata.Modules; using Nancy.Metadata.Swagger.Core; using Nancy.Metadata.Swagger.Fluent; using Sony.Filtr.Contracts.Entities; using Sony.Filtr.Playlists.Spotify; using Sony.Filtr.Playlists.Spotify.Model; namespace Sony.Filtr.AdminAPI.Modules.SpotifySpecific { public class SpotifyPlaylistTracklistMetadataModule : MetadataModule { public SpotifyPlaylistTracklistMetadataModule() { var tag = "Spotify playlist tracklists"; Describe["GetSpotifyTracklistDates"] = description => new SwaggerRouteMetadata(description).With(c => c.WithDescription("Get all available historic tracklist dates for a playlist", tag) .WithRequestParameter("playlistUri", type: "string", description: "Playlist URI", loc: "query") .WithDefaultResponse>()); Describe["GetSpotifyTracklistHistory"] = description => new SwaggerRouteMetadata(description).With(c => c.WithDescription("Get historic tracklist for a playlist at a given date", tag) .WithRequestParameter("date", description: "Tracklist date", loc: "path") .WithRequestParameter("playlistUri", type: "string", description: "Playlist URI", loc: "query") .WithRequestParameter("region", type: "string", description: "Region (used to determine \"Is Sony\")", loc: "query", required: false) .WithRequestParameter("limit", type: "int", description: "Paging size (default 1000)", loc: "query", required: false) .WithRequestParameter("offset", type: "int", description: "Paging offset (default 0)", loc: "query", required: false) .WithDefaultResponse>()); Describe["GetSpotifyPlaylistsWithHistoryForTrack"] = description => new SwaggerRouteMetadata(description).With(c => c.WithDescription("Get the playlists which now or previously included the specified track. Track ISRC is used for matching.", tag) .WithRequestParameter("trackUri", type: "string", description: "Track URI (ISRC or URI required)", loc: "query") .WithRequestParameter("isrc", type: "string", description: "Track ISRC (ISRC or URI required)", loc: "query") .WithRequestParameter("limit", type: "int", description: "Paging size (default 1000)", loc: "query") .WithRequestParameter("offset", type: "int", description: "Paging offset (default 0)", loc: "query") .WithRequestParameter("excludeCurrentPlaylists", type: "bool", description: "If true we exclude playlists which currently contain the track and only include playlists which previously had the track. Defaults to false", loc: "query", required: false) .WithDefaultResponse>()); Describe["GetSpotifyTracklist"] = description => new SwaggerRouteMetadata(description).With(c => c.WithDescription("Get latest tracklist", tag) .WithRequestParameter("playlistUri", type: "string", description: "Playlist URI", loc: "query") .WithRequestParameter("region", type: "string", description: "Region (used to determine \"Is Sony\")", loc: "query") .WithRequestParameter("limit", type: "int", description: "Paging size (default 1000)", loc: "query") .WithRequestParameter("offset", type: "int", description: "Paging offset (default 0)", loc: "query") .WithDefaultResponse>()); Describe["GetPlaylistedTracklistSummary"] = description => new SwaggerRouteMetadata(description).With(c => c.WithDescription("Get a summary of how many playlists feature the specified tracks in their current tracklist.", tag) .WithRequestParameter("trackId", type: "string", description: "Spotify track Ids. Multiple can be specified either via repeating parameter or comma-separated", loc: "query", required: true) .WithDefaultResponse>()); Describe["GetPlaylistedTracklistHistorySummary"] = description => new SwaggerRouteMetadata(description).With(c => c.WithDescription("Get a summary of how many playlists have featured the specified tracks in their historic tracklists. Note that not all playlists have historic data.", tag) .WithRequestParameter("trackId", type: "string", description: "Spotify track Ids. Multiple can be specified either via repeating parameter or comma-separated", loc: "query", required: true) .WithRequestParameter("date", description: "Date for tracklist and subscriber data", loc: "path") .WithDefaultResponse>()); Describe["GetPlaylistedTracklistHistoryOnlySummary"] = description => new SwaggerRouteMetadata(description).With(c => c.WithDescription("Get a summary of how many playlists have featured the specified tracks in their historic tracklists but not their current tracklist. Note that not all playlists have historic data.", tag) .WithRequestParameter("trackId", type: "string", description: "Spotify track Ids. Multiple can be specified either via repeating parameter or comma-separated", loc: "query", required: true) .WithRequestParameter("date", description: "Date for tracklist and subscriber data", loc: "path") .WithDefaultResponse>()); Describe["GetPlaylistedTracklistHistoryChange"] = description => new SwaggerRouteMetadata(description).With(c => c.WithDescription("Get changes to track in playlists over time", tag) .WithRequestParameter("trackId", type: "string", description: "Spotify track Ids. Multiple can be specified either via repeating parameter or comma-separated", loc: "query", required: true) .WithRequestParameter("startdate", description: "StartDate for tracklist and subscriber data", loc: "path", required:true) .WithDefaultResponse>()); Describe["PlaylistTrackPositionChange"] = description => new SwaggerRouteMetadata(description).With(c => c.WithDescription("Get the track position change in playlists over time. Lookup is done by ISRC. TrackUri or ISRC is required input.", tag) .WithRequestParameter("playlistUris", description: "Spotify uris for the playlists. Comma separated or multiple request-parameters.", loc: "query", required: true) .WithRequestParameter("trackUri", description: "Spotify uri for the track.", loc: "query", required: false) .WithRequestParameter("isrc", description: "Isrc for the track", loc: "query", required: false) .WithRequestParameter("startDate", description: "Start date of entries, default 30 days ago if not specified", loc: "query", required: false) .WithRequestParameter("endDate", description: "End date of entries, default today if not specified", loc: "query", required: false) .WithDefaultResponse>()); Describe["GetPlaylistsTracklistDistribution"] = description => new SwaggerRouteMetadata(description).With(c => c.WithDescription("Get a summary of the distribution for the tracks by certain attributes in the specified playlists.", tag) .WithRequestParameter("playlistUri", type: "string", description: "Spotify playlist uri(s). Multiple can be specified either via repeating parameter or comma-separated", loc: "query", required: true) .WithRequestParameter("region", description: "Determine local tracks based on region.", loc: "path", required: true) .WithDefaultResponse>()); } } }