using System.Net; using System.Collections.Generic; using System.Threading.Tasks; using SpotifyAPI.Web.Http; using URLs = SpotifyAPI.Web.SpotifyUrls; namespace SpotifyAPI.Web { public class FollowClient : APIClient, IFollowClient { public FollowClient(IAPIConnector apiConnector) : base(apiConnector) { } public Task> CheckCurrentUser(FollowCheckCurrentUserRequest request) { Ensure.ArgumentNotNull(request, nameof(request)); return API.Get>(URLs.CurrentUserFollowerContains(), request.BuildQueryParams()); } public Task> CheckPlaylist(string playlistId, FollowCheckPlaylistRequest request) { Ensure.ArgumentNotNullOrEmptyString(playlistId, nameof(playlistId)); Ensure.ArgumentNotNull(request, nameof(request)); return API.Get>(URLs.PlaylistFollowersContains(playlistId), request.BuildQueryParams()); } public async Task Follow(FollowRequest request) { Ensure.ArgumentNotNull(request, nameof(request)); var statusCode = await API .Put(URLs.CurrentUserFollower(), request.BuildQueryParams(), request.BuildBodyParams()) .ConfigureAwait(false); return statusCode == HttpStatusCode.OK; } public async Task FollowPlaylist(string playlistId) { Ensure.ArgumentNotNullOrEmptyString(playlistId, nameof(playlistId)); var statusCode = await API .Put(URLs.PlaylistFollowers(playlistId), null, null) .ConfigureAwait(false); return statusCode == HttpStatusCode.OK; } public async Task FollowPlaylist(string playlistId, FollowPlaylistRequest request) { Ensure.ArgumentNotNullOrEmptyString(playlistId, nameof(playlistId)); Ensure.ArgumentNotNull(request, nameof(request)); var statusCode = await API .Put(URLs.PlaylistFollowers(playlistId), null, request.BuildBodyParams()) .ConfigureAwait(false); return statusCode == HttpStatusCode.OK; } public Task OfCurrentUser() { var request = new FollowOfCurrentUserRequest(); return API.Get(URLs.CurrentUserFollower(), request.BuildQueryParams()); } public Task OfCurrentUser(FollowOfCurrentUserRequest request) { Ensure.ArgumentNotNull(request, nameof(request)); return API.Get(URLs.CurrentUserFollower()); } public async Task Unfollow(UnfollowRequest request) { Ensure.ArgumentNotNull(request, nameof(request)); var statusCode = await API .Delete(URLs.CurrentUserFollower(), request.BuildQueryParams(), request.BuildBodyParams()) .ConfigureAwait(false); return statusCode == HttpStatusCode.NoContent; } public async Task UnfollowPlaylist(string playlistId) { Ensure.ArgumentNotNullOrEmptyString(playlistId, nameof(playlistId)); var statusCode = await API .Delete(URLs.PlaylistFollowers(playlistId), null, null) .ConfigureAwait(false); return statusCode == HttpStatusCode.OK; } } }