diff --git a/EmmaSharp/EmmaSharp.csproj b/EmmaSharp/EmmaSharp.csproj index 056826e..c7c5612 100644 --- a/EmmaSharp/EmmaSharp.csproj +++ b/EmmaSharp/EmmaSharp.csproj @@ -33,17 +33,16 @@ bin\Release\EmmaSharp.XML - - ..\packages\Newtonsoft.Json.9.0.1\lib\net45\Newtonsoft.Json.dll - True + + ..\packages\Newtonsoft.Json.13.0.1\lib\net45\Newtonsoft.Json.dll - - ..\packages\RestSharp.105.2.3\lib\net45\RestSharp.dll - True + + ..\packages\RestSharp.106.11.7\lib\net452\RestSharp.dll + @@ -63,6 +62,7 @@ + @@ -118,6 +118,11 @@ + + + + + diff --git a/EmmaSharp/Methods/Subscriptions.cs b/EmmaSharp/Methods/Subscriptions.cs new file mode 100644 index 0000000..76d7aae --- /dev/null +++ b/EmmaSharp/Methods/Subscriptions.cs @@ -0,0 +1,172 @@ +using EmmaSharp.Models.Subscriptions; +using RestSharp; +using RestSharp.Serializers; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace EmmaSharp +{ + public partial class EmmaApi + { + + /// + /// Get a list of all subscriptions in an account. + /// + /// A list of subscriptions in an account along with related information, including member count and subscription ID. + /// true or false. Returns deleted subscriptions only. Optional, defaults to false. + /// true or false. Returns deleted subscriptions along with active. Optional, defaults to false. + public List GetAccountSubscritpions(bool deletedOnly = false, bool includeDeleted = false) + { + var request = new RestRequest(); + request.Resource = "/{accountId}/subscriptions"; + + if (deletedOnly) + request.AddParameter("deleted_only", deletedOnly); + if (includeDeleted) + request.AddParameter("include_deleted", includeDeleted); + + return Execute>(request); + } + + /// + /// Get detailed information for a specific subscription. + /// + /// Information about a subscription. + /// URL segment for the subscrition ID to query details on + public Subscription GetAccountSubscription(string subscription_id) + { + var request = new RestRequest(); + request.Resource = "/{accountId}/subscriptions/{subscriptionId}"; + request.AddUrlSegment("subscriptionId", subscription_id); + + return Execute(request); + } + + /// + /// Get a list of member IDs for members subscribed to a specific subscription. + /// + /// A list of member IDs. + /// URL segment for the subscrition ID to query details on + /// Pagination: start page. Defaults to first page (e.g. 0). + /// Pagination: end page. Defaults to first page (e.g. 500). + public List GetSubscriptionMembers(string subscription_id, int start = 0, int end = 500) + { + var request = new RestRequest(); + request.Resource = "/{accountId}/subscriptions/{subscriptionId}/members"; + request.AddUrlSegment("subscriptionId", subscription_id); + + return Execute>(request, start, end); + } + + /// + /// Get a list of member IDs for members who have opted out of a specific subscription. + /// + /// A list of member IDs. + /// URL segment for the subscrition ID to query details on + /// Pagination: start page. Defaults to first page (e.g. 0). + /// Pagination: end page. Defaults to first page (e.g. 500). + public List GetOptOutSubscriptionMembers(string subscription_id, int start = 0, int end = 500) + { + var request = new RestRequest(); + request.Resource = "/{accountId}/subscriptions/{subscriptionId}/optouts"; + request.AddUrlSegment("subscriptionId", subscription_id); + + return Execute>(request, start, end); + } + + /// + /// Create a subscription + /// + /// Information about the created subscription, including the subscription ID. + /// Name and descrption of the new subcription to create + public Subscription PostNewSubscription(SubscriptionNew subscription) + { + var request = new RestRequest(Method.POST); + request.Resource = "/{accountId}/subscriptions"; + + request.RequestFormat = DataFormat.Json; + request.JsonSerializer = new EmmaJsonSerializer(); + request.AddBody(subscription); + + return Execute(request); + } + + /// + /// Bulk subscribe members to a subscription using a list of member IDs + /// + /// True if successful. + /// List of memberIDs + /// subscription id + public bool PostBulkMemberSubscrpitions(SubscriptionBulk memberIds, string subscription_id) + { + var request = new RestRequest(Method.POST); + request.Resource = "/{accountId}/subscriptions/{subscriptionId}/members/bulk"; + + request.AddUrlSegment("subscriptionId", subscription_id); + request.RequestFormat = DataFormat.Json; + request.JsonSerializer = new EmmaJsonSerializer(); + request.AddBody(memberIds); + + return Execute(request); + } + + /// + /// Bulk subscribe members to a subscription using the import ID of all members + /// + /// True if successful. + /// import ID to bulk subscribe + /// subscription id + public bool PostBulkImportSubscrpitions(SubscriptionImportBulk importId, string subscription_id) + { + var request = new RestRequest(Method.POST); + request.Resource = "/{accountId}/subscriptions/{subscriptionId}/members/bulk"; + + request.AddUrlSegment("subscriptionId", subscription_id); + request.RequestFormat = DataFormat.Json; + request.JsonSerializer = new EmmaJsonSerializer(); + request.AddBody(importId); + + return Execute(request); + } + + + /// + /// Edit a subscription's name or description. + /// + /// Information about the updated subscription.Limited to name and description. + /// Name and descrpition of the subscription text to update. Visible in the Subscription Center. + /// the id to update + public Subscription EditSubscrpition(SubscriptionNew subscription, string subscription_id) + { + var request = new RestRequest(Method.PUT); + request.Resource = "/{accountId}/subscriptions/{subscriptionId}"; + + request.AddUrlSegment("subscriptionId", subscription_id); + request.RequestFormat = DataFormat.Json; + request.JsonSerializer = new EmmaJsonSerializer(); + request.AddBody(subscription); + + return Execute(request); + } + + /// + /// Delete a subscription. + /// + /// Information about the subscription, including the date and time it was deleted. + /// the id to update + public Subscription DeleteSubscription(string subscription_id) + { + var request = new RestRequest(Method.DELETE); + request.Resource = "/{accountId}/subscriptions/{subscriptionId}"; + + request.AddUrlSegment("subscriptionId", subscription_id); + request.RequestFormat = DataFormat.Json; + request.JsonSerializer = new EmmaJsonSerializer(); + + return Execute(request); + } + } +} diff --git a/EmmaSharp/Models/Subscriptions/Subscription.cs b/EmmaSharp/Models/Subscriptions/Subscription.cs new file mode 100644 index 0000000..a3b3f89 --- /dev/null +++ b/EmmaSharp/Models/Subscriptions/Subscription.cs @@ -0,0 +1,61 @@ +using EmmaSharp.Extensions; +using EmmaSharp.Models.Groups; +using EmmaSharp.Models.Mailings; +using Newtonsoft.Json; +using System; +using System.Collections.Generic; + +namespace EmmaSharp.Models.Subscriptions +{ + + public class Subscription + { + [JsonProperty("account_id")] + public long? AccountId { get; set; } + + [JsonConverter(typeof(EmmaDateConverter))] + [JsonProperty("created_at")] + public DateTime? CreatedAt { get; set; } + + [JsonConverter(typeof(EmmaDateConverter))] + [JsonProperty("deleted_at")] + public DateTime? DeletedAt { get; set; } + + [JsonProperty("description")] + public string Description { get; set; } + + [JsonProperty("import_status")] + public string ImportStatus { get; set; } + + [JsonProperty("member_count")] + public int? MemberCount { get; set; } + + [JsonProperty("modified_at")] + public string ModifiedAt { get; set; } + + [JsonProperty("optout_count")] + public int? OptoutCount { get; set; } + + [JsonConverter(typeof(EmmaDateConverter))] + [JsonProperty("purged_at")] + public DateTime? PurgedAt { get; set; } + + [JsonProperty("settings")] + public Settings Settings { get; set; } + + [JsonProperty("subscription_id")] + public long? SubscriptionId { get; set; } + + [JsonProperty("subscription_name")] + public string SubscriptionName { get; set; } + + [JsonProperty("subscription_order")] + public int? SubscriptionOrder { get; set; } + } + public class Settings + { + [JsonProperty("show_on_default_preference_form")] + public bool ShowOnDefaultPreferenceForm { get; set; } + } + +} diff --git a/EmmaSharp/Models/Subscriptions/SubscriptionBulk.cs b/EmmaSharp/Models/Subscriptions/SubscriptionBulk.cs new file mode 100644 index 0000000..46e0f64 --- /dev/null +++ b/EmmaSharp/Models/Subscriptions/SubscriptionBulk.cs @@ -0,0 +1,17 @@ +using Newtonsoft.Json; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace EmmaSharp.Models.Subscriptions +{ + public class SubscriptionBulk + { + [JsonProperty("member_ids")] + public List MemberIds { get; set; } + + } + +} diff --git a/EmmaSharp/Models/Subscriptions/SubscriptionImportBulk.cs b/EmmaSharp/Models/Subscriptions/SubscriptionImportBulk.cs new file mode 100644 index 0000000..c16c137 --- /dev/null +++ b/EmmaSharp/Models/Subscriptions/SubscriptionImportBulk.cs @@ -0,0 +1,15 @@ +using Newtonsoft.Json; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace EmmaSharp.Models.Subscriptions +{ + public class SubscriptionImportBulk + { + [JsonProperty("import_id")] + public long ImportId { get; set; } + } +} diff --git a/EmmaSharp/Models/Subscriptions/SubscriptionMembers.cs b/EmmaSharp/Models/Subscriptions/SubscriptionMembers.cs new file mode 100644 index 0000000..ca9029b --- /dev/null +++ b/EmmaSharp/Models/Subscriptions/SubscriptionMembers.cs @@ -0,0 +1,16 @@ +using Newtonsoft.Json; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace EmmaSharp.Models.Subscriptions +{ + + public class SubscriptionMembers + { + [JsonProperty("member_id")] + public long MemberId { get; set; } + } +} diff --git a/EmmaSharp/Models/Subscriptions/SubscriptionNew.cs b/EmmaSharp/Models/Subscriptions/SubscriptionNew.cs new file mode 100644 index 0000000..56b9383 --- /dev/null +++ b/EmmaSharp/Models/Subscriptions/SubscriptionNew.cs @@ -0,0 +1,19 @@ +using Newtonsoft.Json; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace EmmaSharp.Models.Subscriptions +{ + + public class SubscriptionNew + { + [JsonProperty("name")] + public string Name { get; set; } + + [JsonProperty("description")] + public string Description { get; set; } + } +} diff --git a/EmmaSharp/packages.config b/EmmaSharp/packages.config index 7b2a573..59299f7 100644 --- a/EmmaSharp/packages.config +++ b/EmmaSharp/packages.config @@ -1,5 +1,5 @@  - - + + \ No newline at end of file