diff --git a/src/main/java/org/prebid/server/bidder/adnuntius/AdnuntiusBidder.java b/src/main/java/org/prebid/server/bidder/adnuntius/AdnuntiusBidder.java index 1603cdc855b..127d02ae000 100644 --- a/src/main/java/org/prebid/server/bidder/adnuntius/AdnuntiusBidder.java +++ b/src/main/java/org/prebid/server/bidder/adnuntius/AdnuntiusBidder.java @@ -52,6 +52,7 @@ import org.prebid.server.proto.openrtb.ext.request.ExtSite; import org.prebid.server.proto.openrtb.ext.request.ExtUser; import org.prebid.server.proto.openrtb.ext.request.adnuntius.ExtImpAdnuntius; +import org.prebid.server.proto.openrtb.ext.request.adnuntius.ExtImpAdnuntiusTargeting; import org.prebid.server.proto.openrtb.ext.response.BidType; import org.prebid.server.proto.openrtb.ext.response.ExtBidDsa; import org.prebid.server.util.BidderUtil; @@ -158,12 +159,8 @@ private static String resolveNetwork(ExtImpAdnuntius extImpAdnuntius) { } private static AdnuntiusRequestAdUnit makeBannerAdUnit(Imp imp, ExtImpAdnuntius extImpAdnuntius) { - final String auId = extImpAdnuntius.getAuId(); - return AdnuntiusRequestAdUnit.builder() - .auId(auId) - .targetId(targetId(auId, imp.getId(), "banner")) + return makeAdUnitBuilder(imp, extImpAdnuntius, "banner") .dimensions(createDimensions(imp.getBanner())) - .maxDeals(resolveMaxDeals(extImpAdnuntius)) .build(); } @@ -197,13 +194,9 @@ private static List> createDimensions(Banner banner) { } private AdnuntiusRequestAdUnit makeNativeAdUnit(Imp imp, ExtImpAdnuntius extImpAdnuntius) { - final String auId = extImpAdnuntius.getAuId(); - return AdnuntiusRequestAdUnit.builder() - .auId(auId) - .adType("NATIVE") - .targetId(targetId(auId, imp.getId(), "native")) - .maxDeals(resolveMaxDeals(extImpAdnuntius)) + return makeAdUnitBuilder(imp, extImpAdnuntius, "native") .nativeRequest(AdnuntiusNativeRequest.of(parseNativeRequest(imp))) + .adType("NATIVE") .build(); } @@ -215,6 +208,26 @@ private ObjectNode parseNativeRequest(Imp imp) { } } + private static AdnuntiusRequestAdUnit.AdnuntiusRequestAdUnitBuilder makeAdUnitBuilder( + Imp imp, + ExtImpAdnuntius extImpAdnuntius, + String bidType) { + + final String auId = extImpAdnuntius.getAuId(); + final ExtImpAdnuntiusTargeting targeting = ObjectUtils.defaultIfNull( + extImpAdnuntius.getTargeting(), + ExtImpAdnuntiusTargeting.builder().build()); + return AdnuntiusRequestAdUnit.builder() + .auId(auId) + .targetId(targetId(auId, imp.getId(), bidType)) + .maxDeals(resolveMaxDeals(extImpAdnuntius)) + .category(targeting.getCategory()) + .segments(targeting.getSegments()) + .keywords(targeting.getKeywords()) + .keyValues(targeting.getKeyValues()) + .adUnitMatchingLabel(targeting.getAdUnitMatchingLabel()); + } + private static Integer resolveMaxDeals(ExtImpAdnuntius extImpAdnuntius) { final Integer maxDeals = extImpAdnuntius.getMaxDeals(); return maxDeals != null && maxDeals > 0 ? maxDeals : null; diff --git a/src/main/java/org/prebid/server/bidder/adnuntius/model/request/AdnuntiusRequestAdUnit.java b/src/main/java/org/prebid/server/bidder/adnuntius/model/request/AdnuntiusRequestAdUnit.java index 03e9b586c72..88a37a2dc3b 100644 --- a/src/main/java/org/prebid/server/bidder/adnuntius/model/request/AdnuntiusRequestAdUnit.java +++ b/src/main/java/org/prebid/server/bidder/adnuntius/model/request/AdnuntiusRequestAdUnit.java @@ -5,6 +5,7 @@ import lombok.Value; import java.util.List; +import java.util.Map; @Builder(toBuilder = true) @Value @@ -26,4 +27,17 @@ public class AdnuntiusRequestAdUnit { @JsonProperty("adType") String adType; + + @JsonProperty("c") + List category; + + List segments; + + List keywords; + + @JsonProperty("kv") + Map> keyValues; + + @JsonProperty("auml") + List adUnitMatchingLabel; } diff --git a/src/main/java/org/prebid/server/proto/openrtb/ext/request/adnuntius/ExtImpAdnuntius.java b/src/main/java/org/prebid/server/proto/openrtb/ext/request/adnuntius/ExtImpAdnuntius.java index c54dab4b520..e110b122bb0 100644 --- a/src/main/java/org/prebid/server/proto/openrtb/ext/request/adnuntius/ExtImpAdnuntius.java +++ b/src/main/java/org/prebid/server/proto/openrtb/ext/request/adnuntius/ExtImpAdnuntius.java @@ -21,4 +21,6 @@ public class ExtImpAdnuntius { @JsonProperty("bidType") String bidType; + + ExtImpAdnuntiusTargeting targeting; } diff --git a/src/main/java/org/prebid/server/proto/openrtb/ext/request/adnuntius/ExtImpAdnuntiusTargeting.java b/src/main/java/org/prebid/server/proto/openrtb/ext/request/adnuntius/ExtImpAdnuntiusTargeting.java new file mode 100644 index 00000000000..508fcb0dfba --- /dev/null +++ b/src/main/java/org/prebid/server/proto/openrtb/ext/request/adnuntius/ExtImpAdnuntiusTargeting.java @@ -0,0 +1,28 @@ +package org.prebid.server.proto.openrtb.ext.request.adnuntius; + +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Builder; +import lombok.Value; + +import java.util.List; +import java.util.Map; + +@Value +@Builder +public class ExtImpAdnuntiusTargeting { + + @JsonProperty("c") + List category; + + List segments; + + List keywords; + + @JsonProperty("kv") + Map> keyValues; + + @JsonProperty("auml") + List adUnitMatchingLabel; + + +} diff --git a/src/test/java/org/prebid/server/bidder/adnuntius/AdnuntiusBidderTest.java b/src/test/java/org/prebid/server/bidder/adnuntius/AdnuntiusBidderTest.java index 910a2b6514c..b2f1f9e4342 100644 --- a/src/test/java/org/prebid/server/bidder/adnuntius/AdnuntiusBidderTest.java +++ b/src/test/java/org/prebid/server/bidder/adnuntius/AdnuntiusBidderTest.java @@ -45,6 +45,7 @@ import org.prebid.server.proto.openrtb.ext.request.ExtSite; import org.prebid.server.proto.openrtb.ext.request.ExtUser; import org.prebid.server.proto.openrtb.ext.request.adnuntius.ExtImpAdnuntius; +import org.prebid.server.proto.openrtb.ext.request.adnuntius.ExtImpAdnuntiusTargeting; import org.prebid.server.proto.openrtb.ext.response.BidType; import org.prebid.server.util.HttpUtil; @@ -201,6 +202,49 @@ public void makeHttpRequestsShouldNotReturnAdTypeForBannerImp() { .containsNull(); } + @Test + public void makeHttpRequestsShouldReturnTargetingFieldsWhenTargetingIsPresent() { + // given + final ExtImpAdnuntiusTargeting targeting = ExtImpAdnuntiusTargeting.builder() + .category(List.of("1", "2")) + .keywords(List.of("3", "4")) + .segments(List.of("5", "6")) + .adUnitMatchingLabel(List.of("7", "8")) + .keyValues(Map.of("9", List.of("10", "11"))) + .build(); + final BidRequest bidRequest = givenBidRequest(givenBannerAndNativeImp( + ExtImpAdnuntius.builder().targeting(targeting).build(), + identity())); + + // when + final Result>> result = target.makeHttpRequests(bidRequest); + + // then + assertThat(result.getErrors()).isEmpty(); + assertThat(result.getValue()) + .extracting(HttpRequest::getPayload) + .flatExtracting(AdnuntiusRequest::getAdUnits) + .extracting( + AdnuntiusRequestAdUnit::getCategory, + AdnuntiusRequestAdUnit::getKeywords, + AdnuntiusRequestAdUnit::getSegments, + AdnuntiusRequestAdUnit::getKeyValues, + AdnuntiusRequestAdUnit::getAdUnitMatchingLabel) + .containsExactly( + tuple( + List.of("1", "2"), + List.of("3", "4"), + List.of("5", "6"), + Map.of("9", List.of("10", "11")), + List.of("7", "8")), + tuple( + List.of("1", "2"), + List.of("3", "4"), + List.of("5", "6"), + Map.of("9", List.of("10", "11")), + List.of("7", "8"))); + } + @Test public void makeHttpRequestsShouldReturnRequestsWithDimensionsIfBannerHighAndWidthArePresent() { // given