diff --git a/SpotifyAPI.Web/Clients/Interfaces/IMarketsClient.cs b/SpotifyAPI.Web/Clients/Interfaces/IMarketsClient.cs new file mode 100644 index 00000000..df1facec --- /dev/null +++ b/SpotifyAPI.Web/Clients/Interfaces/IMarketsClient.cs @@ -0,0 +1,19 @@ +using System.Threading.Tasks; + +namespace SpotifyAPI.Web +{ + /// + /// Markets Endpoints + /// + public interface IMarketsClient + { + /// + /// Get the list of markets where Spotify is available. + /// + /// + /// https://developer.spotify.com/documentation/web-api/reference/#/operations/get-available-markets + /// + /// + Task AvailableMarkets(); + } +} diff --git a/SpotifyAPI.Web/Clients/MarketsClient.cs b/SpotifyAPI.Web/Clients/MarketsClient.cs new file mode 100644 index 00000000..04aa6e19 --- /dev/null +++ b/SpotifyAPI.Web/Clients/MarketsClient.cs @@ -0,0 +1,16 @@ +using System.Threading.Tasks; +using SpotifyAPI.Web.Http; +using URLs = SpotifyAPI.Web.SpotifyUrls; + +namespace SpotifyAPI.Web +{ + public class MarketsClient : APIClient, IMarketsClient + { + public MarketsClient(IAPIConnector apiConnector) : base(apiConnector) { } + + public Task AvailableMarkets() + { + return API.Get(URLs.Markets()); + } + } +} diff --git a/SpotifyAPI.Web/Clients/SpotifyClient.cs b/SpotifyAPI.Web/Clients/SpotifyClient.cs index 41bb6e23..1ac0e4ce 100644 --- a/SpotifyAPI.Web/Clients/SpotifyClient.cs +++ b/SpotifyAPI.Web/Clients/SpotifyClient.cs @@ -49,6 +49,7 @@ namespace SpotifyAPI.Web Personalization = new PersonalizationClient(_apiConnector); Episodes = new EpisodesClient(_apiConnector); Library = new LibraryClient(_apiConnector); + Markets = new MarketsClient(_apiConnector); } public IPaginator DefaultPaginator { get; } @@ -79,6 +80,8 @@ namespace SpotifyAPI.Web public ILibraryClient Library { get; } + public IMarketsClient Markets { get; } + public IResponse? LastResponse { get; private set; } /// diff --git a/SpotifyAPI.Web/Models/Response/AvailableMarketsResponse.cs b/SpotifyAPI.Web/Models/Response/AvailableMarketsResponse.cs new file mode 100644 index 00000000..6c7e1018 --- /dev/null +++ b/SpotifyAPI.Web/Models/Response/AvailableMarketsResponse.cs @@ -0,0 +1,10 @@ +using System.Collections.Generic; + +namespace SpotifyAPI.Web +{ + public class AvailableMarketsResponse + { + public List Markets { get; set; } = default!; + } +} + diff --git a/SpotifyAPI.Web/SpotifyUrls.cs b/SpotifyAPI.Web/SpotifyUrls.cs index bb548c8d..570a0aa2 100644 --- a/SpotifyAPI.Web/SpotifyUrls.cs +++ b/SpotifyAPI.Web/SpotifyUrls.cs @@ -129,6 +129,8 @@ namespace SpotifyAPI.Web public static Uri LibraryEpisodesContains() => EUri($"me/episodes/contains"); + public static Uri Markets() => EUri($"markets"); + private static Uri EUri(FormattableString path) => new(path.ToString(_provider), UriKind.Relative); } }