|
10 | 10 | */ |
11 | 11 | namespace Adobe.Target.Client |
12 | 12 | { |
| 13 | + using System.Collections.Generic; |
| 14 | + using System.Linq; |
13 | 15 | using System.Threading.Tasks; |
14 | 16 | using Adobe.Target.Client.Model; |
15 | 17 | using Adobe.Target.Client.Service; |
@@ -107,6 +109,69 @@ public Task<TargetDeliveryResponse> SendNotificationsAsync(TargetDeliveryRequest |
107 | 109 | return this.targetService.ExecuteRequestAsync(request); |
108 | 110 | } |
109 | 111 |
|
| 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 | + |
110 | 175 | private void UpdatePropertyToken(TargetDeliveryRequest request) |
111 | 176 | { |
112 | 177 | var property = request.DeliveryRequest.Property; |
|
0 commit comments