Skip to content

Commit 07fc6cc

Browse files
AntoxaAntoxicosulzhenko
authored andcommitted
Port TheTradeDesk: Dynamically construct endpoint using supplySourceId (#3951)
1 parent 2d7be04 commit 07fc6cc

7 files changed

Lines changed: 70 additions & 22 deletions

File tree

src/main/java/org/prebid/server/bidder/thetradedesk/TheTradeDeskBidder.java

Lines changed: 12 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,8 @@
1111
import com.iab.openrtb.response.Bid;
1212
import com.iab.openrtb.response.BidResponse;
1313
import com.iab.openrtb.response.SeatBid;
14-
import io.vertx.core.MultiMap;
1514
import org.apache.commons.collections4.CollectionUtils;
15+
import org.apache.commons.lang3.ObjectUtils;
1616
import org.apache.commons.lang3.StringUtils;
1717
import org.prebid.server.bidder.Bidder;
1818
import org.prebid.server.bidder.model.BidderBid;
@@ -42,11 +42,6 @@ public class TheTradeDeskBidder implements Bidder<BidRequest> {
4242
new TypeReference<>() {
4343
};
4444

45-
private static final String PREBID_INTEGRATION_TYPE_HEADER = "x-integration-type";
46-
private static final String PREBID_INTEGRATION_TYPE = "1";
47-
private static final MultiMap HEADERS = HttpUtil.headers()
48-
.add(PREBID_INTEGRATION_TYPE_HEADER, PREBID_INTEGRATION_TYPE);
49-
5045
private static final String SUPPLY_ID_MACRO = "{{SupplyId}}";
5146
private static final Pattern SUPPLY_ID_PATTERN = Pattern.compile("([a-z]+)$");
5247

@@ -73,6 +68,7 @@ public Result<List<HttpRequest<BidRequest>>> makeHttpRequests(BidRequest request
7368
final List<Imp> modifiedImps = new ArrayList<>();
7469

7570
String publisherId = null;
71+
String sourceSupplyId = null;
7672
for (Imp imp : request.getImp()) {
7773
try {
7874
final ExtImpTheTradeDesk extImp = parseImpExt(imp);
@@ -82,6 +78,11 @@ public Result<List<HttpRequest<BidRequest>>> makeHttpRequests(BidRequest request
8278
? extImpPublisherId
8379
: publisherId;
8480

81+
final String extImpSourceSupplyId = extImp.getSupplySourceId();
82+
sourceSupplyId = sourceSupplyId == null && StringUtils.isNotBlank(extImpSourceSupplyId)
83+
? extImpSourceSupplyId
84+
: sourceSupplyId;
85+
8586
modifiedImps.add(modifyImp(imp));
8687
} catch (PreBidException e) {
8788
return Result.withError(BidderError.badInput(e.getMessage()));
@@ -91,8 +92,7 @@ public Result<List<HttpRequest<BidRequest>>> makeHttpRequests(BidRequest request
9192
final BidRequest outgoingRequest = modifyRequest(request, modifiedImps, publisherId);
9293
final HttpRequest<BidRequest> httpRequest = BidderUtil.defaultRequest(
9394
outgoingRequest,
94-
HEADERS,
95-
resolveEndpoint(),
95+
resolveEndpoint(sourceSupplyId),
9696
mapper);
9797

9898
return Result.withValue(httpRequest);
@@ -165,8 +165,10 @@ private static App modifyApp(BidRequest request, String publisherId) {
165165
.build();
166166
}
167167

168-
private String resolveEndpoint() {
169-
return endpointUrl.replace(SUPPLY_ID_MACRO, HttpUtil.encodeUrl(StringUtils.defaultString(supplyId)));
168+
private String resolveEndpoint(String sourceSupplyId) {
169+
return endpointUrl.replace(
170+
SUPPLY_ID_MACRO,
171+
HttpUtil.encodeUrl(StringUtils.defaultString(ObjectUtils.defaultIfNull(sourceSupplyId, supplyId))));
170172
}
171173

172174
@Override

src/main/java/org/prebid/server/proto/openrtb/ext/request/thetradedesk/ExtImpTheTradeDesk.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,4 +8,7 @@ public class ExtImpTheTradeDesk {
88

99
@JsonProperty("publisherId")
1010
String publisherId;
11+
12+
@JsonProperty("supplySourceId")
13+
String supplySourceId;
1114
}

src/main/resources/static/bidder-params/thetradedesk.json

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,14 @@
66
"properties": {
77
"publisherId": {
88
"type": "string",
9+
"minLength": 1,
910
"description": "An ID which identifies the publisher"
11+
},
12+
"supplySourceId": {
13+
"type":"string",
14+
"minLength": 1,
15+
"description": "An ID provided by TheTradeDesk used to determine which endpoint to use"
1016
}
1117
},
12-
"required": [
13-
"publisherId"
14-
]
18+
"required": ["publisherId"]
1519
}

src/test/java/org/prebid/server/bidder/thetradedesk/TheTradeDeskBidderTest.java

Lines changed: 44 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -95,14 +95,12 @@ public void makeHttpRequestsShouldReturnExpectedHeaders() {
9595
.satisfies(headers -> assertThat(headers.get(CONTENT_TYPE_HEADER))
9696
.isEqualTo(APPLICATION_JSON_CONTENT_TYPE))
9797
.satisfies(headers -> assertThat(headers.get(ACCEPT_HEADER))
98-
.isEqualTo(APPLICATION_JSON_VALUE))
99-
.satisfies(headers -> assertThat(headers.get("x-integration-type"))
100-
.isEqualTo("1"));
98+
.isEqualTo(APPLICATION_JSON_VALUE));
10199
assertThat(result.getErrors()).isEmpty();
102100
}
103101

104102
@Test
105-
public void makeHttpRequestsShouldUseCorrectUri() {
103+
public void makeHttpRequestsShouldUseConfiguredSupplyIdWhenImpExtSupplyIdIsNotProvided() {
106104
// given
107105
final BidRequest bidRequest = givenBidRequest(identity(), identity());
108106

@@ -116,6 +114,42 @@ public void makeHttpRequestsShouldUseCorrectUri() {
116114
.containsExactly("https://test.endpoint.com/supplyid");
117115
}
118116

117+
@Test
118+
public void makeHttpRequestsShouldUseImpExtSupplyIdWhenProvided() {
119+
// given
120+
final BidRequest bidRequest = givenBidRequest(
121+
identity(),
122+
imp -> imp.ext(impExt("publisher", "supplySourceId")));
123+
124+
// when
125+
final Result<List<HttpRequest<BidRequest>>> result = target.makeHttpRequests(bidRequest);
126+
127+
// then
128+
assertThat(result.getErrors()).isEmpty();
129+
assertThat(result.getValue())
130+
.extracting(HttpRequest::getUri)
131+
.containsExactly("https://test.endpoint.com/supplySourceId");
132+
}
133+
134+
@Test
135+
public void makeHttpRequestsShouldUseFirstFoundSupplySourceId() {
136+
// given
137+
final BidRequest bidRequest = givenBidRequest(
138+
identity(),
139+
imp -> imp.ext(impExt("publisher", null)),
140+
imp -> imp.ext(impExt("publisher", "supplySourceId1")),
141+
imp -> imp.ext(impExt("publisher", "supplySourceId2")));
142+
143+
// when
144+
final Result<List<HttpRequest<BidRequest>>> result = target.makeHttpRequests(bidRequest);
145+
146+
// then
147+
assertThat(result.getErrors()).isEmpty();
148+
assertThat(result.getValue())
149+
.extracting(HttpRequest::getUri)
150+
.containsExactly("https://test.endpoint.com/supplySourceId1");
151+
}
152+
119153
@Test
120154
public void makeHttpRequestsShouldHaveImpIds() {
121155
// given
@@ -259,7 +293,7 @@ public void makeHttpRequestsShouldReturnAppWithExtImpPublisherWhenAppWithoutPubl
259293
}
260294

261295
@Test
262-
public void makeHttpRequestsShouldReturnAppWithPublisherOfTheFirsrExtImp() {
296+
public void makeHttpRequestsShouldReturnAppWithPublisherOfTheFirstExtImp() {
263297
final BidRequest bidRequest = givenBidRequest(
264298
request -> request.app(App.builder().build()),
265299
imp -> imp.ext(impExt("newPublisher")),
@@ -453,7 +487,11 @@ private static Imp givenImp(UnaryOperator<Imp.ImpBuilder> impCustomizer) {
453487
}
454488

455489
private static ObjectNode impExt(String publisherId) {
456-
return mapper.valueToTree(ExtPrebid.of(null, ExtImpTheTradeDesk.of(publisherId)));
490+
return impExt(publisherId, null);
491+
}
492+
493+
private static ObjectNode impExt(String publisherId, String supplySourceId) {
494+
return mapper.valueToTree(ExtPrebid.of(null, ExtImpTheTradeDesk.of(publisherId, supplySourceId)));
457495
}
458496

459497
}

src/test/resources/org/prebid/server/it/openrtb2/thetradedesk/test-auction-thetradedesk-request.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,8 @@
99
},
1010
"ext": {
1111
"thetradedesk": {
12-
"publisherId": "publisherId"
12+
"publisherId": "publisherId",
13+
"supplySourceId": "somesupplyid"
1314
}
1415
}
1516
}

src/test/resources/org/prebid/server/it/openrtb2/thetradedesk/test-thetradedesk-bid-request.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,8 @@
1111
"ext": {
1212
"tid": "${json-unit.any-string}",
1313
"bidder": {
14-
"publisherId": "publisherId"
14+
"publisherId": "publisherId",
15+
"supplySourceId": "somesupplyid"
1516
}
1617
}
1718
}

src/test/resources/org/prebid/server/it/test-application.properties

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -507,7 +507,6 @@ adapters.tradplus.enabled=true
507507
adapters.tradplus.endpoint=http://{{ZoneID}}localhost:8090/{{AccountID}}/tradplus-exchange
508508
adapters.thetradedesk.enabled=true
509509
adapters.thetradedesk.endpoint=http://localhost:8090/thetradedesk-exchange/{{SupplyId}}
510-
adapters.thetradedesk.extra-info.supply-id=somesupplyid
511510
adapters.triplelift.enabled=true
512511
adapters.triplelift.endpoint=http://localhost:8090/triplelift-exchange
513512
adapters.tripleliftnative.enabled=true

0 commit comments

Comments
 (0)