|
40 | 40 | import org.prebid.server.proto.openrtb.ext.request.ExtRequestPrebidDataEidPermissions; |
41 | 41 | import org.prebid.server.util.HttpUtil; |
42 | 42 | import org.prebid.server.util.ListUtil; |
| 43 | +import org.prebid.server.util.StreamUtil; |
43 | 44 | import org.prebid.server.vertx.httpclient.HttpClient; |
44 | 45 | import org.prebid.server.vertx.httpclient.model.HttpClientResponse; |
45 | 46 |
|
| 47 | +import java.util.Collections; |
46 | 48 | import java.util.List; |
47 | 49 | import java.util.Objects; |
48 | 50 | import java.util.Optional; |
| 51 | +import java.util.Set; |
49 | 52 | import java.util.concurrent.ThreadLocalRandom; |
| 53 | +import java.util.stream.Collectors; |
50 | 54 | import java.util.stream.Stream; |
51 | 55 |
|
52 | 56 | public class LiveIntentOmniChannelIdentityProcessedAuctionRequestHook implements ProcessedAuctionRequestHook { |
@@ -198,47 +202,58 @@ private AuctionRequestPayload updatedPayload(AuctionRequestPayload requestPayloa |
198 | 202 | } |
199 | 203 |
|
200 | 204 | private BidRequest updateAllowedBidders(BidRequest bidRequest, List<Eid> resolvedEids) { |
201 | | - if (this.targetBidders.isEmpty()) { |
| 205 | + if (targetBidders.isEmpty()) { |
202 | 206 | return bidRequest; |
203 | 207 | } |
204 | 208 |
|
205 | | - final List<String> resolvedSources = resolvedEids.stream().map(Eid::getSource).distinct().toList(); |
206 | | - final ExtRequest requestExt = bidRequest.getExt(); |
207 | | - final ExtRequestPrebid prebid = requestExt == null ? null : requestExt.getPrebid(); |
208 | | - final ExtRequestPrebidData prebidData = prebid != null |
209 | | - ? prebid.getData() |
210 | | - : null; |
211 | | - final List<ExtRequestPrebidDataEidPermissions> eidPermissions = prebidData == null |
212 | | - ? List.of() |
213 | | - : CollectionUtils.emptyIfNull(prebidData.getEidPermissions()).stream().toList(); |
214 | | - final Stream<ExtRequestPrebidDataEidPermissions> existingPermissions = eidPermissions |
215 | | - .stream() |
216 | | - .filter(e -> resolvedSources.contains(e.getSource())); |
217 | | - |
218 | | - final Stream<String> missingSources = resolvedSources.stream() |
219 | | - .filter(src -> eidPermissions.stream().noneMatch(e -> e.getSource().equals(src))); |
220 | | - |
221 | | - final Stream<ExtRequestPrebidDataEidPermissions> additionalPermissions = eidPermissions.stream() |
222 | | - .filter(e -> !resolvedSources.contains(e.getSource())); |
223 | | - |
224 | | - final List<ExtRequestPrebidDataEidPermissions> updatedPermissions = Stream.of( |
225 | | - additionalPermissions, |
226 | | - missingSources.map(src -> ExtRequestPrebidDataEidPermissions.of(src, this.targetBidders)), |
227 | | - existingPermissions.map(p -> ExtRequestPrebidDataEidPermissions.of( |
228 | | - p.getSource(), |
229 | | - Stream.concat(p.getBidders().stream(), this.targetBidders.stream()) |
230 | | - .distinct().toList()))) |
231 | | - .flatMap(s -> s).toList(); |
232 | | - |
233 | | - final List<String> bidders = prebidData == null ? this.targetBidders : CollectionUtils.union(this.targetBidders, |
234 | | - CollectionUtils.emptyIfNull(prebidData.getBidders())).stream().distinct().toList(); |
235 | | - |
236 | | - final ExtRequestPrebidData updatedPrebidData = ExtRequestPrebidData.of(bidders, updatedPermissions); |
237 | | - final ExtRequestPrebid updatedExtPrebid = prebid == null |
238 | | - ? ExtRequestPrebid.builder().data(updatedPrebidData).build() |
239 | | - : prebid.toBuilder().data(updatedPrebidData).build(); |
240 | | - |
241 | | - return bidRequest.toBuilder().ext(ExtRequest.of(updatedExtPrebid)).build(); |
| 209 | + final ExtRequest ext = bidRequest.getExt(); |
| 210 | + final ExtRequestPrebid extPrebid = ext != null ? ext.getPrebid() : null; |
| 211 | + final ExtRequestPrebidData extPrebidData = extPrebid != null ? extPrebid.getData() : null; |
| 212 | + |
| 213 | + final ExtRequestPrebid updatedExtPrebid = Optional.ofNullable(extPrebid) |
| 214 | + .map(ExtRequestPrebid::toBuilder) |
| 215 | + .orElseGet(ExtRequestPrebid::builder) |
| 216 | + .data(updatePrebidData(extPrebidData, resolvedEids)) |
| 217 | + .build(); |
| 218 | + |
| 219 | + final ExtRequest updatedExtRequest = ExtRequest.of(updatedExtPrebid); |
| 220 | + if (ext != null) { |
| 221 | + mapper.fillExtension(updatedExtRequest, ext.getProperties()); |
| 222 | + } |
| 223 | + |
| 224 | + return bidRequest.toBuilder().ext(updatedExtRequest).build(); |
| 225 | + } |
| 226 | + |
| 227 | + private ExtRequestPrebidData updatePrebidData(ExtRequestPrebidData extPrebidData, List<Eid> resolvedEids) { |
| 228 | + final List<String> prebidDataBidders = extPrebidData != null ? extPrebidData.getBidders() : null; |
| 229 | + final List<String> updatedPrebidDataBidders = prebidDataBidders != null |
| 230 | + ? (List<String>) CollectionUtils.union(targetBidders, prebidDataBidders) |
| 231 | + : targetBidders; |
| 232 | + |
| 233 | + final Set<String> resolvedSources = resolvedEids.stream().map(Eid::getSource).collect(Collectors.toSet()); |
| 234 | + |
| 235 | + final List<ExtRequestPrebidDataEidPermissions> initialPermissions = Optional.ofNullable(extPrebidData) |
| 236 | + .map(ExtRequestPrebidData::getEidPermissions) |
| 237 | + .orElse(Collections.emptyList()); |
| 238 | + final List<ExtRequestPrebidDataEidPermissions> updatedPermissions = Stream.concat( |
| 239 | + initialPermissions.stream() |
| 240 | + .map(permission -> updateEidPermission(permission, resolvedSources)), |
| 241 | + resolvedSources.stream() |
| 242 | + .map(source -> ExtRequestPrebidDataEidPermissions.of(source, targetBidders))) |
| 243 | + .filter(StreamUtil.distinctBy(ExtRequestPrebidDataEidPermissions::getSource)) |
| 244 | + .toList(); |
| 245 | + |
| 246 | + return ExtRequestPrebidData.of(updatedPrebidDataBidders, updatedPermissions); |
| 247 | + } |
| 248 | + |
| 249 | + private ExtRequestPrebidDataEidPermissions updateEidPermission(ExtRequestPrebidDataEidPermissions permission, |
| 250 | + Set<String> resolvedSources) { |
| 251 | + |
| 252 | + return resolvedSources.contains(permission.getSource()) |
| 253 | + ? ExtRequestPrebidDataEidPermissions.of( |
| 254 | + permission.getSource(), |
| 255 | + (List<String>) CollectionUtils.union(permission.getBidders(), targetBidders)) |
| 256 | + : permission; |
242 | 257 | } |
243 | 258 |
|
244 | 259 | @Override |
|
0 commit comments