Skip to content

Commit 3e5e980

Browse files
Adtarget and Adtelligent: Change Aid Type (#3387)
1 parent 317621b commit 3e5e980

File tree

12 files changed

+124
-77
lines changed

12 files changed

+124
-77
lines changed

src/main/java/org/prebid/server/bidder/adtarget/AdtargetBidder.java

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
import org.apache.commons.lang3.ObjectUtils;
1212
import org.prebid.server.bidder.Bidder;
1313
import org.prebid.server.bidder.adtarget.proto.AdtargetImpExt;
14+
import org.prebid.server.bidder.adtarget.proto.ExtImpAdtargetBidRequest;
1415
import org.prebid.server.bidder.model.BidderBid;
1516
import org.prebid.server.bidder.model.BidderCall;
1617
import org.prebid.server.bidder.model.BidderError;
@@ -67,16 +68,16 @@ private Result<Map<Integer, List<Imp>>> mapSourceIdToImp(List<Imp> imps) {
6768
final Map<Integer, List<Imp>> sourceToImps = new HashMap<>();
6869
for (Imp imp : imps) {
6970
final ExtImpAdtarget extImpAdtarget;
71+
final Integer sourceId;
7072
try {
7173
validateImpression(imp);
7274
extImpAdtarget = parseImpAdtarget(imp);
75+
sourceId = resolveSourceId(imp.getId(), extImpAdtarget.getSourceId());
7376
} catch (PreBidException e) {
7477
errors.add(BidderError.badInput(e.getMessage()));
7578
continue;
7679
}
77-
final Imp updatedImp = updateImp(imp, extImpAdtarget);
78-
79-
final Integer sourceId = extImpAdtarget.getSourceId();
80+
final Imp updatedImp = updateImp(imp, sourceId, extImpAdtarget);
8081
sourceToImps.computeIfAbsent(sourceId, ignored -> new ArrayList<>()).add(updatedImp);
8182
}
8283
return Result.of(sourceToImps, errors);
@@ -103,15 +104,24 @@ private static void validateImpression(Imp imp) {
103104
}
104105
}
105106

106-
private Imp updateImp(Imp imp, ExtImpAdtarget extImpAdtarget) {
107-
final AdtargetImpExt adtargetImpExt = AdtargetImpExt.of(extImpAdtarget);
107+
private Imp updateImp(Imp imp, Integer sourceId, ExtImpAdtarget extImpAdtarget) {
108+
final AdtargetImpExt adtargetImpExt = AdtargetImpExt.of(
109+
ExtImpAdtargetBidRequest.from(sourceId, extImpAdtarget));
108110
final BigDecimal bidFloor = extImpAdtarget.getBidFloor();
109111
return imp.toBuilder()
110112
.bidfloor(BidderUtil.isValidPrice(bidFloor) ? bidFloor : imp.getBidfloor())
111113
.ext(mapper.mapper().valueToTree(adtargetImpExt))
112114
.build();
113115
}
114116

117+
private static Integer resolveSourceId(String impId, String sourceId) {
118+
try {
119+
return sourceId == null ? 0 : Integer.parseInt(sourceId);
120+
} catch (NumberFormatException e) {
121+
throw new PreBidException("ignoring imp id=%s, aid parsing err: %s".formatted(impId, e.getMessage()));
122+
}
123+
}
124+
115125
@Override
116126
public Result<List<BidderBid>> makeBids(BidderCall<BidRequest> httpCall, BidRequest bidRequest) {
117127
final List<BidderError> errors = new ArrayList<>();
Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,11 @@
11
package org.prebid.server.bidder.adtarget.proto;
22

33
import com.fasterxml.jackson.annotation.JsonProperty;
4-
import lombok.AllArgsConstructor;
54
import lombok.Value;
6-
import org.prebid.server.proto.openrtb.ext.request.adtarget.ExtImpAdtarget;
75

8-
@AllArgsConstructor(staticName = "of")
9-
@Value
6+
@Value(staticConstructor = "of")
107
public class AdtargetImpExt {
118

129
@JsonProperty("adtarget")
13-
ExtImpAdtarget extImpAdtarget;
10+
ExtImpAdtargetBidRequest extImp;
1411
}
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
package org.prebid.server.bidder.adtarget.proto;
2+
3+
import com.fasterxml.jackson.annotation.JsonProperty;
4+
import lombok.Value;
5+
import org.prebid.server.proto.openrtb.ext.request.adtarget.ExtImpAdtarget;
6+
7+
import java.math.BigDecimal;
8+
9+
@Value(staticConstructor = "of")
10+
public class ExtImpAdtargetBidRequest {
11+
12+
@JsonProperty("aid")
13+
Integer sourceId;
14+
15+
@JsonProperty("placementId")
16+
Integer placementId;
17+
18+
@JsonProperty("siteId")
19+
Integer siteId;
20+
21+
@JsonProperty("bidFloor")
22+
BigDecimal bidFloor;
23+
24+
public static ExtImpAdtargetBidRequest from(Integer sourceId, ExtImpAdtarget impExt) {
25+
return ExtImpAdtargetBidRequest.of(
26+
sourceId,
27+
impExt.getPlacementId(),
28+
impExt.getSiteId(),
29+
impExt.getBidFloor());
30+
}
31+
}

src/main/java/org/prebid/server/bidder/adtelligent/AdtelligentBidder.java

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
import org.apache.commons.collections4.CollectionUtils;
1414
import org.prebid.server.bidder.Bidder;
1515
import org.prebid.server.bidder.adtelligent.proto.AdtelligentImpExt;
16+
import org.prebid.server.bidder.adtelligent.proto.ExtImpAdtelligentBidRequest;
1617
import org.prebid.server.bidder.model.BidderBid;
1718
import org.prebid.server.bidder.model.BidderCall;
1819
import org.prebid.server.bidder.model.BidderError;
@@ -86,16 +87,17 @@ private Result<Map<Integer, List<Imp>>> mapSourceIdToImp(List<Imp> imps) {
8687
final Map<Integer, List<Imp>> sourceToImps = new HashMap<>();
8788
for (final Imp imp : imps) {
8889
final ExtImpAdtelligent extImpAdtelligent;
90+
final Integer sourceId;
8991
try {
9092
validateImpression(imp);
9193
extImpAdtelligent = getExtImpAdtelligent(imp);
94+
sourceId = resolveSourceId(imp.getId(), extImpAdtelligent.getSourceId());
9295
} catch (PreBidException e) {
9396
errors.add(BidderError.badInput(e.getMessage()));
9497
continue;
9598
}
96-
final Imp updatedImp = updateImp(imp, extImpAdtelligent);
99+
final Imp updatedImp = updateImp(imp, sourceId, extImpAdtelligent);
97100

98-
final Integer sourceId = extImpAdtelligent.getSourceId();
99101
final List<Imp> sourceIdImps = sourceToImps.get(sourceId);
100102
if (sourceIdImps == null) {
101103
sourceToImps.put(sourceId, new ArrayList<>(Collections.singleton(updatedImp)));
@@ -164,15 +166,24 @@ private void validateImpression(Imp imp) {
164166
/**
165167
* Updates {@link Imp} with bidfloor if it is present in imp.ext.bidder
166168
*/
167-
private Imp updateImp(Imp imp, ExtImpAdtelligent extImpAdtelligent) {
168-
final AdtelligentImpExt adtelligentImpExt = AdtelligentImpExt.of(extImpAdtelligent);
169+
private Imp updateImp(Imp imp, Integer sourceId, ExtImpAdtelligent extImpAdtelligent) {
170+
final AdtelligentImpExt adtelligentImpExt = AdtelligentImpExt.of(
171+
ExtImpAdtelligentBidRequest.from(sourceId, extImpAdtelligent));
169172
final BigDecimal bidFloor = extImpAdtelligent.getBidFloor();
170173
return imp.toBuilder()
171174
.bidfloor(BidderUtil.isValidPrice(bidFloor) ? bidFloor : imp.getBidfloor())
172175
.ext(mapper.mapper().valueToTree(adtelligentImpExt))
173176
.build();
174177
}
175178

179+
private static Integer resolveSourceId(String impId, String sourceId) {
180+
try {
181+
return sourceId == null ? 0 : Integer.parseInt(sourceId);
182+
} catch (NumberFormatException e) {
183+
throw new PreBidException("ignoring imp id=%s, aid parsing err: %s".formatted(impId, e.getMessage()));
184+
}
185+
}
186+
176187
/**
177188
* Extracts {@link Bid}s from response.
178189
*/
Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,11 @@
11
package org.prebid.server.bidder.adtelligent.proto;
22

33
import com.fasterxml.jackson.annotation.JsonProperty;
4-
import lombok.AllArgsConstructor;
54
import lombok.Value;
6-
import org.prebid.server.proto.openrtb.ext.request.adtelligent.ExtImpAdtelligent;
75

8-
@AllArgsConstructor(staticName = "of")
9-
@Value
6+
@Value(staticConstructor = "of")
107
public class AdtelligentImpExt {
118

129
@JsonProperty("adtelligent")
13-
ExtImpAdtelligent extImpAdtelligent;
10+
ExtImpAdtelligentBidRequest extImp;
1411
}
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
package org.prebid.server.bidder.adtelligent.proto;
2+
3+
import com.fasterxml.jackson.annotation.JsonProperty;
4+
import lombok.Value;
5+
import org.prebid.server.proto.openrtb.ext.request.adtelligent.ExtImpAdtelligent;
6+
7+
import java.math.BigDecimal;
8+
9+
@Value(staticConstructor = "of")
10+
public class ExtImpAdtelligentBidRequest {
11+
12+
@JsonProperty("aid")
13+
Integer sourceId;
14+
15+
@JsonProperty("placementId")
16+
Integer placementId;
17+
18+
@JsonProperty("siteId")
19+
Integer siteId;
20+
21+
@JsonProperty("bidFloor")
22+
BigDecimal bidFloor;
23+
24+
public static ExtImpAdtelligentBidRequest from(Integer sourceId, ExtImpAdtelligent impExt) {
25+
return ExtImpAdtelligentBidRequest.of(
26+
sourceId,
27+
impExt.getPlacementId(),
28+
impExt.getSiteId(),
29+
impExt.getBidFloor());
30+
}
31+
}
Lines changed: 2 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,39 +1,22 @@
11
package org.prebid.server.proto.openrtb.ext.request.adtarget;
22

33
import com.fasterxml.jackson.annotation.JsonProperty;
4-
import lombok.AllArgsConstructor;
54
import lombok.Value;
65

76
import java.math.BigDecimal;
87

9-
/**
10-
* Defines the contract for bidrequest.imp[i].ext.adtarget
11-
*/
12-
@AllArgsConstructor(staticName = "of")
13-
@Value
8+
@Value(staticConstructor = "of")
149
public class ExtImpAdtarget {
1510

16-
/**
17-
* Defines the contract for bidrequest.imp[i].ext.adtarget.aid
18-
*/
1911
@JsonProperty("aid")
20-
Integer sourceId;
12+
String sourceId;
2113

22-
/**
23-
* Defines the contract for bidrequest.imp[i].ext.adtarget.placementId
24-
*/
2514
@JsonProperty("placementId")
2615
Integer placementId;
2716

28-
/**
29-
* Defines the contract for bidrequest.imp[i].ext.adtarget.siteId
30-
*/
3117
@JsonProperty("siteId")
3218
Integer siteId;
3319

34-
/**
35-
* Defines the contract for bidrequest.imp[i].ext.adtarget.bidFloor
36-
*/
3720
@JsonProperty("bidFloor")
3821
BigDecimal bidFloor;
3922
}
Lines changed: 2 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,39 +1,22 @@
11
package org.prebid.server.proto.openrtb.ext.request.adtelligent;
22

33
import com.fasterxml.jackson.annotation.JsonProperty;
4-
import lombok.AllArgsConstructor;
54
import lombok.Value;
65

76
import java.math.BigDecimal;
87

9-
/**
10-
* Defines the contract for bidrequest.imp[i].ext.adtelligent
11-
*/
12-
@AllArgsConstructor(staticName = "of")
13-
@Value
8+
@Value(staticConstructor = "of")
149
public class ExtImpAdtelligent {
1510

16-
/**
17-
* Defines the contract for bidrequest.imp[i].ext.adtelligent.aid
18-
*/
1911
@JsonProperty("aid")
20-
Integer sourceId;
12+
String sourceId;
2113

22-
/**
23-
* Defines the contract for bidrequest.imp[i].ext.adtelligent.placementId
24-
*/
2514
@JsonProperty("placementId")
2615
Integer placementId;
2716

28-
/**
29-
* Defines the contract for bidrequest.imp[i].ext.adtelligent.siteId
30-
*/
3117
@JsonProperty("siteId")
3218
Integer siteId;
3319

34-
/**
35-
* Defines the contract for bidrequest.imp[i].ext.adtelligent.bidFloor
36-
*/
3720
@JsonProperty("bidFloor")
3821
BigDecimal bidFloor;
3922
}

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

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22
"$schema": "http://json-schema.org/draft-04/schema#",
33
"title": "Adtelligent Adapter Params",
44
"description": "A schema which validates params accepted by the Adtelligent adapter",
5-
65
"type": "object",
76
"properties": {
87
"placementId": {
@@ -14,7 +13,10 @@
1413
"description": "An ID which identifies the site selling the impression"
1514
},
1615
"aid": {
17-
"type": "integer",
16+
"type": [
17+
"integer",
18+
"string"
19+
],
1820
"description": "An ID which identifies the channel"
1921
},
2022
"bidFloor": {

src/test/java/org/prebid/server/bidder/adtarget/AdtargetBidderTest.java

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
import org.junit.jupiter.api.Test;
1616
import org.prebid.server.VertxTest;
1717
import org.prebid.server.bidder.adtarget.proto.AdtargetImpExt;
18+
import org.prebid.server.bidder.adtarget.proto.ExtImpAdtargetBidRequest;
1819
import org.prebid.server.bidder.model.BidderBid;
1920
import org.prebid.server.bidder.model.BidderCall;
2021
import org.prebid.server.bidder.model.BidderError;
@@ -59,7 +60,7 @@ public void makeHttpRequestsShouldReturnHttpRequestWithCorrectBodyHeadersAndMeth
5960
.imp(singletonList(bidRequest.getImp().getFirst().toBuilder()
6061
.bidfloor(BigDecimal.valueOf(3))
6162
.ext(mapper.valueToTree(AdtargetImpExt.of(
62-
ExtImpAdtarget.of(15, 1, 2, BigDecimal.valueOf(3)))))
63+
ExtImpAdtargetBidRequest.of(15, 1, 2, BigDecimal.valueOf(3)))))
6364
.build()))
6465
.build();
6566
assertThat(result.getErrors()).isEmpty();
@@ -133,7 +134,7 @@ public void makeHttpRequestShouldReturnHttpRequestWithErrorMessage() {
133134
.id("impId2")
134135
.banner(Banner.builder().build())
135136
.ext(mapper.valueToTree(
136-
ExtPrebid.of(null, ExtImpAdtarget.of(15, 1, 2, BigDecimal.valueOf(3)))))
137+
ExtPrebid.of(null, ExtImpAdtarget.of("15", 1, 2, BigDecimal.valueOf(3)))))
137138
.build()))
138139
.build();
139140

@@ -157,7 +158,7 @@ public void makeHttpRequestShouldReturnWithBidFloorPopulatedFromImpWhenIsMissedI
157158
.imp(singletonList(Imp.builder()
158159
.banner(Banner.builder().build())
159160
.bidfloor(BigDecimal.valueOf(16))
160-
.ext(mapper.valueToTree(ExtPrebid.of(null, ExtImpAdtarget.of(15, 1, 2, null))))
161+
.ext(mapper.valueToTree(ExtPrebid.of(null, ExtImpAdtarget.of("15", 1, 2, null))))
161162
.build()))
162163
.build();
163164

@@ -179,12 +180,12 @@ public void makeHttpRequestShouldReturnTwoHttpRequestsWhenTwoImpsHasDifferentSou
179180
.imp(asList(Imp.builder()
180181
.banner(Banner.builder().build())
181182
.ext(mapper.valueToTree(
182-
ExtPrebid.of(null, ExtImpAdtarget.of(15, 1, 2, BigDecimal.valueOf(3)))))
183+
ExtPrebid.of(null, ExtImpAdtarget.of("15", 1, 2, BigDecimal.valueOf(3)))))
183184
.build(),
184185
Imp.builder()
185186
.banner(Banner.builder().build())
186187
.ext(mapper.valueToTree(
187-
ExtPrebid.of(null, ExtImpAdtarget.of(16, 1, 2, BigDecimal.valueOf(3)))))
188+
ExtPrebid.of(null, ExtImpAdtarget.of("16", 1, 2, BigDecimal.valueOf(3)))))
188189
.build()))
189190
.build();
190191

