Skip to content

Commit dd8194e

Browse files
author
ilya
committed
DATA-53829: Fixing PR issues
1 parent d15ed9e commit dd8194e

2 files changed

Lines changed: 95 additions & 64 deletions

File tree

extra/modules/live-intent-omni-channel-identity/src/main/java/org/prebid/server/hooks/modules/liveintent/omni/channel/identity/v1/hooks/LiveIntentOmniChannelIdentityProcessedAuctionRequestHook.java

Lines changed: 79 additions & 59 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
import org.apache.commons.collections4.CollectionUtils;
1111
import org.apache.commons.collections4.ListUtils;
1212
import org.apache.commons.collections4.SetUtils;
13+
import org.apache.commons.lang3.StringUtils;
1314
import org.prebid.server.activity.Activity;
1415
import org.prebid.server.activity.ComponentType;
1516
import org.prebid.server.activity.infrastructure.ActivityInfrastructure;
@@ -23,7 +24,6 @@
2324
import org.prebid.server.hooks.execution.v1.analytics.ResultImpl;
2425
import org.prebid.server.hooks.execution.v1.analytics.TagsImpl;
2526
import org.prebid.server.hooks.execution.v1.auction.AuctionRequestPayloadImpl;
26-
import org.prebid.server.hooks.modules.liveintent.omni.channel.identity.model.FullSource;
2727
import org.prebid.server.hooks.modules.liveintent.omni.channel.identity.model.IdResResponse;
2828
import org.prebid.server.hooks.modules.liveintent.omni.channel.identity.model.config.LiveIntentOmniChannelProperties;
2929
import org.prebid.server.hooks.modules.liveintent.omni.channel.identity.v1.LiveIntentOmniChannelIdentityModule;
@@ -45,7 +45,6 @@
4545
import org.prebid.server.vertx.httpclient.HttpClient;
4646
import org.prebid.server.vertx.httpclient.model.HttpClientResponse;
4747

