using System.Collections.Generic; using System.Linq; using Nancy; using Sony.Filtr.AdminAPI.Config; using Sony.Filtr.Contracts.Entities; namespace Sony.Filtr.AdminAPI.Utility { public static class RequestParameterExtensions { public static List GetRequiredPlaylistIds(this Request request) { List playlistIds = new List(); var playlistId = (string)request.Query.playlistId; if (!string.IsNullOrWhiteSpace(playlistId)) { var splitPlaylistIds = playlistId.Split(','); playlistIds.AddRange(splitPlaylistIds); } var playlistUri = (string)request.Query.playlistUri; if (!string.IsNullOrWhiteSpace(playlistUri)) { var splitPlaylistUris = playlistUri.Split(','); var parsedPlaylistIds = splitPlaylistUris.Select(p => new SpotifyLink(p)).Where(p=> p.IsPlaylist()).Select(p=> p.ExtractPlaylistID()); playlistIds.AddRange(parsedPlaylistIds); } if (!playlistIds.Any()) { throw new NancyStatusException(HttpStatusCode.BadRequest, "No playlist id or uri specified"); } return playlistIds; } public static string GetRequiredPlaylistId(this Request request) { var playlistId = (string)request.Query.playlistId; if (!string.IsNullOrWhiteSpace(playlistId)) { return playlistId; } var playlistUri = (string)request.Query.playlistUri; if (string.IsNullOrWhiteSpace(playlistUri)) { throw new NancyStatusException(HttpStatusCode.BadRequest, "No playlist id or uri specified"); } var playlistLink = new SpotifyLink(playlistUri); if (!playlistLink.IsPlaylist()) { throw new NancyStatusException(HttpStatusCode.BadRequest, "Specified url is not a playlist"); } return playlistLink.ExtractPlaylistID(); } public static string GetRequiredArtistId(this Request request) { var artistId = (string)request.Query.artistId; if (!string.IsNullOrWhiteSpace(artistId)) { return artistId; } var artistUri = (string)request.Query.artistUri; if (string.IsNullOrWhiteSpace(artistUri)) { throw new NancyStatusException(HttpStatusCode.BadRequest, "No artist id or uri specified"); } var artistLink = new SpotifyLink(artistUri); if (!artistLink.IsArtist()) { throw new NancyStatusException(HttpStatusCode.BadRequest, "Specified url is not a artist uri"); } return artistLink.ExtractArtistID(); } public static List GetMultiplePlaylistIds(this Request request, bool throwIfMissing = true) { List playlistIds = new List(); var playlistId = (string)request.Query.playlistId; if (!string.IsNullOrWhiteSpace(playlistId)) { var splitPlaylistIds = playlistId.Split(',').ToList(); if (splitPlaylistIds.Any()) { playlistIds.AddRange(splitPlaylistIds); } } var playlistUri = (string)request.Query.playlistUri; if (!string.IsNullOrWhiteSpace(playlistUri)) { var playlistUris = playlistUri.Split(',').Select(p => new SpotifyLink(p)).ToList(); if (playlistUris.Any()) { playlistIds.AddRange(playlistUris.Select(p => p.ExtractPlaylistID())); } } if (!playlistIds.Any() && throwIfMissing) { throw new NancyStatusException(HttpStatusCode.BadRequest, "No playlists specified"); } return playlistIds; } } }