@@ -224,12 +225,12 @@ public void makeHttpRequestShouldReturnOneHttpRequestForTowImpsWhenImpsHasSameSo
224225
.imp(asList(Imp.builder()
225226
.banner(Banner.builder().build())
226227
.ext(mapper.valueToTree(
227-
ExtPrebid.of(null, ExtImpAdtarget.of(15, 1, 2, BigDecimal.valueOf(3)))))
228+
ExtPrebid.of(null, ExtImpAdtarget.of("15", 1, 2, BigDecimal.valueOf(3)))))
228229
.build(),
229230
Imp.builder()
230231
.banner(Banner.builder().build())
231232
.ext(mapper.valueToTree(
232-
ExtPrebid.of(null, ExtImpAdtarget.of(15, 1, 2, BigDecimal.valueOf(3)))))
233+
ExtPrebid.of(null, ExtImpAdtarget.of("15", 1, 2, BigDecimal.valueOf(3)))))
233234
.build()))
234235
.build();
235236

@@ -409,7 +410,7 @@ private static Imp givenImp(Function<Imp.ImpBuilder, Imp.ImpBuilder> impCustomiz
409410
.id("impId")
410411
.banner(Banner.builder().build())
411412
.ext(mapper.valueToTree(
412-
ExtPrebid.of(null, ExtImpAdtarget.of(15, 1, 2, BigDecimal.valueOf(3))))))
413+
ExtPrebid.of(null, ExtImpAdtarget.of("15", 1, 2, BigDecimal.valueOf(3))))))
413414
.build();
414415
}
415416

0 commit comments

Comments
 (0)