48-
import java.util.Collections;
4948
import java.util.List;
5049
import java.util.Objects;
5150
import java.util.Optional;
@@ -166,10 +165,17 @@ private MultiMap headers() {
166165

167166
private IdResResponse processResponse(HttpClientResponse response) {
168167
final IdResResponse res = mapper.decodeValue(response.getBody(), IdResResponse.class);
169-
final List<Eid> eids = res.getEids().stream()
168+
final List<Eid> eids = res.getEids();
169+
170+
if (CollectionUtils.isEmpty(eids)) {
171+
return res;
172+
}
173+
174+
final List<Eid> modifiedEids = eids.stream()
170175
.map(eid -> eid.toBuilder().inserter(INSERTER).build())
171176
.toList();
172-
return IdResResponse.of(eids);
177+
178+
return IdResResponse.of(modifiedEids);
173179
}
174180

175181
private static Future<InvocationResult<AuctionRequestPayload>> noAction() {
@@ -197,95 +203,109 @@ private InvocationResultImpl<AuctionRequestPayload> update(IdResResponse resolut
197203
}
198204

199205
private AuctionRequestPayload updatedPayload(AuctionRequestPayload requestPayload, List<Eid> resolvedEids) {
200-
final List<Eid> eids = ListUtils.emptyIfNull(resolvedEids);
201-
if (CollectionUtils.isEmpty(eids)) {
202-
return requestPayload;
203-
}
204-
final BidRequest bidRequest = updateAllowedBidders(requestPayload.bidRequest(), resolvedEids);
205-
final User updatedUser = Optional.ofNullable(bidRequest.getUser())
206-
.map(user -> user.toBuilder().eids(ListUtil.union(ListUtils.emptyIfNull(user.getEids()), eids)))
207-
.orElseGet(() -> User.builder().eids(eids))
208-
.build();
206+
return CollectionUtils.isNotEmpty(resolvedEids)
207+
? AuctionRequestPayloadImpl.of(updateBidRequest(requestPayload.bidRequest(), resolvedEids))
208+
: requestPayload;
209+
}
209210

210-
return AuctionRequestPayloadImpl.of(bidRequest.toBuilder().user(updatedUser).build());
211+
private BidRequest updateBidRequest(BidRequest bidRequest, List<Eid> resolvedEids) {
212+
return bidRequest.toBuilder()
213+
.ext(updateExtRequest(bidRequest.getExt(), resolvedEids))
214+
.user(updateUser(bidRequest.getUser(), resolvedEids))
215+
.build();
211216
}
212217

213-
private BidRequest updateAllowedBidders(BidRequest bidRequest, List<Eid> resolvedEids) {
214-
if (CollectionUtils.isEmpty(targetBidders)) {
215-
return bidRequest;
216-
}
218+
private ExtRequest updateExtRequest(ExtRequest ext, List<Eid> resolvedEids) {
219+
final Set<String> uniqueSources = CollectionUtils.emptyIfNull(resolvedEids).stream()
220+
.map(Eid::getSource)
221+
.filter(StringUtils::isNotEmpty)
222+
.collect(Collectors.toSet());
217223

218-
final ExtRequest ext = bidRequest.getExt();
219224
final ExtRequestPrebid extPrebid = ext != null ? ext.getPrebid() : null;
220225
final ExtRequestPrebidData extPrebidData = extPrebid != null ? extPrebid.getData() : null;
226+
final List<ExtRequestPrebidDataEidPermissions> eidPermissions =
227+
extPrebidData != null ? extPrebidData.getEidPermissions() : null;
228+
229+
final List<ExtRequestPrebidDataEidPermissions> modifiedEidPermissions = CollectionUtils.isEmpty(eidPermissions)
230+
? createEidPermissions(uniqueSources)
231+
: modifyEidPermissions(eidPermissions, uniqueSources);
221232

222233
final ExtRequestPrebid updatedExtPrebid = Optional.ofNullable(extPrebid)
223234
.map(ExtRequestPrebid::toBuilder)
224235
.orElseGet(ExtRequestPrebid::builder)
225-
.data(updatePrebidData(extPrebidData, resolvedEids))
236+
.data(updatePrebidData(extPrebidData, modifiedEidPermissions))
226237
.build();
227238

228239
final ExtRequest updatedExtRequest = ExtRequest.of(updatedExtPrebid);
229240
if (ext != null) {
230241
mapper.fillExtension(updatedExtRequest, ext.getProperties());
231242
}
232243

233-
return bidRequest.toBuilder().ext(updatedExtRequest).build();
244+
return updatedExtRequest;
234245
}
235246

236-
private ExtRequestPrebidData updatePrebidData(ExtRequestPrebidData extPrebidData, List<Eid> resolvedEids) {
237-
final List<String> originalBidders = extPrebidData != null ? extPrebidData.getBidders() : null;
247+
private static User updateUser(User user, List<Eid> resolvedEids) {
248+
final List<Eid> updatedEids = Optional.ofNullable(user)
249+
.map(User::getEids)
250+
.map(eids -> ListUtil.union(eids, resolvedEids))
251+
.orElse(resolvedEids);
238252

239-
final Set<FullSource> resolvedSources = resolvedEids.stream()
240-
.map(eid -> FullSource.of(eid.getSource(), eid.getInserter()))
241-
.collect(Collectors.toSet());
253+
return Optional.ofNullable(user)
254+
.map(User::toBuilder)
255+
.orElseGet(User::builder)
256+
.eids(updatedEids)
257+
.build();
258+
}
242259

243-
final List<ExtRequestPrebidDataEidPermissions> eidPermissions = extPrebidData != null
244-
? ListUtils.emptyIfNull(extPrebidData.getEidPermissions())
245-
: Collections.emptyList();
260+
private List<ExtRequestPrebidDataEidPermissions> createEidPermissions(Set<String> sources) {
261+
return sources.stream()
262+
.map(source -> ExtRequestPrebidDataEidPermissions.builder()
263+
.source(source)
264+
.inserter(INSERTER)
265+
.bidders(targetBidders.stream().toList())
266+
.build())
267+
.toList();
268+
}
246269

247-
final List<ExtRequestPrebidDataEidPermissions> updatedPermissions = eidPermissions.stream()
248-
.map(permission -> restrictEidPermission(permission, resolvedSources))
270+
private List<ExtRequestPrebidDataEidPermissions> modifyEidPermissions(
271+
List<ExtRequestPrebidDataEidPermissions> eidPermissions,
272+
Set<String> sources) {
273+
final List<ExtRequestPrebidDataEidPermissions> modifiedEidPermissions = eidPermissions.stream()
274+
.map(it -> updateEidPermission(it, sources))
249275
.filter(Objects::nonNull)
250276
.toList();
251-
252-
return CollectionUtils.isEmpty(updatedPermissions)
253-
? ExtRequestPrebidData.of(
254-
originalBidders,
255-
resolvedEids.stream()
256-
.map(eid ->
257-
ExtRequestPrebidDataEidPermissions.builder()
258-
.bidders(targetBidders.stream().toList())
259-
.inserter(INSERTER)
260-
.source(eid.getSource())
261-
.build())
262-
.toList())
263-
: ExtRequestPrebidData.of(originalBidders, updatedPermissions);
277+
final List<ExtRequestPrebidDataEidPermissions> defaultEidPermissions = createEidPermissions(sources);
278+
return ListUtils.union(modifiedEidPermissions, defaultEidPermissions);
264279
}
265280

266-
private ExtRequestPrebidDataEidPermissions restrictEidPermission(ExtRequestPrebidDataEidPermissions permission,
267-
Set<FullSource> resolvedSources) {
281+
private ExtRequestPrebidData updatePrebidData(ExtRequestPrebidData extPrebidData,
282+
List<ExtRequestPrebidDataEidPermissions> eidPermissions) {
268283

269-
final FullSource permFullSource = FullSource.of(permission.getSource(), permission.getInserter());
270-
if (!resolvedSources.contains(permFullSource)) {
271-
return permission;
272-
}
284+
final List<String> originalBidders = extPrebidData != null ? extPrebidData.getBidders() : null;
273285

274-
final List<String> permittedBidders = ListUtils.emptyIfNull(permission.getBidders());
286+
return ExtRequestPrebidData.of(originalBidders, eidPermissions);
287+
}
275288

276-
if (CollectionUtils.isEmpty(permittedBidders) || permittedBidders.contains("*")) {
277-
return permission.toBuilder()
278-
.bidders(targetBidders.stream().toList())
279-
.build();
289+
private ExtRequestPrebidDataEidPermissions updateEidPermission(ExtRequestPrebidDataEidPermissions eidPermission,
290+
Set<String> sources) {
291+
if (!sources.contains(eidPermission.getSource()) || !INSERTER.equals(eidPermission.getInserter())) {
292+
return eidPermission;
280293
}
281294

282-
final List<String> finalBidders = ListUtils.emptyIfNull(permission.getBidders()).stream()
295+
final List<String> allowedBidders = ListUtils.emptyIfNull(eidPermission.getBidders());
296+
final List<String> finalBidders = allowedBidders.stream()
283297
.filter(targetBidders::contains)
284298
.toList();
285299

286-
return CollectionUtils.isEmpty(finalBidders)
287-
? null
288-
: permission.toBuilder().bidders(finalBidders).build();
300+
if (CollectionUtils.isEmpty(allowedBidders) || allowedBidders.contains("*")) {
301+
return eidPermission.toBuilder().bidders(targetBidders.stream().toList()).build();
302+
}
303+
304+
if (CollectionUtils.isEmpty(finalBidders)) {
305+
return null;
306+
}
307+
308+
return eidPermission.toBuilder().bidders(finalBidders).build();
289309
}
290310

291311
@Override

extra/modules/live-intent-omni-channel-identity/src/test/java/org/prebid/server/hooks/modules/liveintent/omni/channel/identity/v1/LiveIntentOmniChannelIdentityProcessedAuctionRequestHookTest.java

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@
3232
import org.prebid.server.proto.openrtb.ext.request.ExtRequestPrebid;
3333
import org.prebid.server.proto.openrtb.ext.request.ExtRequestPrebidData;
3434
import org.prebid.server.proto.openrtb.ext.request.ExtRequestPrebidDataEidPermissions;
35+
import org.prebid.server.util.ListUtil;
3536
import org.prebid.server.vertx.httpclient.HttpClient;
3637
import org.prebid.server.vertx.httpclient.model.HttpClientResponse;
3738

@@ -77,6 +78,8 @@ public class LiveIntentOmniChannelIdentityProcessedAuctionRequestHookTest {
7778

7879
private Set<String> configuredBidders;
7980

81+
private ExtRequestPrebidDataEidPermissions defaultPermissions;
82+
8083
@BeforeEach
8184
public void setUp() {
8285
configuredBidders = Set.of("bidder1", "bidder2");
@@ -86,6 +89,12 @@ public void setUp() {
8689
given(properties.getTreatmentRate()).willReturn(1.0f);
8790
given(properties.getTargetBidders()).willReturn(configuredBidders);
8891

92+
defaultPermissions = ExtRequestPrebidDataEidPermissions.builder()
93+
.inserter("s2s.liveintent.com")
94+
.bidders(configuredBidders.stream().toList())
95+
.source("liveintent.com")
96+
.build();
97+
8998
target = new LiveIntentOmniChannelIdentityProcessedAuctionRequestHook(
9099
properties, userFpdActivityMask, MAPPER, httpClient, 0.01d);
91100
}
@@ -412,7 +421,7 @@ public void shouldRestrictExistingEidPermissionsByIntersectionAndKeepGlobalBidde
412421

413422
final ExtRequestPrebidData expectedData = ExtRequestPrebidData.of(
414423
List.of("bidderX"),
415-
List.of(otherBidder, liBidder2));
424+
ListUtil.union(List.of(otherBidder, liBidder2), List.of(defaultPermissions)));
416425

417426
final Eid expectedEid = Eid.builder().source("liveintent.com").build();
418427

@@ -474,7 +483,8 @@ public void shouldNotAddNewEidPermissionsOrModifyGlobalBiddersWhenSourceNotPrese
474483
.build()))
475484
.build();
476485

477-
final ExtRequestPrebidData expectedData = ExtRequestPrebidData.of(List.of("bidder3"), bidders);
486+
final ExtRequestPrebidData expectedData = ExtRequestPrebidData.of(List.of("bidder3"),
487+
ListUtil.union(bidders, List.of(defaultPermissions)));
478488

479489
final Eid expectedEid = Eid.builder().source("liveintent.com").build();
480490

@@ -556,9 +566,10 @@ public void shouldRemovePermissionWhenIntersectionIsEmpty() {
556566
final ExtRequestPrebidData expectedData = ExtRequestPrebidData.of(
557567
List.of("bidderGlobal"),
558568
List.of(ExtRequestPrebidDataEidPermissions.builder()
559-
.source("keep.com")
560-
.bidders(singletonList("bidderGlobal"))
561-
.build()));
569+
.source("keep.com")
570+
.bidders(singletonList("bidderGlobal"))
571+
.build(),
572+
defaultPermissions));
562573

563574
assertThat(result.status()).isEqualTo(InvocationStatus.success);
564575
assertThat(result.payloadUpdate().apply(AuctionRequestPayloadImpl.of(givenBidRequest)))

0 commit comments

Comments
 (0)