Skip to content

Commit da050ec

Browse files
authored
Add GetAttributes and GetAttributesAsync API methods (#14)
* Add GetAttributes and GetAttributesAsync API methods * Separate project versioning
1 parent bba9785 commit da050ec

File tree

5 files changed

+88
-5
lines changed

5 files changed

+88
-5
lines changed

Source/Adobe.Target.Client/Adobe.Target.Client.csproj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
<Product>Adobe.Target.Client</Product>
99
<Description>Adobe Target .NET SDK - https://adobetarget-sdks.gitbook.io/docs/sdk-reference-guides/dotnet-sdk</Description>
1010
<PackageTags>adobe;target;target-sdk;target-client</PackageTags>
11+
<MinVerTagPrefix>client-</MinVerTagPrefix>
1112
</PropertyGroup>
1213

1314
<ItemGroup Label="Project References">

Source/Adobe.Target.Client/ITargetClient.cs

Lines changed: 20 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -30,27 +30,43 @@ public interface ITargetClient
3030
/// </summary>
3131
/// <param name="request">Target Delivery Request</param>
3232
/// <returns>Target Delivery Response</returns>
33-
public TargetDeliveryResponse GetOffers(TargetDeliveryRequest request);
33+
TargetDeliveryResponse GetOffers(TargetDeliveryRequest request);
3434

3535
/// <summary>
3636
/// Get Offers Async
3737
/// </summary>
3838
/// <param name="request">Target Delivery Request</param>
3939
/// <returns>Target Delivery Response Task</returns>
40-
public Task<TargetDeliveryResponse> GetOffersAsync(TargetDeliveryRequest request);
40+
Task<TargetDeliveryResponse> GetOffersAsync(TargetDeliveryRequest request);
4141

4242
/// <summary>
4343
/// Send Notifications
4444
/// </summary>
4545
/// <param name="request">Target Delivery Request</param>
4646
/// <returns>Target Delivery Response</returns>
47-
public TargetDeliveryResponse SendNotifications(TargetDeliveryRequest request);
47+
TargetDeliveryResponse SendNotifications(TargetDeliveryRequest request);
4848

4949
/// <summary>
5050
/// Get Offers Async
5151
/// </summary>
5252
/// <param name="request">Target Delivery Request</param>
5353
/// <returns>Target Delivery Response Task</returns>
54-
public Task<TargetDeliveryResponse> SendNotificationsAsync(TargetDeliveryRequest request);
54+
Task<TargetDeliveryResponse> SendNotificationsAsync(TargetDeliveryRequest request);
55+
56+
/// <summary>
57+
/// Makes a getOffers() call and converts all returned JSON offers into Attributes
58+
/// </summary>
59+
/// <param name="request">optional TargetDeliveryRequest used to set specific request fields. If null, one will be generated</param>
60+
/// <param name="mboxes">Mbox names for attribute retrieval</param>
61+
/// <returns>Requested Target attributes</returns>
62+
TargetAttributes GetAttributes(TargetDeliveryRequest request, params string[] mboxes);
63+
64+
/// <summary>
65+
/// Makes a getOffers() call and converts all returned JSON offers into Attributes
66+
/// </summary>
67+
/// <param name="request">optional TargetDeliveryRequest used to set specific request fields. If null, one will be generated</param>
68+
/// <param name="mboxes">Mbox names for attribute retrieval</param>
69+
/// <returns>Task returning requested Target attributes</returns>
70+
Task<TargetAttributes> GetAttributesAsync(TargetDeliveryRequest request, params string[] mboxes);
5571
}
5672
}

Source/Adobe.Target.Client/TargetClient.cs

Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@
1010
*/
1111
namespace Adobe.Target.Client
1212
{
13+
using System.Collections.Generic;
14+
using System.Linq;
1315
using System.Threading.Tasks;
1416
using Adobe.Target.Client.Model;
1517
using Adobe.Target.Client.Service;
@@ -107,6 +109,69 @@ public Task<TargetDeliveryResponse> SendNotificationsAsync(TargetDeliveryRequest
107109
return this.targetService.ExecuteRequestAsync(request);
108110
}
109111

112+
/// <inheritdoc />
113+
public TargetAttributes GetAttributes(TargetDeliveryRequest request, params string[] mboxes)
114+
{
115+
var response = this.GetOffers(AddMBoxesToRequest(request, mboxes));
116+
return new TargetAttributes(response);
117+
}
118+
119+
/// <inheritdoc />
120+
public async Task<TargetAttributes> GetAttributesAsync(TargetDeliveryRequest request, params string[] mboxes)
121+
{
122+
var response = await this.GetOffersAsync(AddMBoxesToRequest(request, mboxes));
123+
return new TargetAttributes(response);
124+
}
125+
126+
private static TargetDeliveryRequest AddMBoxesToRequest(TargetDeliveryRequest request, params string[] mboxes)
127+
{
128+
if (request?.DeliveryRequest == null)
129+
{
130+
request = new TargetDeliveryRequest.Builder()
131+
.SetDecisioningMethod(DecisioningMethod.Hybrid)
132+
.SetContext(new Context(ChannelType.Web))
133+
.Build();
134+
}
135+
136+
if (mboxes == null || mboxes.Length == 0)
137+
{
138+
return request;
139+
}
140+
141+
var existingMboxNames = new HashSet<string>();
142+
var index = 0;
143+
144+
var deliveryRequest = request.DeliveryRequest;
145+
var prefetchMboxes = deliveryRequest.Prefetch?.Mboxes ?? new List<MboxRequest>();
146+
existingMboxNames.UnionWith(prefetchMboxes.Select(mbox => mbox.Name));
147+
148+
var executeMboxes = deliveryRequest.Execute?.Mboxes ?? new List<MboxRequest>();
149+
executeMboxes.ForEach(mbox =>
150+
{
151+
if (mbox.Index >= index)
152+
{
153+
index = mbox.Index + 1;
154+
}
155+
156+
existingMboxNames.Add(mbox.Name);
157+
});
158+
159+
deliveryRequest.Execute ??= new ExecuteRequest();
160+
deliveryRequest.Execute.Mboxes ??= new List<MboxRequest>();
161+
162+
foreach (var mbox in mboxes)
163+
{
164+
if (existingMboxNames.Contains(mbox))
165+
{
166+
continue;
167+
}
168+
169+
deliveryRequest.Execute.Mboxes.Add(new MboxRequest(name: mbox, index: index++));
170+
}
171+
172+
return request;
173+
}
174+
110175
private void UpdatePropertyToken(TargetDeliveryRequest request)
111176
{
112177
var property = request.DeliveryRequest.Property;

Source/Adobe.Target.Client/Util/TargetConstants.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ public static class TargetConstants
1818
/// <summary>
1919
/// SDK Version
2020
/// </summary>
21-
public const string SdkVersion = "1.0.0";
21+
public const string SdkVersion = "1.0.1";
2222

2323
/// <summary>
2424
/// Mbox cookie name

Source/Adobe.Target.Delivery/Adobe.Target.Delivery.csproj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
<Product>Adobe.Target.Delivery</Product>
99
<Description>Target .NET Delivery API - https://developers.adobetarget.com/api/delivery-api/</Description>
1010
<PackageTags>adobe;target;target-delivery;target-delivery-api</PackageTags>
11+
<MinVerTagPrefix>delivery-</MinVerTagPrefix>
1112
</PropertyGroup>
1213

1314
<ItemGroup>

0 commit comments

Comments
 (0)