From 496b3797605c7f374ffbac2c3f435c563f26894d Mon Sep 17 00:00:00 2001 From: Joseph Namey Date: Tue, 2 Feb 2021 11:00:34 -0500 Subject: [PATCH 1/5] Added subscription objects --- EmmaSharp/EmmaSharp.csproj | 4 ++ .../Models/Subscriptions/Subscription.cs | 61 +++++++++++++++++++ .../Models/Subscriptions/SubscriptionBulk.cs | 15 +++++ .../Subscriptions/SubscriptionMembers.cs | 19 ++++++ .../Models/Subscriptions/SubscriptionNew.cs | 19 ++++++ 5 files changed, 118 insertions(+) create mode 100644 EmmaSharp/Models/Subscriptions/Subscription.cs create mode 100644 EmmaSharp/Models/Subscriptions/SubscriptionBulk.cs create mode 100644 EmmaSharp/Models/Subscriptions/SubscriptionMembers.cs create mode 100644 EmmaSharp/Models/Subscriptions/SubscriptionNew.cs diff --git a/EmmaSharp/EmmaSharp.csproj b/EmmaSharp/EmmaSharp.csproj index 056826e..1349332 100644 --- a/EmmaSharp/EmmaSharp.csproj +++ b/EmmaSharp/EmmaSharp.csproj @@ -118,6 +118,10 @@ + + + + diff --git a/EmmaSharp/Models/Subscriptions/Subscription.cs b/EmmaSharp/Models/Subscriptions/Subscription.cs new file mode 100644 index 0000000..eaa3cd3 --- /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.Triggers +{ + + public class Subscription + { + [JsonProperty("account_id")] + public int 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 int 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..140a75b --- /dev/null +++ b/EmmaSharp/Models/Subscriptions/SubscriptionBulk.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 SubscriptionBulk + { + [JsonProperty("member_ids")] + public List MemberIds { get; set; } + } +} diff --git a/EmmaSharp/Models/Subscriptions/SubscriptionMembers.cs b/EmmaSharp/Models/Subscriptions/SubscriptionMembers.cs new file mode 100644 index 0000000..002a93c --- /dev/null +++ b/EmmaSharp/Models/Subscriptions/SubscriptionMembers.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 SubscriptionMembers + { + public List MemberIds { get; set; } + } + public class Individual + { + [JsonProperty("member_id")] + public int 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; } + } +} From 13241f38fc409325288b9ef6652eae679e83d7be Mon Sep 17 00:00:00 2001 From: Joseph Namey Date: Tue, 2 Feb 2021 11:36:39 -0500 Subject: [PATCH 2/5] created all subscrpition methods --- EmmaSharp/EmmaSharp.csproj | 1 + EmmaSharp/Methods/Subscriptions.cs | 153 ++++++++++++++++++ .../Models/Subscriptions/Subscription.cs | 2 +- .../Subscriptions/SubscriptionMembers.cs | 5 +- 4 files changed, 156 insertions(+), 5 deletions(-) create mode 100644 EmmaSharp/Methods/Subscriptions.cs diff --git a/EmmaSharp/EmmaSharp.csproj b/EmmaSharp/EmmaSharp.csproj index 1349332..deb10d4 100644 --- a/EmmaSharp/EmmaSharp.csproj +++ b/EmmaSharp/EmmaSharp.csproj @@ -63,6 +63,7 @@ + diff --git a/EmmaSharp/Methods/Subscriptions.cs b/EmmaSharp/Methods/Subscriptions.cs new file mode 100644 index 0000000..edeec62 --- /dev/null +++ b/EmmaSharp/Methods/Subscriptions.cs @@ -0,0 +1,153 @@ +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./param> + 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 GetAccountSubscritpion(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 PostBulkSubscrpitions(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); + } + + + /// + /// Edit a subscription's name or description. + /// + /// Information about the updated subscription. + /// 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 DeleteSubscrpition(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 index eaa3cd3..f6f1745 100644 --- a/EmmaSharp/Models/Subscriptions/Subscription.cs +++ b/EmmaSharp/Models/Subscriptions/Subscription.cs @@ -5,7 +5,7 @@ using System; using System.Collections.Generic; -namespace EmmaSharp.Models.Triggers +namespace EmmaSharp.Models.Subscriptions { public class Subscription diff --git a/EmmaSharp/Models/Subscriptions/SubscriptionMembers.cs b/EmmaSharp/Models/Subscriptions/SubscriptionMembers.cs index 002a93c..98928ab 100644 --- a/EmmaSharp/Models/Subscriptions/SubscriptionMembers.cs +++ b/EmmaSharp/Models/Subscriptions/SubscriptionMembers.cs @@ -7,11 +7,8 @@ namespace EmmaSharp.Models.Subscriptions { + public class SubscriptionMembers - { - public List MemberIds { get; set; } - } - public class Individual { [JsonProperty("member_id")] public int MemberId { get; set; } From 157eb723b369febb4647c81e1c9cb01198e776d8 Mon Sep 17 00:00:00 2001 From: Joseph Namey Date: Tue, 2 Feb 2021 13:41:45 -0500 Subject: [PATCH 3/5] Tested all subscription endpoints and responses from accuracy --- EmmaSharp/Methods/Subscriptions.cs | 8 ++++---- EmmaSharp/Models/Subscriptions/Subscription.cs | 10 +++++----- EmmaSharp/Models/Subscriptions/SubscriptionBulk.cs | 2 +- EmmaSharp/Models/Subscriptions/SubscriptionMembers.cs | 2 +- 4 files changed, 11 insertions(+), 11 deletions(-) diff --git a/EmmaSharp/Methods/Subscriptions.cs b/EmmaSharp/Methods/Subscriptions.cs index edeec62..3d9fc02 100644 --- a/EmmaSharp/Methods/Subscriptions.cs +++ b/EmmaSharp/Methods/Subscriptions.cs @@ -36,7 +36,7 @@ public List GetAccountSubscritpions(bool deletedOnly = false, bool /// /// Information about a subscription. /// URL segment for the subscrition ID to query details on - public Subscription GetAccountSubscritpion(string subscription_id) + public Subscription GetAccountSubscription(string subscription_id) { var request = new RestRequest(); request.Resource = "/{accountId}/subscriptions/{subscriptionId}"; @@ -100,7 +100,7 @@ public Subscription PostNewSubscription(SubscriptionNew subscription) /// True if successful. /// List of memberIDs /// subscription id - public bool PostBulkSubscrpitions(SubscriptionBulk memberIds, string subscription_id) + public bool PostBulkMemberSubscrpitions(SubscriptionBulk memberIds, string subscription_id) { var request = new RestRequest(Method.POST); request.Resource = "/{accountId}/subscriptions/{subscriptionId}/members/bulk"; @@ -117,7 +117,7 @@ public bool PostBulkSubscrpitions(SubscriptionBulk memberIds, string subscriptio /// /// Edit a subscription's name or description. /// - /// Information about the updated subscription. + /// 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) @@ -138,7 +138,7 @@ public Subscription EditSubscrpition(SubscriptionNew subscription, string subscr /// /// Information about the subscription, including the date and time it was deleted. /// the id to update - public Subscription DeleteSubscrpition(string subscription_id) + public Subscription DeleteSubscription(string subscription_id) { var request = new RestRequest(Method.DELETE); request.Resource = "/{accountId}/subscriptions/{subscriptionId}"; diff --git a/EmmaSharp/Models/Subscriptions/Subscription.cs b/EmmaSharp/Models/Subscriptions/Subscription.cs index f6f1745..a3b3f89 100644 --- a/EmmaSharp/Models/Subscriptions/Subscription.cs +++ b/EmmaSharp/Models/Subscriptions/Subscription.cs @@ -11,7 +11,7 @@ namespace EmmaSharp.Models.Subscriptions public class Subscription { [JsonProperty("account_id")] - public int AccountId { get; set; } + public long? AccountId { get; set; } [JsonConverter(typeof(EmmaDateConverter))] [JsonProperty("created_at")] @@ -28,13 +28,13 @@ public class Subscription public string ImportStatus { get; set; } [JsonProperty("member_count")] - public int MemberCount { get; set; } + public int? MemberCount { get; set; } [JsonProperty("modified_at")] public string ModifiedAt { get; set; } [JsonProperty("optout_count")] - public int OptoutCount { get; set; } + public int? OptoutCount { get; set; } [JsonConverter(typeof(EmmaDateConverter))] [JsonProperty("purged_at")] @@ -44,13 +44,13 @@ public class Subscription public Settings Settings { get; set; } [JsonProperty("subscription_id")] - public int SubscriptionId { get; set; } + public long? SubscriptionId { get; set; } [JsonProperty("subscription_name")] public string SubscriptionName { get; set; } [JsonProperty("subscription_order")] - public int SubscriptionOrder { get; set; } + public int? SubscriptionOrder { get; set; } } public class Settings { diff --git a/EmmaSharp/Models/Subscriptions/SubscriptionBulk.cs b/EmmaSharp/Models/Subscriptions/SubscriptionBulk.cs index 140a75b..facc5d6 100644 --- a/EmmaSharp/Models/Subscriptions/SubscriptionBulk.cs +++ b/EmmaSharp/Models/Subscriptions/SubscriptionBulk.cs @@ -10,6 +10,6 @@ namespace EmmaSharp.Models.Subscriptions public class SubscriptionBulk { [JsonProperty("member_ids")] - public List MemberIds { get; set; } + public List MemberIds { get; set; } } } diff --git a/EmmaSharp/Models/Subscriptions/SubscriptionMembers.cs b/EmmaSharp/Models/Subscriptions/SubscriptionMembers.cs index 98928ab..ca9029b 100644 --- a/EmmaSharp/Models/Subscriptions/SubscriptionMembers.cs +++ b/EmmaSharp/Models/Subscriptions/SubscriptionMembers.cs @@ -11,6 +11,6 @@ namespace EmmaSharp.Models.Subscriptions public class SubscriptionMembers { [JsonProperty("member_id")] - public int MemberId { get; set; } + public long MemberId { get; set; } } } From bf8710f833888b9e848eda8bb73df98a099c24c0 Mon Sep 17 00:00:00 2001 From: Joseph Namey Date: Thu, 4 Mar 2021 12:31:22 -0500 Subject: [PATCH 4/5] Added bulk import to subscription via subscription id --- EmmaSharp/Methods/Subscriptions.cs | 19 +++++++++++++++++++ .../Models/Subscriptions/SubscriptionBulk.cs | 2 ++ .../Subscriptions/SubscriptionImportBulk.cs | 15 +++++++++++++++ 3 files changed, 36 insertions(+) create mode 100644 EmmaSharp/Models/Subscriptions/SubscriptionImportBulk.cs diff --git a/EmmaSharp/Methods/Subscriptions.cs b/EmmaSharp/Methods/Subscriptions.cs index 3d9fc02..14460d2 100644 --- a/EmmaSharp/Methods/Subscriptions.cs +++ b/EmmaSharp/Methods/Subscriptions.cs @@ -113,6 +113,25 @@ public bool PostBulkMemberSubscrpitions(SubscriptionBulk memberIds, string subsc 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. diff --git a/EmmaSharp/Models/Subscriptions/SubscriptionBulk.cs b/EmmaSharp/Models/Subscriptions/SubscriptionBulk.cs index facc5d6..46e0f64 100644 --- a/EmmaSharp/Models/Subscriptions/SubscriptionBulk.cs +++ b/EmmaSharp/Models/Subscriptions/SubscriptionBulk.cs @@ -11,5 +11,7 @@ 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; } + } +} From 9f0ffbd1333a9dfe734a34945c1515e3493ad104 Mon Sep 17 00:00:00 2001 From: Greg Aluise Date: Wed, 30 Jun 2021 18:42:02 -0400 Subject: [PATCH 5/5] Updated dependecies + fixed typo + added src file Updated the dependencies to the latest versions and added SubscriptionImportBulk.cs to the csproj file. Also corrected typo on line 22 of Methods/Subscriptions.cs... --- EmmaSharp/EmmaSharp.csproj | 12 ++++++------ EmmaSharp/Methods/Subscriptions.cs | 2 +- EmmaSharp/packages.config | 4 ++-- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/EmmaSharp/EmmaSharp.csproj b/EmmaSharp/EmmaSharp.csproj index deb10d4..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 + @@ -121,6 +120,7 @@ + diff --git a/EmmaSharp/Methods/Subscriptions.cs b/EmmaSharp/Methods/Subscriptions.cs index 14460d2..76d7aae 100644 --- a/EmmaSharp/Methods/Subscriptions.cs +++ b/EmmaSharp/Methods/Subscriptions.cs @@ -17,7 +17,7 @@ public partial class EmmaApi /// /// 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./param> + /// 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(); 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