From 6dccff1e452491fdae245a709960f52da0d3e15c Mon Sep 17 00:00:00 2001 From: Von Villafuerte Date: Tue, 26 Feb 2019 01:19:57 +0800 Subject: [PATCH 1/3] Add support for with_activity_data when retrieving reactions --- src/stream-net/FeedFilter.cs | 18 +++++++- src/stream-net/Reactions.cs | 81 ++++++++++++++++++++++++++++++++---- 2 files changed, 91 insertions(+), 8 deletions(-) diff --git a/src/stream-net/FeedFilter.cs b/src/stream-net/FeedFilter.cs index 89dd047..26c6dfb 100644 --- a/src/stream-net/FeedFilter.cs +++ b/src/stream-net/FeedFilter.cs @@ -1,5 +1,6 @@ using Stream.Rest; using System.Collections.Generic; +using System.Linq; namespace Stream { @@ -10,7 +11,8 @@ internal enum OpType id_gte, id_gt, id_lte, - id_lt + id_lt, + with_activity_data } internal class OpEntry @@ -32,6 +34,12 @@ private FeedFilter() { } + public FeedFilter WithActivityData() + { + _ops.Add(new OpEntry(OpType.with_activity_data, "true")); + return this; + } + public FeedFilter IdGreaterThan(string id) { _ops.Add(new OpEntry(OpType.id_gt, id)); @@ -64,6 +72,14 @@ internal void Apply(RestRequest request) }); } + internal bool IncludesActivityData + { + get + { + return _ops.Any(x => x.Type == OpType.with_activity_data); + } + } + #region starts public static FeedFilter Where() diff --git a/src/stream-net/Reactions.cs b/src/stream-net/Reactions.cs index 5838557..3dbf10b 100644 --- a/src/stream-net/Reactions.cs +++ b/src/stream-net/Reactions.cs @@ -3,13 +3,20 @@ using Stream.Rest; using System; using System.Collections.Generic; -using System.Linq; using System.Threading.Tasks; namespace Stream { using ReactionFilter = FeedFilter; + public class ReactionsWithActivity + { + [JsonProperty(NullValueHandling = NullValueHandling.Ignore, PropertyName = "results")] + public IEnumerable Reactions { get; internal set; } + + public EnrichedActivity Activity { get; internal set; } + } + public class Reaction { [JsonProperty(NullValueHandling = NullValueHandling.Ignore, PropertyName = "id")] @@ -65,6 +72,13 @@ public ReactionFiltering WithFilter(ReactionFilter filter) return this; } + internal ReactionFiltering WithActivityData() + { + _filter = (_filter == null) ? ReactionFilter.Where().WithActivityData() : _filter.WithActivityData(); + + return this; + } + internal void Apply(RestRequest request) { request.AddQueryParameter("limit", _limit.ToString()); @@ -74,6 +88,14 @@ internal void Apply(RestRequest request) _filter.Apply(request); } + internal bool IncludesActivityData + { + get + { + return _filter.IncludesActivityData; + } + } + public static ReactionFiltering Default { get @@ -142,7 +164,21 @@ private class ReactionsFilterResponse { [JsonProperty(NullValueHandling = NullValueHandling.Ignore, PropertyName = "results")] public IEnumerable Reactions { get; internal set; } - } + + internal static EnrichedActivity GetActivity(string json) + { + JObject obj = JObject.Parse(json); + foreach (var prop in obj.Properties()) + { + if (prop.Name == "activity") + { + return EnrichedActivity.FromJson((JObject)prop.Value); + } + } + + return null; + } + } internal Reactions(StreamClient client) { @@ -193,20 +229,51 @@ public async Task Get(string reactionID) public async Task> Filter(ReactionFiltering filtering, ReactionPagination pagination) { - var urlPath = pagination.GetPath(); - var request = this._client.BuildJWTAppRequest($"reaction/{urlPath}", HttpMethod.GET); - filtering.Apply(request); + //var urlPath = pagination.GetPath(); + //var request = this._client.BuildJWTAppRequest($"reaction/{urlPath}", HttpMethod.GET); + //filtering.Apply(request); - var response = await this._client.MakeRequest(request); + //var response = await this._client.MakeRequest(request); + var response = await FilterHelper(filtering, pagination); if (response.StatusCode == System.Net.HttpStatusCode.OK) - { + { return JsonConvert.DeserializeObject(response.Content).Reactions; } throw StreamException.FromResponse(response); } + public async Task FilterWithActivityData(ReactionFiltering filtering, ReactionPagination pagination) + { + var response = await FilterHelper(filtering.WithActivityData(), pagination); + + if (response.StatusCode == System.Net.HttpStatusCode.OK) + { + var reactions = JsonConvert.DeserializeObject(response.Content).Reactions; + var activity = ReactionsFilterResponse.GetActivity(response.Content); + + return new ReactionsWithActivity + { + Reactions = reactions, + Activity = activity + }; + } + + throw StreamException.FromResponse(response); + } + + private async Task FilterHelper(ReactionFiltering filtering, ReactionPagination pagination) + { + var urlPath = pagination.GetPath(); + var request = this._client.BuildJWTAppRequest($"reaction/{urlPath}", HttpMethod.GET); + filtering.Apply(request); + + var response = await this._client.MakeRequest(request); + + return response; + } + public async Task Update(string reactionID, IDictionary data = null, IEnumerable targetFeeds = null) { var r = new Reaction() From aba3a2e7cb686e404c034e4a41cab10f79dc4016 Mon Sep 17 00:00:00 2001 From: Von Villafuerte Date: Thu, 14 Mar 2019 18:09:10 +0800 Subject: [PATCH 2/3] Remove commented (refactored) code in Reactions --- src/stream-net/Reactions.cs | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/src/stream-net/Reactions.cs b/src/stream-net/Reactions.cs index 3dbf10b..5a48675 100644 --- a/src/stream-net/Reactions.cs +++ b/src/stream-net/Reactions.cs @@ -228,12 +228,7 @@ public async Task Get(string reactionID) } public async Task> Filter(ReactionFiltering filtering, ReactionPagination pagination) - { - //var urlPath = pagination.GetPath(); - //var request = this._client.BuildJWTAppRequest($"reaction/{urlPath}", HttpMethod.GET); - //filtering.Apply(request); - - //var response = await this._client.MakeRequest(request); + { var response = await FilterHelper(filtering, pagination); if (response.StatusCode == System.Net.HttpStatusCode.OK) From a996ac1e6d98332c892262a3667a1954ca1634c7 Mon Sep 17 00:00:00 2001 From: Von Villafuerte Date: Thu, 14 Mar 2019 18:09:43 +0800 Subject: [PATCH 3/3] Add test for filtering Reactions with Activity data --- src/stream-net-tests/IntegrationTests.cs | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/stream-net-tests/IntegrationTests.cs b/src/stream-net-tests/IntegrationTests.cs index d9d5a06..94eaa47 100644 --- a/src/stream-net-tests/IntegrationTests.cs +++ b/src/stream-net-tests/IntegrationTests.cs @@ -2061,6 +2061,11 @@ public async Task TestReactionPagination() reactionsByActivity = await this._client.Reactions.Filter(filter.WithLimit(1), pagination); Assert.AreEqual(1, reactionsByActivity.Count()); + //with data + var reactionsByActivityWithData = await this._client.Reactions.FilterWithActivityData(filter.WithLimit(1), pagination); + Assert.AreEqual(1, reactionsByActivity.Count()); + Assert.AreEqual(data, reactionsByActivity.FirstOrDefault().Data); + // user id filter = ReactionFiltering.Default; pagination = ReactionPagination.By.UserID(userId);