diff --git a/src/main/java/org/prebid/server/auction/BidResponseCreator.java b/src/main/java/org/prebid/server/auction/BidResponseCreator.java index 0177e4efe81..a1346c956db 100644 --- a/src/main/java/org/prebid/server/auction/BidResponseCreator.java +++ b/src/main/java/org/prebid/server/auction/BidResponseCreator.java @@ -100,6 +100,7 @@ import org.prebid.server.util.StreamUtil; import org.prebid.server.vast.VastModifier; +import jakarta.annotation.Nullable; import java.math.BigDecimal; import java.time.Clock; import java.util.ArrayList; @@ -436,6 +437,7 @@ private List toBidderResponseInfos(CategoryMappingResult cat bidderBid.getBid(), bidderBid.getType(), seat, + bidderBid.getOriginalSeat(), imps, bidder, categoryMappingResult, @@ -464,6 +466,7 @@ private List toBidderResponseInfos(CategoryMappingResult cat private BidInfo toBidInfo(Bid bid, BidType type, String seat, + String originalSeat, List imps, String bidder, CategoryMappingResult categoryMappingResult, @@ -476,6 +479,7 @@ private BidInfo toBidInfo(Bid bid, .bidType(type) .bidder(bidder) .seat(seat) + .originalSeat(originalSeat) .correspondingImp(correspondingImp) .ttl(resolveTtl(bid, type, correspondingImp, cacheInfo, account)) .vastTtl(type == BidType.video ? resolveVastTtl(bid, correspondingImp, cacheInfo, account) : null) @@ -1384,10 +1388,12 @@ private Bid toBid(BidInfo bidInfo, final boolean bidRankingEnabled = isBidRankingEnabled(account); + final ExtBidPrebid originalExtBidPrebid = getExtPrebid(originalBidExt, ExtBidPrebid.class).orElse(null); + final ExtBidPrebidMeta updatedMeta = enrichMetaByOriginalSeat(bidInfo, originalExtBidPrebid); + final ExtBidPrebid updatedExtBidPrebid = - getExtPrebid(originalBidExt, ExtBidPrebid.class) - .map(ExtBidPrebid::toBuilder) - .orElseGet(ExtBidPrebid::builder) + (originalExtBidPrebid != null ? originalExtBidPrebid.toBuilder() : ExtBidPrebid.builder()) + .meta(updatedMeta) .targeting(MapUtils.isNotEmpty(targetingKeywords) ? targetingKeywords : null) .targetBidderCode(targetingInfo.isAddTargetBidderCode() ? targetingInfo.getBidderCode() : null) .dealTierSatisfied(dealsTierSatisfied) @@ -1408,6 +1414,21 @@ private Bid toBid(BidInfo bidInfo, .build(); } + private static @Nullable ExtBidPrebidMeta enrichMetaByOriginalSeat( + BidInfo bidInfo, + ExtBidPrebid originalExtBidPrebid) { + + final ExtBidPrebidMeta originalMeta = originalExtBidPrebid != null ? originalExtBidPrebid.getMeta() : null; + final String originalSeat = bidInfo.getOriginalSeat(); + return StringUtils.isNotBlank(originalSeat) + && !originalSeat.equals(bidInfo.getSeat()) + && (originalMeta == null || originalMeta.getSeat() == null) + ? (originalMeta != null ? originalMeta.toBuilder() : ExtBidPrebidMeta.builder()) + .seat(originalSeat) + .build() + : originalMeta; + } + private boolean shouldIncludeTargetingInResponse(ExtRequestTargeting targeting, TargetingInfo targetingInfo) { return targeting != null && targetingInfo.isTargetingEnabled() diff --git a/src/main/java/org/prebid/server/auction/model/BidInfo.java b/src/main/java/org/prebid/server/auction/model/BidInfo.java index 224b6344f34..1afd1d05013 100644 --- a/src/main/java/org/prebid/server/auction/model/BidInfo.java +++ b/src/main/java/org/prebid/server/auction/model/BidInfo.java @@ -23,6 +23,8 @@ public class BidInfo { String seat; + String originalSeat; + BidType bidType; CacheInfo cacheInfo; diff --git a/src/main/java/org/prebid/server/bidder/GenericBidder.java b/src/main/java/org/prebid/server/bidder/GenericBidder.java index 6dbb2c76034..f6846b380b6 100644 --- a/src/main/java/org/prebid/server/bidder/GenericBidder.java +++ b/src/main/java/org/prebid/server/bidder/GenericBidder.java @@ -3,7 +3,6 @@ import com.iab.openrtb.request.BidRequest; import com.iab.openrtb.request.Imp; import com.iab.openrtb.response.BidResponse; -import com.iab.openrtb.response.SeatBid; import org.apache.commons.collections4.CollectionUtils; import org.prebid.server.bidder.model.BidderBid; import org.prebid.server.bidder.model.BidderCall; @@ -15,7 +14,6 @@ import org.prebid.server.util.BidderUtil; import org.prebid.server.util.HttpUtil; -import java.util.Collection; import java.util.Collections; import java.util.List; import java.util.Map; @@ -60,10 +58,11 @@ private static List bidsFromResponse(BidRequest bidRequest, BidRespon .collect(Collectors.toMap(Imp::getId, Function.identity())); return bidResponse.getSeatbid().stream() .filter(Objects::nonNull) - .map(SeatBid::getBid) + .filter(seatBid -> CollectionUtils.isNotEmpty(seatBid.getBid())) + .flatMap(seatBid -> seatBid.getBid().stream() .filter(Objects::nonNull) - .flatMap(Collection::stream) - .map(bid -> BidderBid.of(bid, BidderUtil.getBidType(bid, impMap), bidResponse.getCur())) + .map(bid -> BidderBid.of( + seatBid.getSeat(), bid, BidderUtil.getBidType(bid, impMap), bidResponse.getCur()))) .toList(); } } diff --git a/src/main/java/org/prebid/server/bidder/aax/AaxBidder.java b/src/main/java/org/prebid/server/bidder/aax/AaxBidder.java index 0762313bd6d..8f1d34dadaf 100644 --- a/src/main/java/org/prebid/server/bidder/aax/AaxBidder.java +++ b/src/main/java/org/prebid/server/bidder/aax/AaxBidder.java @@ -6,7 +6,6 @@ import com.iab.openrtb.request.Imp; import com.iab.openrtb.response.Bid; import com.iab.openrtb.response.BidResponse; -import com.iab.openrtb.response.SeatBid; import org.apache.commons.collections4.CollectionUtils; import org.prebid.server.bidder.Bidder; import org.prebid.server.bidder.model.BidderBid; @@ -23,7 +22,6 @@ import org.prebid.server.util.ObjectUtil; import java.util.ArrayList; -import java.util.Collection; import java.util.Collections; import java.util.List; import java.util.Objects; @@ -71,16 +69,15 @@ private List bidsFromResponse(BidRequest bidRequest, return bidResponse.getSeatbid().stream() .filter(Objects::nonNull) - .map(SeatBid::getBid) - .filter(Objects::nonNull) - .flatMap(Collection::stream) - .filter(Objects::nonNull) - .map(bid -> resolveBidderBid(bid, bidRequest.getImp(), errorList)) + .filter(seatBid -> seatBid.getBid() != null) + .flatMap(seatBid -> seatBid.getBid().stream() + .filter(Objects::nonNull) + .map(bid -> resolveBidderBid(bid, bidRequest.getImp(), errorList, seatBid.getSeat()))) .filter(Objects::nonNull) .collect(Collectors.toList()); } - private BidderBid resolveBidderBid(Bid bid, List imps, List errors) { + private BidderBid resolveBidderBid(Bid bid, List imps, List errors, String originalSeat) { final BidType bidType; try { bidType = getBidType(bid, imps); @@ -88,7 +85,7 @@ private BidderBid resolveBidderBid(Bid bid, List imps, List er errors.add(BidderError.badServerResponse(e.getMessage())); return null; } - return BidderBid.of(bid, bidType, USD_CURRENCY); + return BidderBid.of(originalSeat, bid, bidType, USD_CURRENCY); } private BidType getBidType(Bid bid, List imps) { @@ -138,4 +135,5 @@ private static BidType bidTypeFromImp(String impId, List imps) { return bidType; } + } diff --git a/src/main/java/org/prebid/server/bidder/adagio/AdagioBidder.java b/src/main/java/org/prebid/server/bidder/adagio/AdagioBidder.java index a211f6267b4..1eadd9ec53e 100644 --- a/src/main/java/org/prebid/server/bidder/adagio/AdagioBidder.java +++ b/src/main/java/org/prebid/server/bidder/adagio/AdagioBidder.java @@ -59,16 +59,17 @@ private List extractBids(BidResponse bidResponse, List e .filter(Objects::nonNull) .flatMap(seatBid -> seatBid.getBid().stream() .filter(Objects::nonNull) - .map(bid -> makeBid(bid, bidResponse.getCur(), errors))) + .map(bid -> makeBid(bid, bidResponse.getCur(), errors, seatBid.getSeat()))) .filter(Objects::nonNull) .toList(); } - private BidderBid makeBid(Bid bid, String currency, List errors) { + private BidderBid makeBid(Bid bid, String currency, List errors, String originalSeat) { try { final ExtBidPrebid extBidPrebid = parseBidExt(bid); return BidderBid.builder() .bid(bid) + .originalSeat(originalSeat) .type(getBidType(bid)) .bidCurrency(currency) .videoInfo(extBidPrebid != null ? extBidPrebid.getVideo() : null) diff --git a/src/main/java/org/prebid/server/bidder/adelement/AdelementBidder.java b/src/main/java/org/prebid/server/bidder/adelement/AdelementBidder.java index 17685dcb2f0..94aac64287a 100644 --- a/src/main/java/org/prebid/server/bidder/adelement/AdelementBidder.java +++ b/src/main/java/org/prebid/server/bidder/adelement/AdelementBidder.java @@ -4,7 +4,6 @@ import com.iab.openrtb.request.BidRequest; import com.iab.openrtb.request.Imp; import com.iab.openrtb.response.BidResponse; -import com.iab.openrtb.response.SeatBid; import io.vertx.core.http.HttpMethod; import org.apache.commons.collections4.CollectionUtils; import org.prebid.server.bidder.Bidder; @@ -23,7 +22,6 @@ import org.prebid.server.util.HttpUtil; import org.prebid.server.util.Uri; -import java.util.Collection; import java.util.Collections; import java.util.List; import java.util.Objects; @@ -91,10 +89,10 @@ private static List extractBids(BidResponse bidResponse) { private static List bidsFromResponse(BidResponse bidResponse) { return bidResponse.getSeatbid().stream() .filter(Objects::nonNull) - .map(SeatBid::getBid) - .filter(Objects::nonNull) - .flatMap(Collection::stream) - .map(bid -> BidderBid.of(bid, getBidType(bid.getMtype()), bidResponse.getCur())) + .filter(seatBid -> seatBid.getBid() != null) + .flatMap(seatBid -> seatBid.getBid().stream() + .filter(Objects::nonNull) + .map(bid -> BidderBid.of(seatBid.getSeat(), bid, getBidType(bid.getMtype()), bidResponse.getCur()))) .toList(); } diff --git a/src/main/java/org/prebid/server/bidder/adf/AdfBidder.java b/src/main/java/org/prebid/server/bidder/adf/AdfBidder.java index c1e55bf8332..fea4e028a8d 100644 --- a/src/main/java/org/prebid/server/bidder/adf/AdfBidder.java +++ b/src/main/java/org/prebid/server/bidder/adf/AdfBidder.java @@ -7,7 +7,6 @@ import com.iab.openrtb.request.Imp; import com.iab.openrtb.response.Bid; import com.iab.openrtb.response.BidResponse; -import com.iab.openrtb.response.SeatBid; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.ObjectUtils; import org.apache.commons.lang3.StringUtils; @@ -29,7 +28,6 @@ import org.prebid.server.util.ObjectUtil; import java.util.ArrayList; -import java.util.Collection; import java.util.Collections; import java.util.List; import java.util.Objects; @@ -124,16 +122,15 @@ private List extractBids(BidResponse bidResponse, List e return bidResponse.getSeatbid().stream() .filter(Objects::nonNull) - .map(SeatBid::getBid) - .filter(Objects::nonNull) - .flatMap(Collection::stream) - .filter(Objects::nonNull) - .map(bid -> makeBidderBid(bid, bidResponse.getCur(), errors)) + .filter(seatBid -> seatBid.getBid() != null) + .flatMap(seatBid -> seatBid.getBid().stream() + .filter(Objects::nonNull) + .map(bid -> makeBidderBid(bid, bidResponse.getCur(), errors, seatBid.getSeat()))) .filter(Objects::nonNull) .toList(); } - private BidderBid makeBidderBid(Bid bid, String bidCurrency, List errors) { + private BidderBid makeBidderBid(Bid bid, String bidCurrency, List errors, String originalSeat) { final JsonNode prebidNode = ObjectUtil.getIfNotNull(bid.getExt(), node -> node.get("prebid")); final JsonNode typeNode = ObjectUtil.getIfNotNull(prebidNode, node -> node.get("type")); final BidType bidType; @@ -149,7 +146,7 @@ private BidderBid makeBidderBid(Bid bid, String bidCurrency, List e return null; } - return BidderBid.of(bid, bidType, bidCurrency); + return BidderBid.of(originalSeat, bid, bidType, bidCurrency); } private void addMediaTypeParseError(List errors, String impId) { diff --git a/src/main/java/org/prebid/server/bidder/adhese/AdheseBidder.java b/src/main/java/org/prebid/server/bidder/adhese/AdheseBidder.java index f45326cd25a..0d769ca1bdc 100644 --- a/src/main/java/org/prebid/server/bidder/adhese/AdheseBidder.java +++ b/src/main/java/org/prebid/server/bidder/adhese/AdheseBidder.java @@ -121,19 +121,21 @@ private static Map> getSlotParameter(ExtImpAdhese extImpAdh public Result> makeBids(BidderCall httpCall, BidRequest bidRequest) { try { final BidResponse bidResponse = mapper.decodeValue(httpCall.getResponse().getBody(), BidResponse.class); - final Optional optionalBid = getBid(bidResponse); + final Optional optionalSeatBid = getSeatBid(bidResponse); - if (optionalBid.isEmpty()) { + if (optionalSeatBid.isEmpty()) { return Result.empty(); } - final Bid bid = optionalBid.get(); + final SeatBid seatBid = optionalSeatBid.get(); + final Bid bid = seatBid.getBid().stream().filter(Objects::nonNull).findFirst().orElseThrow(); final AdheseOriginData originData = toAdheseOriginData(bid.getExt().get("adhese")); final Bid modifiedBid = bid.toBuilder() .ext(mapper.mapper().valueToTree(originData)) // unwrap from "adhese" .build(); - final BidderBid bidderBid = BidderBid.of(modifiedBid, getBidType(bidRequest), bidResponse.getCur()); + final BidderBid bidderBid = BidderBid.of( + seatBid.getSeat(), modifiedBid, getBidType(bidRequest), bidResponse.getCur()); return Result.of(Collections.singletonList(bidderBid), Collections.emptyList()); } catch (DecodeException | PreBidException e) { @@ -141,14 +143,14 @@ public Result> makeBids(BidderCall httpCall, BidRequ } } - private static Optional getBid(BidResponse bidResponse) { + private static Optional getSeatBid(BidResponse bidResponse) { return Optional.ofNullable(bidResponse) .map(BidResponse::getSeatbid) .stream() .flatMap(Collection::stream) - .map(SeatBid::getBid) .filter(Objects::nonNull) - .flatMap(Collection::stream) + .filter(seatBid -> CollectionUtils.isNotEmpty(seatBid.getBid())) + .filter(seatBid -> seatBid.getBid().stream().anyMatch(Objects::nonNull)) .findFirst(); } diff --git a/src/main/java/org/prebid/server/bidder/adkernel/AdkernelBidder.java b/src/main/java/org/prebid/server/bidder/adkernel/AdkernelBidder.java index d75b2688cd6..a77d5e3753f 100644 --- a/src/main/java/org/prebid/server/bidder/adkernel/AdkernelBidder.java +++ b/src/main/java/org/prebid/server/bidder/adkernel/AdkernelBidder.java @@ -7,7 +7,6 @@ import com.iab.openrtb.request.Site; import com.iab.openrtb.response.Bid; import com.iab.openrtb.response.BidResponse; -import com.iab.openrtb.response.SeatBid; import io.vertx.core.MultiMap; import io.vertx.core.http.HttpMethod; import org.apache.commons.collections4.CollectionUtils; @@ -27,7 +26,6 @@ import org.prebid.server.util.Uri; import java.util.ArrayList; -import java.util.Collection; import java.util.Collections; import java.util.HashMap; import java.util.List; @@ -238,17 +236,18 @@ private static List extractBids(BidResponse bidResponse) { private static List bidsFromResponse(BidResponse bidResponse) { return bidResponse.getSeatbid().stream() - .map(SeatBid::getBid) - .flatMap(Collection::stream) - .map(bid -> makeBidderBid(bid, bidResponse.getCur())) + .filter(Objects::nonNull) + .flatMap(seatBid -> seatBid.getBid().stream() + .filter(Objects::nonNull) + .map(bid -> makeBidderBid(bid, bidResponse.getCur(), seatBid.getSeat()))) .toList(); } - private static BidderBid makeBidderBid(Bid bid, String currency) { + private static BidderBid makeBidderBid(Bid bid, String currency, String originalSeat) { final Optional mfSuffix = getMfSuffix(bid.getImpid()); final Bid updatedBid = mfSuffix.map(suffix -> removeMfSuffixFromImpId(bid, suffix)).orElse(bid); - return BidderBid.of(updatedBid, getBidType(bid), currency); + return BidderBid.of(originalSeat, updatedBid, getBidType(bid), currency); } private static Optional getMfSuffix(String impId) { diff --git a/src/main/java/org/prebid/server/bidder/adkerneladn/AdkernelAdnBidder.java b/src/main/java/org/prebid/server/bidder/adkerneladn/AdkernelAdnBidder.java index 6dfcbd7f749..d24187662d5 100644 --- a/src/main/java/org/prebid/server/bidder/adkerneladn/AdkernelAdnBidder.java +++ b/src/main/java/org/prebid/server/bidder/adkerneladn/AdkernelAdnBidder.java @@ -8,7 +8,6 @@ import com.iab.openrtb.request.Imp; import com.iab.openrtb.request.Site; import com.iab.openrtb.response.BidResponse; -import com.iab.openrtb.response.SeatBid; import io.vertx.core.MultiMap; import io.vertx.core.http.HttpMethod; import org.apache.commons.collections4.CollectionUtils; @@ -29,7 +28,6 @@ import org.prebid.server.util.Uri; import java.util.ArrayList; -import java.util.Collection; import java.util.Collections; import java.util.HashMap; import java.util.List; @@ -228,11 +226,13 @@ private static List extractBids(BidRequest bidRequest, BidResponse bi private static List bidsFromResponse(BidRequest bidRequest, BidResponse bidResponse) { return bidResponse.getSeatbid().stream() - .map(SeatBid::getBid) .filter(Objects::nonNull) - .flatMap(Collection::stream) - .filter(Objects::nonNull) - .map(bid -> BidderBid.of(bid, getType(bid.getImpid(), bidRequest.getImp()), bidResponse.getCur())) + .filter(seatBid -> seatBid.getBid() != null) + .flatMap(seatBid -> seatBid.getBid().stream() + .filter(Objects::nonNull) + .map(bid -> BidderBid.of( + seatBid.getSeat(), bid, + getType(bid.getImpid(), bidRequest.getImp()), bidResponse.getCur()))) .toList(); } diff --git a/src/main/java/org/prebid/server/bidder/adman/AdmanBidder.java b/src/main/java/org/prebid/server/bidder/adman/AdmanBidder.java index 7a9d6fdf5a8..39342dac532 100644 --- a/src/main/java/org/prebid/server/bidder/adman/AdmanBidder.java +++ b/src/main/java/org/prebid/server/bidder/adman/AdmanBidder.java @@ -5,7 +5,6 @@ import com.iab.openrtb.request.Imp; import com.iab.openrtb.response.Bid; import com.iab.openrtb.response.BidResponse; -import com.iab.openrtb.response.SeatBid; import org.apache.commons.collections4.CollectionUtils; import org.prebid.server.bidder.Bidder; import org.prebid.server.bidder.model.BidderBid; @@ -23,7 +22,6 @@ import org.prebid.server.util.HttpUtil; import java.util.ArrayList; -import java.util.Collection; import java.util.Collections; import java.util.List; import java.util.Objects; @@ -102,16 +100,16 @@ private List extractBids(BidResponse bidResponse, List e return bidResponse.getSeatbid().stream() .filter(Objects::nonNull) - .map(SeatBid::getBid) - .filter(Objects::nonNull) - .flatMap(Collection::stream) - .filter(Objects::nonNull) - .map(bid -> resolveBidderBid(bidResponse.getCur(), imps, bid, errors)) + .filter(seatBid -> seatBid.getBid() != null) + .flatMap(seatBid -> seatBid.getBid().stream() + .filter(Objects::nonNull) + .map(bid -> resolveBidderBid(bidResponse.getCur(), imps, bid, errors, seatBid.getSeat()))) .filter(Objects::nonNull) .toList(); } - private BidderBid resolveBidderBid(String currency, List imps, Bid bid, List errors) { + private BidderBid resolveBidderBid(String currency, List imps, Bid bid, List errors, + String originalSeat) { final BidType bidType; try { bidType = getBidType(bid.getImpid(), imps); @@ -119,7 +117,7 @@ private BidderBid resolveBidderBid(String currency, List imps, Bid bid, Lis errors.add(BidderError.badServerResponse(e.getMessage())); return null; } - return BidderBid.of(bid, bidType, currency); + return BidderBid.of(originalSeat, bid, bidType, currency); } private BidType getBidType(String impId, List imps) { @@ -133,4 +131,5 @@ private BidType getBidType(String impId, List imps) { } throw new PreBidException("Failed to find impression \"%s\"".formatted(impId)); } + } diff --git a/src/main/java/org/prebid/server/bidder/admatic/AdmaticBidder.java b/src/main/java/org/prebid/server/bidder/admatic/AdmaticBidder.java index 6fd7a8def0a..2bf5015d791 100644 --- a/src/main/java/org/prebid/server/bidder/admatic/AdmaticBidder.java +++ b/src/main/java/org/prebid/server/bidder/admatic/AdmaticBidder.java @@ -6,7 +6,6 @@ import com.iab.openrtb.request.Imp; import com.iab.openrtb.response.Bid; import com.iab.openrtb.response.BidResponse; -import com.iab.openrtb.response.SeatBid; import io.vertx.core.MultiMap; import org.apache.commons.collections4.CollectionUtils; import org.prebid.server.bidder.Bidder; @@ -26,7 +25,6 @@ import org.prebid.server.util.Uri; import java.util.ArrayList; -import java.util.Collection; import java.util.Collections; import java.util.List; import java.util.Map; @@ -117,10 +115,10 @@ private static List extractBids(BidRequest bidRequest, return bidResponse.getSeatbid().stream() .filter(Objects::nonNull) - .map(SeatBid::getBid) - .filter(Objects::nonNull) - .flatMap(Collection::stream) - .map(bid -> BidderBid.of(bid, getBidType(bid, impMap), bidResponse.getCur())) + .filter(seatBid -> seatBid.getBid() != null) + .flatMap(seatBid -> seatBid.getBid().stream() + .filter(Objects::nonNull) + .map(bid -> BidderBid.of(seatBid.getSeat(), bid, getBidType(bid, impMap), bidResponse.getCur()))) .toList(); } diff --git a/src/main/java/org/prebid/server/bidder/admixer/AdmixerBidder.java b/src/main/java/org/prebid/server/bidder/admixer/AdmixerBidder.java index e5853b8b4a1..0e46ea470bb 100644 --- a/src/main/java/org/prebid/server/bidder/admixer/AdmixerBidder.java +++ b/src/main/java/org/prebid/server/bidder/admixer/AdmixerBidder.java @@ -6,7 +6,6 @@ import com.iab.openrtb.request.BidRequest; import com.iab.openrtb.request.Imp; import com.iab.openrtb.response.BidResponse; -import com.iab.openrtb.response.SeatBid; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.ObjectUtils; import org.apache.commons.lang3.StringUtils; @@ -27,7 +26,6 @@ import java.math.BigDecimal; import java.util.ArrayList; -import java.util.Collection; import java.util.Collections; import java.util.List; import java.util.Map; @@ -124,9 +122,12 @@ public Result> makeBids(BidderCall httpCall, BidRequ } final List bidderBids = bidResponse.getSeatbid().stream() - .map(SeatBid::getBid) - .flatMap(Collection::stream) - .map(bid -> BidderBid.of(bid, getBidType(bid.getImpid(), bidRequest.getImp()), bidResponse.getCur())) + .filter(Objects::nonNull) + .flatMap(seatBid -> seatBid.getBid().stream() + .filter(Objects::nonNull) + .map(bid -> BidderBid.of( + seatBid.getSeat(), bid, + getBidType(bid.getImpid(), bidRequest.getImp()), bidResponse.getCur()))) .toList(); return Result.withValues(bidderBids); diff --git a/src/main/java/org/prebid/server/bidder/adot/AdotBidder.java b/src/main/java/org/prebid/server/bidder/adot/AdotBidder.java index b08b67adefe..5c01db9993f 100644 --- a/src/main/java/org/prebid/server/bidder/adot/AdotBidder.java +++ b/src/main/java/org/prebid/server/bidder/adot/AdotBidder.java @@ -5,7 +5,6 @@ import com.iab.openrtb.request.Imp; import com.iab.openrtb.response.Bid; import com.iab.openrtb.response.BidResponse; -import com.iab.openrtb.response.SeatBid; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.Strings; @@ -30,7 +29,6 @@ import java.math.BigDecimal; import java.util.ArrayList; import java.util.Arrays; -import java.util.Collection; import java.util.Collections; import java.util.List; import java.util.Objects; @@ -99,18 +97,17 @@ private List extractBids(BidResponse bidResponse) { private List bidsFromResponse(BidResponse bidResponse) { return bidResponse.getSeatbid().stream() .filter(Objects::nonNull) - .map(SeatBid::getBid) - .filter(Objects::nonNull) - .flatMap(Collection::stream) - .filter(Objects::nonNull) - .map(bid -> createBidderBid(bid, bidResponse)) + .filter(seatBid -> seatBid.getBid() != null) + .flatMap(seatBid -> seatBid.getBid().stream() + .filter(Objects::nonNull) + .map(bid -> createBidderBid(bid, bidResponse, seatBid.getSeat()))) .filter(Objects::nonNull) .toList(); } - private BidderBid createBidderBid(Bid bid, BidResponse bidResponse) { + private BidderBid createBidderBid(Bid bid, BidResponse bidResponse, String originalSeat) { try { - return BidderBid.of(resolveMacros(bid), getBidType(bid), bidResponse.getCur()); + return BidderBid.of(originalSeat, resolveMacros(bid), getBidType(bid), bidResponse.getCur()); } catch (PreBidException e) { return null; } @@ -150,4 +147,5 @@ private String parseBidExtType(Bid bid) { throw new PreBidException("Wrong Adot bid ext in bid with id : " + bid.getId()); } } + } diff --git a/src/main/java/org/prebid/server/bidder/adpone/AdponeBidder.java b/src/main/java/org/prebid/server/bidder/adpone/AdponeBidder.java index 42e5534a6e8..0bd1068a46f 100644 --- a/src/main/java/org/prebid/server/bidder/adpone/AdponeBidder.java +++ b/src/main/java/org/prebid/server/bidder/adpone/AdponeBidder.java @@ -2,7 +2,6 @@ import com.iab.openrtb.request.BidRequest; import com.iab.openrtb.response.BidResponse; -import com.iab.openrtb.response.SeatBid; import io.vertx.core.http.HttpMethod; import org.apache.commons.collections4.CollectionUtils; import org.prebid.server.bidder.Bidder; @@ -17,7 +16,6 @@ import org.prebid.server.proto.openrtb.ext.response.BidType; import org.prebid.server.util.HttpUtil; -import java.util.Collection; import java.util.Collections; import java.util.List; import java.util.Objects; @@ -74,10 +72,10 @@ private List extractBids(BidResponse bidResponse) { private List bidsFromResponse(BidResponse bidResponse) { return bidResponse.getSeatbid().stream() .filter(Objects::nonNull) - .map(SeatBid::getBid) - .filter(Objects::nonNull) - .flatMap(Collection::stream) - .map(bid -> BidderBid.of(bid, BidType.banner, bidResponse.getCur())) + .filter(seatBid -> seatBid.getBid() != null) + .flatMap(seatBid -> seatBid.getBid().stream() + .filter(Objects::nonNull) + .map(bid -> BidderBid.of(seatBid.getSeat(), bid, BidType.banner, bidResponse.getCur()))) .toList(); } } diff --git a/src/main/java/org/prebid/server/bidder/adprime/AdprimeBidder.java b/src/main/java/org/prebid/server/bidder/adprime/AdprimeBidder.java index 32f97c7c51b..a876d5353d3 100644 --- a/src/main/java/org/prebid/server/bidder/adprime/AdprimeBidder.java +++ b/src/main/java/org/prebid/server/bidder/adprime/AdprimeBidder.java @@ -9,7 +9,6 @@ import com.iab.openrtb.request.User; import com.iab.openrtb.response.Bid; import com.iab.openrtb.response.BidResponse; -import com.iab.openrtb.response.SeatBid; import org.apache.commons.collections4.CollectionUtils; import org.prebid.server.bidder.Bidder; import org.prebid.server.bidder.model.BidderBid; @@ -27,7 +26,6 @@ import org.prebid.server.util.HttpUtil; import java.util.ArrayList; -import java.util.Collection; import java.util.Collections; import java.util.List; import java.util.Objects; @@ -138,15 +136,15 @@ private static List extractBids(BidResponse bidResponse, List bidsFromResponse(BidResponse bidResponse, List errors) { return bidResponse.getSeatbid().stream() .filter(Objects::nonNull) - .map(SeatBid::getBid) - .filter(Objects::nonNull) - .flatMap(Collection::stream) - .map(bid -> resolveBidderBid(bid, bidResponse.getCur(), errors)) + .filter(seatBid -> seatBid.getBid() != null) + .flatMap(seatBid -> seatBid.getBid().stream() + .filter(Objects::nonNull) + .map(bid -> resolveBidderBid(bid, bidResponse.getCur(), errors, seatBid.getSeat()))) .filter(Objects::nonNull) .toList(); } - private static BidderBid resolveBidderBid(Bid bid, String currency, List errors) { + private static BidderBid resolveBidderBid(Bid bid, String currency, List errors, String originalSeat) { final BidType bidType; try { bidType = getBidType(bid); @@ -154,7 +152,7 @@ private static BidderBid resolveBidderBid(Bid bid, String currency, List extractBids(BidResponse bidResponse, List im private static List createBiddersBid(BidResponse bidResponse, List imps, List errors) { return bidResponse.getSeatbid().stream() .filter(Objects::nonNull) - .map(SeatBid::getBid) - .filter(Objects::nonNull) - .flatMap(Collection::stream) - .map(bid -> createBidderBid(bid, imps, bidResponse.getCur(), errors)) + .filter(seatBid -> seatBid.getBid() != null) + .flatMap(seatBid -> seatBid.getBid().stream() + .filter(Objects::nonNull) + .map(bid -> createBidderBid(bid, imps, bidResponse.getCur(), errors, seatBid.getSeat()))) .filter(Objects::nonNull) .toList(); } - private static BidderBid createBidderBid(Bid bid, List imps, String currency, List errors) { + private static BidderBid createBidderBid(Bid bid, List imps, String currency, List errors, + String originalSeat) { final BidType bidType; try { bidType = getBidType(bid.getImpid(), bid.getId(), imps); @@ -159,7 +158,7 @@ private static BidderBid createBidderBid(Bid bid, List imps, String currenc errors.add(BidderError.badServerResponse(e.getMessage())); return null; } - return BidderBid.of(bid, bidType, currency); + return BidderBid.of(originalSeat, bid, bidType, currency); } private static BidType getBidType(String bidImpId, String bidId, List imps) { @@ -171,4 +170,5 @@ private static BidType getBidType(String bidImpId, String bidId, List imps) throw new PreBidException( "ignoring bid id=%s, request doesn't contain any impression with id=%s".formatted(bidId, bidImpId)); } + } diff --git a/src/main/java/org/prebid/server/bidder/adtelligent/AdtelligentBidder.java b/src/main/java/org/prebid/server/bidder/adtelligent/AdtelligentBidder.java index 8a3a3cae3a5..641f7332077 100644 --- a/src/main/java/org/prebid/server/bidder/adtelligent/AdtelligentBidder.java +++ b/src/main/java/org/prebid/server/bidder/adtelligent/AdtelligentBidder.java @@ -7,7 +7,6 @@ import com.iab.openrtb.request.Video; import com.iab.openrtb.response.Bid; import com.iab.openrtb.response.BidResponse; -import com.iab.openrtb.response.SeatBid; import io.vertx.core.MultiMap; import io.vertx.core.http.HttpMethod; import org.apache.commons.collections4.CollectionUtils; @@ -32,7 +31,6 @@ import java.math.BigDecimal; import java.util.ArrayList; -import java.util.Collection; import java.util.Collections; import java.util.HashMap; import java.util.List; @@ -206,10 +204,11 @@ private static Result> createBiddersBid(BidResponse bidResponse, bidResponse.getSeatbid().stream() .filter(Objects::nonNull) - .map(SeatBid::getBid) - .filter(Objects::nonNull) - .flatMap(Collection::stream) - .forEach(bid -> addBidOrError(bid, idToImps, bidderBids, errors, bidResponse.getCur())); + .filter(seatBid -> CollectionUtils.isNotEmpty(seatBid.getBid())) + .forEach(seatBid -> seatBid.getBid().stream() + .filter(Objects::nonNull) + .forEach(bid -> addBidOrError( + bid, idToImps, bidderBids, errors, bidResponse.getCur(), seatBid.getSeat()))); return Result.of(bidderBids, errors); } @@ -218,12 +217,12 @@ private static Result> createBiddersBid(BidResponse bidResponse, * Creates {@link BidderBid} from {@link Bid} if it has matching {@link Imp}, otherwise adds error to error list. */ private static void addBidOrError(Bid bid, Map idToImps, List bidderBids, - List errors, String currency) { + List errors, String currency, String originalSeat) { final String bidImpId = bid.getImpid(); if (idToImps.containsKey(bidImpId)) { final Video video = idToImps.get(bidImpId).getVideo(); - bidderBids.add(BidderBid.of(bid, video != null ? BidType.video : BidType.banner, currency)); + bidderBids.add(BidderBid.of(originalSeat, bid, video != null ? BidType.video : BidType.banner, currency)); } else { errors.add(BidderError.badServerResponse( "ignoring bid id=%s, request doesn't contain any impression with id=%s" diff --git a/src/main/java/org/prebid/server/bidder/adtonos/AdtonosBidder.java b/src/main/java/org/prebid/server/bidder/adtonos/AdtonosBidder.java index 81ecbe97ca6..40f91838ee1 100644 --- a/src/main/java/org/prebid/server/bidder/adtonos/AdtonosBidder.java +++ b/src/main/java/org/prebid/server/bidder/adtonos/AdtonosBidder.java @@ -5,7 +5,6 @@ import com.iab.openrtb.request.Imp; import com.iab.openrtb.response.Bid; import com.iab.openrtb.response.BidResponse; -import com.iab.openrtb.response.SeatBid; import org.apache.commons.collections4.CollectionUtils; import org.prebid.server.bidder.Bidder; import org.prebid.server.bidder.model.BidderBid; @@ -23,7 +22,6 @@ import org.prebid.server.util.Uri; import java.util.ArrayList; -import java.util.Collection; import java.util.Collections; import java.util.List; import java.util.Objects; @@ -91,18 +89,19 @@ private static List extractBids(BidResponse bidResponse, return bidResponse.getSeatbid().stream() .filter(Objects::nonNull) - .map(SeatBid::getBid) - .filter(Objects::nonNull) - .flatMap(Collection::stream) - .filter(Objects::nonNull) - .map(bid -> makeBidderBid(bid, bidResponse.getCur(), bidRequest, errors)) + .filter(seatBid -> seatBid.getBid() != null) + .flatMap(seatBid -> seatBid.getBid().stream() + .filter(Objects::nonNull) + .map(bid -> + makeBidderBid(bid, bidResponse.getCur(), bidRequest, errors, seatBid.getSeat()))) .filter(Objects::nonNull) .toList(); } - private static BidderBid makeBidderBid(Bid bid, String currency, BidRequest bidRequest, List errors) { + private static BidderBid makeBidderBid(Bid bid, String currency, BidRequest bidRequest, List errors, + String originalSeat) { try { - return BidderBid.of(bid, resolveBidType(bid, bidRequest.getImp()), currency); + return BidderBid.of(originalSeat, bid, resolveBidType(bid, bidRequest.getImp()), currency); } catch (PreBidException e) { errors.add(BidderError.badServerResponse(e.getMessage())); return null; @@ -142,4 +141,5 @@ private static BidType resolveBidType(Bid bid, List imps) throws PreBidExce throw new PreBidException("Failed to find impression: " + impId); } + } diff --git a/src/main/java/org/prebid/server/bidder/adtrgtme/AdtrgtmeBidder.java b/src/main/java/org/prebid/server/bidder/adtrgtme/AdtrgtmeBidder.java index b286e5cd613..2dde267f150 100644 --- a/src/main/java/org/prebid/server/bidder/adtrgtme/AdtrgtmeBidder.java +++ b/src/main/java/org/prebid/server/bidder/adtrgtme/AdtrgtmeBidder.java @@ -6,7 +6,6 @@ import com.iab.openrtb.request.Imp; import com.iab.openrtb.response.Bid; import com.iab.openrtb.response.BidResponse; -import com.iab.openrtb.response.SeatBid; import io.vertx.core.MultiMap; import io.vertx.core.http.HttpMethod; import org.apache.commons.collections4.CollectionUtils; @@ -28,7 +27,6 @@ import org.prebid.server.util.Uri; import java.util.ArrayList; -import java.util.Collection; import java.util.Collections; import java.util.List; import java.util.Objects; @@ -133,16 +131,16 @@ private List extractBids(BidResponse bidResponse, List e return bidResponse.getSeatbid().stream() .filter(Objects::nonNull) - .map(SeatBid::getBid) - .filter(Objects::nonNull) - .flatMap(Collection::stream) - .filter(Objects::nonNull) - .map(bid -> resolveBidderBid(bidResponse.getCur(), imps, bid, errors)) + .filter(seatBid -> seatBid.getBid() != null) + .flatMap(seatBid -> seatBid.getBid().stream() + .filter(Objects::nonNull) + .map(bid -> resolveBidderBid(bidResponse.getCur(), imps, bid, errors, seatBid.getSeat()))) .filter(Objects::nonNull) .toList(); } - private BidderBid resolveBidderBid(String currency, List imps, Bid bid, List errors) { + private BidderBid resolveBidderBid(String currency, List imps, Bid bid, List errors, + String originalSeat) { final BidType bidType; try { bidType = getBidType(bid.getImpid(), imps); @@ -150,7 +148,7 @@ private BidderBid resolveBidderBid(String currency, List imps, Bid bid, Lis errors.add(BidderError.badServerResponse(e.getMessage())); return null; } - return BidderBid.of(bid, bidType, currency); + return BidderBid.of(originalSeat, bid, bidType, currency); } private BidType getBidType(String impId, List imps) { diff --git a/src/main/java/org/prebid/server/bidder/aduptech/AduptechBidder.java b/src/main/java/org/prebid/server/bidder/aduptech/AduptechBidder.java index d6a826e9977..13fc8f5a80b 100644 --- a/src/main/java/org/prebid/server/bidder/aduptech/AduptechBidder.java +++ b/src/main/java/org/prebid/server/bidder/aduptech/AduptechBidder.java @@ -4,7 +4,6 @@ import com.iab.openrtb.request.Imp; import com.iab.openrtb.response.Bid; import com.iab.openrtb.response.BidResponse; -import com.iab.openrtb.response.SeatBid; import io.vertx.core.MultiMap; import org.apache.commons.collections4.CollectionUtils; import org.prebid.server.bidder.Bidder; @@ -24,7 +23,6 @@ import java.math.BigDecimal; import java.util.ArrayList; -import java.util.Collection; import java.util.Collections; import java.util.Currency; import java.util.List; @@ -144,18 +142,17 @@ private static List extractBids(BidResponse bidResponse, List bidsFromResponse(BidResponse bidResponse, List errors) { return bidResponse.getSeatbid().stream() .filter(Objects::nonNull) - .map(SeatBid::getBid) - .filter(Objects::nonNull) - .flatMap(Collection::stream) - .filter(Objects::nonNull) - .map(bid -> makeBid(bid, bidResponse.getCur(), errors)) + .filter(seatBid -> seatBid.getBid() != null) + .flatMap(seatBid -> seatBid.getBid().stream() + .filter(Objects::nonNull) + .map(bid -> makeBid(bid, bidResponse.getCur(), errors, seatBid.getSeat()))) .filter(Objects::nonNull) .collect(Collectors.toList()); } - private static BidderBid makeBid(Bid bid, String currency, List errors) { + private static BidderBid makeBid(Bid bid, String currency, List errors, String originalSeat) { try { - return BidderBid.of(bid, getBidType(bid.getMtype()), currency); + return BidderBid.of(originalSeat, bid, getBidType(bid.getMtype()), currency); } catch (PreBidException e) { errors.add(BidderError.badServerResponse(e.getMessage())); return null; @@ -169,4 +166,5 @@ private static BidType getBidType(Integer markupType) { case null, default -> throw new PreBidException("Unknown markup type: " + markupType); }; } + } diff --git a/src/main/java/org/prebid/server/bidder/advangelists/AdvangelistsBidder.java b/src/main/java/org/prebid/server/bidder/advangelists/AdvangelistsBidder.java index 1efebd91633..76d5671c1cc 100644 --- a/src/main/java/org/prebid/server/bidder/advangelists/AdvangelistsBidder.java +++ b/src/main/java/org/prebid/server/bidder/advangelists/AdvangelistsBidder.java @@ -210,6 +210,9 @@ private static List extractBids(BidRequest bidRequest, BidResponse bi private static List bidsFromResponse(BidRequest bidRequest, BidResponse bidResponse) { final SeatBid firstSeatBid = bidResponse.getSeatbid().getFirst(); + if (firstSeatBid == null) { + return Collections.emptyList(); + } final List bids = firstSeatBid.getBid(); if (CollectionUtils.isEmpty(bids)) { @@ -218,7 +221,9 @@ private static List bidsFromResponse(BidRequest bidRequest, BidRespon return bids.stream() .filter(Objects::nonNull) - .map(bid -> BidderBid.of(bid, getBidType(bid.getImpid(), bidRequest.getImp()), bidResponse.getCur())) + .map(bid -> BidderBid.of( + firstSeatBid.getSeat(), bid, + getBidType(bid.getImpid(), bidRequest.getImp()), bidResponse.getCur())) .toList(); } diff --git a/src/main/java/org/prebid/server/bidder/adverxo/AdverxoBidder.java b/src/main/java/org/prebid/server/bidder/adverxo/AdverxoBidder.java index 33e87800582..f2fb0358729 100644 --- a/src/main/java/org/prebid/server/bidder/adverxo/AdverxoBidder.java +++ b/src/main/java/org/prebid/server/bidder/adverxo/AdverxoBidder.java @@ -5,7 +5,6 @@ import com.iab.openrtb.request.Imp; import com.iab.openrtb.response.Bid; import com.iab.openrtb.response.BidResponse; -import com.iab.openrtb.response.SeatBid; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.StringUtils; import org.prebid.server.bidder.Bidder; @@ -27,7 +26,6 @@ import java.math.BigDecimal; import java.util.ArrayList; -import java.util.Collection; import java.util.Collections; import java.util.List; import java.util.Objects; @@ -141,20 +139,19 @@ private List extractBids(BidResponse bidResponse) { return bidResponse.getSeatbid().stream() .filter(Objects::nonNull) - .map(SeatBid::getBid) - .filter(Objects::nonNull) - .flatMap(Collection::stream) - .filter(Objects::nonNull) - .map(bid -> makeBid(bid, bidResponse.getCur())) + .filter(seatBid -> seatBid.getBid() != null) + .flatMap(seatBid -> seatBid.getBid().stream() + .filter(Objects::nonNull) + .map(bid -> makeBid(bid, bidResponse.getCur(), seatBid.getSeat()))) .collect(Collectors.toList()); } - private BidderBid makeBid(Bid bid, String currency) { + private BidderBid makeBid(Bid bid, String currency, String originalSeat) { final BidType bidType = getBidType(bid.getMtype()); final String resolvedAdm = bidType == BidType.xNative ? resolveAdm(bid.getAdm(), bid.getPrice()) : bid.getAdm(); final Bid processedBid = processBidMacros(bid, resolvedAdm); - return BidderBid.of(processedBid, bidType, currency); + return BidderBid.of(originalSeat, processedBid, bidType, currency); } private static BidType getBidType(Integer mType) { @@ -181,4 +178,5 @@ private static String replaceMacro(String input, String value) { private static String resolveAdm(String bidAdm, BigDecimal price) { return StringUtils.isNotBlank(bidAdm) ? bidAdm.replace("${AUCTION_PRICE}", String.valueOf(price)) : bidAdm; } + } diff --git a/src/main/java/org/prebid/server/bidder/adview/AdviewBidder.java b/src/main/java/org/prebid/server/bidder/adview/AdviewBidder.java index b954df13597..0c98fb9b6d5 100644 --- a/src/main/java/org/prebid/server/bidder/adview/AdviewBidder.java +++ b/src/main/java/org/prebid/server/bidder/adview/AdviewBidder.java @@ -7,7 +7,6 @@ import com.iab.openrtb.request.Imp; import com.iab.openrtb.response.Bid; import com.iab.openrtb.response.BidResponse; -import com.iab.openrtb.response.SeatBid; import org.apache.commons.collections4.CollectionUtils; import org.prebid.server.bidder.Bidder; import org.prebid.server.bidder.model.BidderBid; @@ -28,7 +27,6 @@ import java.math.BigDecimal; import java.util.ArrayList; -import java.util.Collection; import java.util.Collections; import java.util.List; import java.util.Objects; @@ -155,18 +153,18 @@ private static List extractBids(BidResponse bidResponse, List bidsFromResponse(BidResponse bidResponse, List errors) { return bidResponse.getSeatbid().stream() .filter(Objects::nonNull) - .map(SeatBid::getBid) - .filter(Objects::nonNull) - .flatMap(Collection::stream) - .map(bid -> makeBid(bid, bidResponse.getCur(), errors)) + .filter(seatBid -> seatBid.getBid() != null) + .flatMap(seatBid -> seatBid.getBid().stream() + .filter(Objects::nonNull) + .map(bid -> makeBid(bid, bidResponse.getCur(), errors, seatBid.getSeat()))) .filter(Objects::nonNull) .toList(); } - private static BidderBid makeBid(Bid bid, String currency, List errors) { + private static BidderBid makeBid(Bid bid, String currency, List errors, String originalSeat) { try { final BidType mediaType = getBidMediaType(bid); - return BidderBid.of(bid, mediaType, currency); + return BidderBid.of(originalSeat, bid, mediaType, currency); } catch (PreBidException e) { errors.add(BidderError.badServerResponse(e.getMessage())); return null; diff --git a/src/main/java/org/prebid/server/bidder/adxcg/AdxcgBidder.java b/src/main/java/org/prebid/server/bidder/adxcg/AdxcgBidder.java index 2c06630f6f7..5cd0220f753 100644 --- a/src/main/java/org/prebid/server/bidder/adxcg/AdxcgBidder.java +++ b/src/main/java/org/prebid/server/bidder/adxcg/AdxcgBidder.java @@ -3,7 +3,6 @@ import com.iab.openrtb.request.BidRequest; import com.iab.openrtb.response.Bid; import com.iab.openrtb.response.BidResponse; -import com.iab.openrtb.response.SeatBid; import org.apache.commons.collections4.CollectionUtils; import org.prebid.server.bidder.Bidder; import org.prebid.server.bidder.model.BidderBid; @@ -19,7 +18,6 @@ import org.prebid.server.util.HttpUtil; import java.util.ArrayList; -import java.util.Collection; import java.util.Collections; import java.util.List; import java.util.Objects; @@ -60,18 +58,18 @@ private static List extractBids(BidResponse bidResponse, List bidsFromResponse(BidResponse bidResponse, List errors) { return bidResponse.getSeatbid().stream() .filter(Objects::nonNull) - .map(SeatBid::getBid) - .filter(Objects::nonNull) - .flatMap(Collection::stream) - .map(bid -> makeBid(bid, bidResponse.getCur(), errors)) + .filter(seatBid -> seatBid.getBid() != null) + .flatMap(seatBid -> seatBid.getBid().stream() + .filter(Objects::nonNull) + .map(bid -> makeBid(bid, bidResponse.getCur(), errors, seatBid.getSeat()))) .filter(Objects::nonNull) .toList(); } - private static BidderBid makeBid(Bid bid, String currency, List errors) { + private static BidderBid makeBid(Bid bid, String currency, List errors, String originalSeat) { try { final BidType bidType = getBidMediaType(bid); - return BidderBid.of(bid, bidType, currency); + return BidderBid.of(originalSeat, bid, bidType, currency); } catch (PreBidException e) { errors.add(BidderError.badInput(e.getMessage())); return null; diff --git a/src/main/java/org/prebid/server/bidder/adyoulike/AdyoulikeBidder.java b/src/main/java/org/prebid/server/bidder/adyoulike/AdyoulikeBidder.java index 355562c5075..147c2b47ec4 100644 --- a/src/main/java/org/prebid/server/bidder/adyoulike/AdyoulikeBidder.java +++ b/src/main/java/org/prebid/server/bidder/adyoulike/AdyoulikeBidder.java @@ -4,7 +4,6 @@ import com.iab.openrtb.request.BidRequest; import com.iab.openrtb.request.Imp; import com.iab.openrtb.response.BidResponse; -import com.iab.openrtb.response.SeatBid; import io.vertx.core.MultiMap; import io.vertx.core.http.HttpMethod; import org.apache.commons.collections4.CollectionUtils; @@ -28,7 +27,6 @@ import java.math.BigDecimal; import java.util.ArrayList; -import java.util.Collection; import java.util.Collections; import java.util.List; import java.util.Objects; @@ -151,10 +149,11 @@ private static List extractBids(BidRequest bidRequest, BidResponse bi private static List bidsFromResponse(BidRequest bidRequest, BidResponse bidResponse) { return bidResponse.getSeatbid().stream() .filter(Objects::nonNull) - .map(SeatBid::getBid) - .filter(Objects::nonNull) - .flatMap(Collection::stream) - .map(bid -> BidderBid.of(bid, getBidType(bid.getImpid(), bidRequest.getImp()), BIDDER_CURRENCY)) + .filter(seatBid -> seatBid.getBid() != null) + .flatMap(seatBid -> seatBid.getBid().stream() + .filter(Objects::nonNull) + .map(bid -> BidderBid.of( + seatBid.getSeat(), bid, getBidType(bid.getImpid(), bidRequest.getImp()), BIDDER_CURRENCY))) .toList(); } diff --git a/src/main/java/org/prebid/server/bidder/afront/AfrontBidder.java b/src/main/java/org/prebid/server/bidder/afront/AfrontBidder.java index c9645907b63..5cd691a94f1 100644 --- a/src/main/java/org/prebid/server/bidder/afront/AfrontBidder.java +++ b/src/main/java/org/prebid/server/bidder/afront/AfrontBidder.java @@ -5,7 +5,6 @@ import com.iab.openrtb.request.Device; import com.iab.openrtb.request.Imp; import com.iab.openrtb.response.BidResponse; -import com.iab.openrtb.response.SeatBid; import io.vertx.core.MultiMap; import org.apache.commons.collections4.CollectionUtils; import org.prebid.server.bidder.Bidder; @@ -24,7 +23,6 @@ import org.prebid.server.util.HttpUtil; import org.prebid.server.util.Uri; -import java.util.Collection; import java.util.Collections; import java.util.List; import java.util.Map; @@ -126,11 +124,11 @@ private static List bidsFromResponse(BidRequest bidRequest, BidRespon return bidResponse.getSeatbid().stream() .filter(Objects::nonNull) - .map(SeatBid::getBid) - .filter(Objects::nonNull) - .flatMap(Collection::stream) - .filter(Objects::nonNull) - .map(bid -> BidderBid.of(bid, getBidType(bid.getImpid(), imps), bidResponse.getCur())) + .filter(seatBid -> seatBid.getBid() != null) + .flatMap(seatBid -> seatBid.getBid().stream() + .filter(Objects::nonNull) + .map(bid -> BidderBid.of( + seatBid.getSeat(), bid, getBidType(bid.getImpid(), imps), bidResponse.getCur()))) .collect(Collectors.toList()); } diff --git a/src/main/java/org/prebid/server/bidder/aidem/AidemBidder.java b/src/main/java/org/prebid/server/bidder/aidem/AidemBidder.java index 3025427c6b0..7fbd76e1b5c 100644 --- a/src/main/java/org/prebid/server/bidder/aidem/AidemBidder.java +++ b/src/main/java/org/prebid/server/bidder/aidem/AidemBidder.java @@ -5,7 +5,6 @@ import com.iab.openrtb.request.Imp; import com.iab.openrtb.response.Bid; import com.iab.openrtb.response.BidResponse; -import com.iab.openrtb.response.SeatBid; import org.apache.commons.collections4.CollectionUtils; import org.prebid.server.bidder.Bidder; import org.prebid.server.bidder.model.BidderBid; @@ -23,7 +22,6 @@ import org.prebid.server.util.Uri; import java.util.ArrayList; -import java.util.Collection; import java.util.Collections; import java.util.List; import java.util.Objects; @@ -85,21 +83,20 @@ private static List extractBids(BidResponse bidResponse, if (bidResponse == null || CollectionUtils.isEmpty(bidResponse.getSeatbid())) { return Collections.emptyList(); } - return bidResponse.getSeatbid().stream() .filter(Objects::nonNull) - .map(SeatBid::getBid) - .filter(Objects::nonNull) - .flatMap(Collection::stream) - .filter(Objects::nonNull) - .map(bid -> makeBidderBid(bid, bidResponse.getCur(), errors)) + .filter(seatBid -> seatBid.getBid() != null) + .flatMap(seatBid -> seatBid.getBid().stream() + .filter(Objects::nonNull) + .map(bid -> makeBidderBid(bid, bidResponse.getCur(), errors, seatBid.getSeat()))) .filter(Objects::nonNull) .toList(); } - private static BidderBid makeBidderBid(Bid bid, String currency, List errors) { + private static BidderBid makeBidderBid(Bid bid, String currency, List errors, + String originalSeat) { try { - return BidderBid.of(bid, resolveBidType(bid), currency); + return BidderBid.of(originalSeat, bid, resolveBidType(bid), currency); } catch (PreBidException e) { errors.add(BidderError.badServerResponse(e.getMessage())); return null; diff --git a/src/main/java/org/prebid/server/bidder/aja/AjaBidder.java b/src/main/java/org/prebid/server/bidder/aja/AjaBidder.java index 5f9c167c6f5..edb747831be 100644 --- a/src/main/java/org/prebid/server/bidder/aja/AjaBidder.java +++ b/src/main/java/org/prebid/server/bidder/aja/AjaBidder.java @@ -5,7 +5,6 @@ import com.iab.openrtb.request.Imp; import com.iab.openrtb.response.Bid; import com.iab.openrtb.response.BidResponse; -import com.iab.openrtb.response.SeatBid; import org.apache.commons.collections4.CollectionUtils; import org.prebid.server.bidder.Bidder; import org.prebid.server.bidder.aja.proto.ExtImpAja; @@ -23,7 +22,6 @@ import org.prebid.server.util.HttpUtil; import java.util.ArrayList; -import java.util.Collection; import java.util.Collections; import java.util.HashMap; import java.util.List; @@ -112,19 +110,20 @@ private Result> extractBids(BidRequest bidRequest, BidResponse b final List errors = new ArrayList<>(); final List bidderBids = bidResponse.getSeatbid().stream() .filter(Objects::nonNull) - .map(SeatBid::getBid) - .filter(Objects::nonNull) - .flatMap(Collection::stream) - .map(bid -> bidFromResponse(bidRequest.getImp(), bid, errors, bidResponse.getCur())) + .filter(seatBid -> seatBid.getBid() != null) + .flatMap(seatBid -> seatBid.getBid().stream() + .filter(Objects::nonNull) + .map(bid -> bidFromResponse(bidRequest.getImp(), bid, errors, bidResponse.getCur(), seatBid.getSeat()))) .filter(Objects::nonNull) .toList(); return Result.of(bidderBids, errors); } - private static BidderBid bidFromResponse(List imps, Bid bid, List errors, String currency) { + private static BidderBid bidFromResponse(List imps, Bid bid, List errors, String currency, + String originalSeat) { try { final BidType bidType = getBidType(bid.getImpid(), imps, bid.getId()); - return BidderBid.of(bid, bidType, currency); + return BidderBid.of(originalSeat, bid, bidType, currency); } catch (PreBidException e) { errors.add(BidderError.badInput(e.getMessage())); return null; @@ -143,4 +142,5 @@ private static BidType getBidType(String impId, List imps, String bidId) { } throw new PreBidException("Response received for unexpected type of bid bidID: " + bidId); } + } diff --git a/src/main/java/org/prebid/server/bidder/akcelo/AkceloBidder.java b/src/main/java/org/prebid/server/bidder/akcelo/AkceloBidder.java index c214112735e..89ed1664768 100644 --- a/src/main/java/org/prebid/server/bidder/akcelo/AkceloBidder.java +++ b/src/main/java/org/prebid/server/bidder/akcelo/AkceloBidder.java @@ -10,7 +10,6 @@ import com.iab.openrtb.request.Site; import com.iab.openrtb.response.Bid; import com.iab.openrtb.response.BidResponse; -import com.iab.openrtb.response.SeatBid; import org.apache.commons.collections4.CollectionUtils; import org.prebid.server.bidder.Bidder; import org.prebid.server.bidder.model.BidderBid; @@ -31,7 +30,6 @@ import org.prebid.server.util.HttpUtil; import java.util.ArrayList; -import java.util.Collection; import java.util.Collections; import java.util.List; import java.util.Objects; @@ -126,18 +124,17 @@ private List extractBids(BidResponse bidResponse, List e return bidResponse.getSeatbid().stream() .filter(Objects::nonNull) - .map(SeatBid::getBid) - .filter(Objects::nonNull) - .flatMap(Collection::stream) - .filter(Objects::nonNull) - .map(bid -> makeBid(bid, bidResponse.getCur(), errors)) + .filter(seatBid -> seatBid.getBid() != null) + .flatMap(seatBid -> seatBid.getBid().stream() + .filter(Objects::nonNull) + .map(bid -> makeBid(bid, bidResponse.getCur(), errors, seatBid.getSeat()))) .filter(Objects::nonNull) .toList(); } - private BidderBid makeBid(Bid bid, String currency, List errors) { + private BidderBid makeBid(Bid bid, String currency, List errors, String originalSeat) { final BidType bidType = getBidType(bid, errors); - return bidType == null ? null : BidderBid.of(bid, bidType, currency); + return bidType == null ? null : BidderBid.of(originalSeat, bid, bidType, currency); } private BidType getBidType(Bid bid, List errors) { @@ -177,4 +174,5 @@ private ExtBidPrebid parseExtBidPrebid(ObjectNode prebid) { return null; } } + } diff --git a/src/main/java/org/prebid/server/bidder/algorix/AlgorixBidder.java b/src/main/java/org/prebid/server/bidder/algorix/AlgorixBidder.java index ec29e3ee246..81f9b8b957e 100644 --- a/src/main/java/org/prebid/server/bidder/algorix/AlgorixBidder.java +++ b/src/main/java/org/prebid/server/bidder/algorix/AlgorixBidder.java @@ -10,7 +10,6 @@ import com.iab.openrtb.request.Video; import com.iab.openrtb.response.Bid; import com.iab.openrtb.response.BidResponse; -import com.iab.openrtb.response.SeatBid; import io.vertx.core.MultiMap; import io.vertx.core.http.HttpMethod; import org.apache.commons.collections4.CollectionUtils; @@ -33,7 +32,6 @@ import org.prebid.server.util.Uri; import java.util.ArrayList; -import java.util.Collection; import java.util.Collections; import java.util.List; import java.util.Objects; @@ -193,10 +191,10 @@ private List extractBids(BidRequest bidRequest, BidResponse bidRespon private List bidsFromResponse(BidRequest bidRequest, BidResponse bidResponse) { return bidResponse.getSeatbid().stream() .filter(Objects::nonNull) - .map(SeatBid::getBid) - .flatMap(Collection::stream) - .filter(Objects::nonNull) - .map(bid -> BidderBid.of(bid, getBidType(bid, bidRequest.getImp()), bidResponse.getCur())) + .flatMap(seatBid -> seatBid.getBid().stream() + .filter(Objects::nonNull) + .map(bid -> BidderBid.of( + seatBid.getSeat(), bid, getBidType(bid, bidRequest.getImp()), bidResponse.getCur()))) .toList(); } diff --git a/src/main/java/org/prebid/server/bidder/alkimi/AlkimiBidder.java b/src/main/java/org/prebid/server/bidder/alkimi/AlkimiBidder.java index ce4f097d822..45fc5acadf6 100644 --- a/src/main/java/org/prebid/server/bidder/alkimi/AlkimiBidder.java +++ b/src/main/java/org/prebid/server/bidder/alkimi/AlkimiBidder.java @@ -6,7 +6,6 @@ import com.iab.openrtb.request.Imp; import com.iab.openrtb.response.Bid; import com.iab.openrtb.response.BidResponse; -import com.iab.openrtb.response.SeatBid; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.Strings; import org.prebid.server.bidder.Bidder; @@ -26,7 +25,6 @@ import org.prebid.server.util.HttpUtil; import java.math.BigDecimal; -import java.util.Collection; import java.util.Collections; import java.util.List; import java.util.Objects; @@ -108,10 +106,10 @@ private static List extractBids(BidRequest bidRequest, BidResponse bi private static List bidsFromResponse(BidRequest bidRequest, BidResponse bidResponse) { return bidResponse.getSeatbid().stream() .filter(Objects::nonNull) - .map(SeatBid::getBid) - .filter(Objects::nonNull) - .flatMap(Collection::stream) - .map(bid -> resolveBidderBid(bidResponse.getCur(), bidRequest.getImp(), bid)) + .filter(seatBid -> seatBid.getBid() != null) + .flatMap(seatBid -> seatBid.getBid().stream() + .filter(Objects::nonNull) + .map(bid -> resolveBidderBid(bidResponse.getCur(), bidRequest.getImp(), bid, seatBid.getSeat()))) .toList(); } @@ -143,11 +141,12 @@ private static Bid resolveMacros(Bid bid) { .build(); } - private static BidderBid resolveBidderBid(String currency, List imps, Bid bid) { + private static BidderBid resolveBidderBid(String currency, List imps, Bid bid, String originalSeat) { try { - return BidderBid.of(resolveMacros(bid), getBidType(bid.getImpid(), imps), currency); + return BidderBid.of(originalSeat, resolveMacros(bid), getBidType(bid.getImpid(), imps), currency); } catch (PreBidException e) { return null; } } + } diff --git a/src/main/java/org/prebid/server/bidder/alliancegravity/AllianceGravityBidder.java b/src/main/java/org/prebid/server/bidder/alliancegravity/AllianceGravityBidder.java index baa043422f5..977196936dd 100644 --- a/src/main/java/org/prebid/server/bidder/alliancegravity/AllianceGravityBidder.java +++ b/src/main/java/org/prebid/server/bidder/alliancegravity/AllianceGravityBidder.java @@ -10,7 +10,6 @@ import com.iab.openrtb.request.User; import com.iab.openrtb.response.Bid; import com.iab.openrtb.response.BidResponse; -import com.iab.openrtb.response.SeatBid; import io.vertx.core.MultiMap; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.StringUtils; @@ -33,7 +32,6 @@ import org.prebid.server.util.HttpUtil; import java.util.ArrayList; -import java.util.Collection; import java.util.Collections; import java.util.List; import java.util.Objects; @@ -137,18 +135,17 @@ private List extractBids(BidResponse bidResponse, List e return bidResponse.getSeatbid().stream() .filter(Objects::nonNull) - .map(SeatBid::getBid) - .filter(Objects::nonNull) - .flatMap(Collection::stream) - .filter(Objects::nonNull) - .map(bid -> resolveBidderBid(bid, bidResponse.getCur(), errors)) + .filter(seatBid -> seatBid.getBid() != null) + .flatMap(seatBid -> seatBid.getBid().stream() + .filter(Objects::nonNull) + .map(bid -> resolveBidderBid(bid, bidResponse.getCur(), errors, seatBid.getSeat()))) .filter(Objects::nonNull) .toList(); } - private BidderBid resolveBidderBid(Bid bid, String currency, List errors) { + private BidderBid resolveBidderBid(Bid bid, String currency, List errors, String originalSeat) { try { - return BidderBid.of(bid, getBidType(bid), currency); + return BidderBid.of(originalSeat, bid, getBidType(bid), currency); } catch (PreBidException e) { errors.add(BidderError.badServerResponse(e.getMessage())); return null; @@ -172,4 +169,5 @@ private ExtBidPrebid parseExtBidPrebid(JsonNode prebidNode) { return null; } } + } diff --git a/src/main/java/org/prebid/server/bidder/amx/AmxBidder.java b/src/main/java/org/prebid/server/bidder/amx/AmxBidder.java index fc7d1bbeb61..33498171500 100644 --- a/src/main/java/org/prebid/server/bidder/amx/AmxBidder.java +++ b/src/main/java/org/prebid/server/bidder/amx/AmxBidder.java @@ -10,7 +10,6 @@ import com.iab.openrtb.request.Site; import com.iab.openrtb.response.Bid; import com.iab.openrtb.response.BidResponse; -import com.iab.openrtb.response.SeatBid; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.StringUtils; import org.prebid.server.bidder.Bidder; @@ -32,7 +31,6 @@ import org.prebid.server.util.Uri; import java.util.ArrayList; -import java.util.Collection; import java.util.Collections; import java.util.List; import java.util.Objects; @@ -131,31 +129,34 @@ public Result> makeBids(BidderCall httpCall, BidRequ try { final BidResponse bidResponse = mapper.decodeValue(httpCall.getResponse().getBody(), BidResponse.class); final List errors = new ArrayList<>(); + return Result.of(extractBids(bidResponse, errors), errors); } catch (DecodeException | PreBidException e) { return Result.withError(BidderError.badServerResponse(e.getMessage())); } } - private List extractBids(BidResponse bidResponse, List errors) { + private List extractBids(BidResponse bidResponse, + List errors) { if (bidResponse == null || bidResponse.getSeatbid() == null) { return Collections.emptyList(); } return bidsFromResponse(bidResponse, errors); } - private List bidsFromResponse(BidResponse bidResponse, List errors) { + private List bidsFromResponse(BidResponse bidResponse, + List errors) { return bidResponse.getSeatbid().stream() - .map(SeatBid::getBid) - .filter(Objects::nonNull) - .flatMap(Collection::stream) .filter(Objects::nonNull) - .map(bid -> createBidderBid(bid, bidResponse.getCur(), errors)) + .filter(seatBid -> seatBid.getBid() != null) + .flatMap(seatBid -> seatBid.getBid().stream() + .filter(Objects::nonNull) + .map(bid -> createBidderBid(bid, bidResponse.getCur(), errors, seatBid.getSeat()))) .filter(Objects::nonNull) .toList(); } - private BidderBid createBidderBid(Bid bid, String cur, List errors) { + private BidderBid createBidderBid(Bid bid, String cur, List errors, String originalSeat) { final AmxBidExt amxBidExt; try { amxBidExt = parseBidderExt(bid.getExt()); @@ -164,6 +165,7 @@ private BidderBid createBidderBid(Bid bid, String cur, List errors) return null; } return BidderBid.of( + originalSeat, resolveBid(bid, amxBidExt.getDemandSource()), getBidType(amxBidExt), amxBidExt.getBidderCode(), diff --git a/src/main/java/org/prebid/server/bidder/apacdex/ApacdexBidder.java b/src/main/java/org/prebid/server/bidder/apacdex/ApacdexBidder.java index 45e72d1b206..b52f8f567ed 100644 --- a/src/main/java/org/prebid/server/bidder/apacdex/ApacdexBidder.java +++ b/src/main/java/org/prebid/server/bidder/apacdex/ApacdexBidder.java @@ -7,7 +7,6 @@ import com.iab.openrtb.request.Imp; import com.iab.openrtb.response.Bid; import com.iab.openrtb.response.BidResponse; -import com.iab.openrtb.response.SeatBid; import io.vertx.core.MultiMap; import io.vertx.core.http.HttpMethod; import org.apache.commons.collections4.CollectionUtils; @@ -26,7 +25,6 @@ import org.prebid.server.util.HttpUtil; import java.util.ArrayList; -import java.util.Collection; import java.util.Collections; import java.util.List; import java.util.Objects; @@ -112,16 +110,15 @@ private List extractBids(BidResponse bidResponse, List e return bidResponse.getSeatbid().stream() .filter(Objects::nonNull) - .map(SeatBid::getBid) - .filter(Objects::nonNull) - .flatMap(Collection::stream) - .filter(Objects::nonNull) - .map(bid -> constructBidderBid(bid, bidResponse.getCur(), errors)) + .filter(seatBid -> seatBid.getBid() != null) + .flatMap(seatBid -> seatBid.getBid().stream() + .filter(Objects::nonNull) + .map(bid -> constructBidderBid(bid, bidResponse.getCur(), errors, seatBid.getSeat()))) .filter(Objects::nonNull) .toList(); } - private BidderBid constructBidderBid(Bid bid, String currency, List errors) { + private BidderBid constructBidderBid(Bid bid, String currency, List errors, String originalSeat) { final JsonNode extNode = bid.getExt(); final JsonNode bidTypeNode = extNode != null ? extNode.at(BID_TYPE_POINTER) : null; @@ -133,7 +130,7 @@ private BidderBid constructBidderBid(Bid bid, String currency, List final BidType bidType = parseBidType(bidTypeNode, errors); return bidType != null - ? BidderBid.of(bid, parseBidType(bidTypeNode, errors), currency) + ? BidderBid.of(originalSeat, bid, parseBidType(bidTypeNode, errors), currency) : null; } @@ -145,4 +142,5 @@ private BidType parseBidType(JsonNode bidTypeNode, List errors) { return null; } } + } diff --git a/src/main/java/org/prebid/server/bidder/appnexus/AppnexusBidder.java b/src/main/java/org/prebid/server/bidder/appnexus/AppnexusBidder.java index 3f6c5d94e50..1f4dc73b510 100644 --- a/src/main/java/org/prebid/server/bidder/appnexus/AppnexusBidder.java +++ b/src/main/java/org/prebid/server/bidder/appnexus/AppnexusBidder.java @@ -13,7 +13,6 @@ import com.iab.openrtb.request.SupplyChain; import com.iab.openrtb.response.Bid; import com.iab.openrtb.response.BidResponse; -import com.iab.openrtb.response.SeatBid; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.collections4.ListUtils; import org.apache.commons.lang3.BooleanUtils; @@ -463,6 +462,7 @@ public Result> makeBids(BidderCall httpCall, BidRequ final List errors = new ArrayList<>(); try { final BidResponse bidResponse = mapper.decodeValue(httpCall.getResponse().getBody(), BidResponse.class); + return Result.of(extractBids(bidResponse, errors), errors); } catch (DecodeException | PreBidException e) { return Result.withError(BidderError.badServerResponse(e.getMessage())); @@ -476,16 +476,15 @@ private List extractBids(BidResponse bidResponse, List e return bidResponse.getSeatbid().stream() .filter(Objects::nonNull) - .map(SeatBid::getBid) - .filter(Objects::nonNull) - .flatMap(Collection::stream) - .filter(Objects::nonNull) - .map(bid -> toBidderBid(bid, bidResponse.getCur(), errors)) + .filter(seatBid -> seatBid.getBid() != null) + .flatMap(seatBid -> seatBid.getBid().stream() + .filter(Objects::nonNull) + .map(bid -> toBidderBid(bid, bidResponse.getCur(), errors, seatBid.getSeat()))) .filter(Objects::nonNull) .toList(); } - private BidderBid toBidderBid(Bid bid, String currency, List errors) { + private BidderBid toBidderBid(Bid bid, String currency, List errors, String originalSeat) { final AppnexusBidExtAppnexus appnexus; final BidType bidType; try { @@ -498,6 +497,7 @@ private BidderBid toBidderBid(Bid bid, String currency, List errors return BidderBid.builder() .bid(bid.toBuilder().cat(bidCategories(bid, appnexus)).build()) + .originalSeat(originalSeat) .type(bidType) .bidCurrency(currency) .dealPriority(appnexus != null ? appnexus.getDealPriority() : 0) diff --git a/src/main/java/org/prebid/server/bidder/appush/AppushBidder.java b/src/main/java/org/prebid/server/bidder/appush/AppushBidder.java index 4810487e4f0..4c0dcd48272 100644 --- a/src/main/java/org/prebid/server/bidder/appush/AppushBidder.java +++ b/src/main/java/org/prebid/server/bidder/appush/AppushBidder.java @@ -5,7 +5,6 @@ import com.iab.openrtb.request.BidRequest; import com.iab.openrtb.request.Imp; import com.iab.openrtb.response.BidResponse; -import com.iab.openrtb.response.SeatBid; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.StringUtils; import org.prebid.server.bidder.Bidder; @@ -25,7 +24,6 @@ import org.prebid.server.util.HttpUtil; import java.util.ArrayList; -import java.util.Collection; import java.util.Collections; import java.util.List; import java.util.Objects; @@ -123,11 +121,11 @@ private static List extractBids(BidRequest bidRequest, BidResponse bi return bidResponse.getSeatbid().stream() .filter(Objects::nonNull) - .map(SeatBid::getBid) - .filter(Objects::nonNull) - .flatMap(Collection::stream) - .filter(Objects::nonNull) - .map(bid -> BidderBid.of(bid, getBidType(bid.getImpid(), bidRequest.getImp()), bidResponse.getCur())) + .filter(seatBid -> seatBid.getBid() != null) + .flatMap(seatBid -> seatBid.getBid().stream() + .filter(Objects::nonNull) + .map(bid -> BidderBid.of( + seatBid.getSeat(), bid, getBidType(bid.getImpid(), bidRequest.getImp()), bidResponse.getCur()))) .toList(); } diff --git a/src/main/java/org/prebid/server/bidder/aso/AsoBidder.java b/src/main/java/org/prebid/server/bidder/aso/AsoBidder.java index fdf42d11dc7..c6da72208a8 100644 --- a/src/main/java/org/prebid/server/bidder/aso/AsoBidder.java +++ b/src/main/java/org/prebid/server/bidder/aso/AsoBidder.java @@ -6,7 +6,6 @@ import com.iab.openrtb.request.Imp; import com.iab.openrtb.response.Bid; import com.iab.openrtb.response.BidResponse; -import com.iab.openrtb.response.SeatBid; import io.vertx.core.http.HttpMethod; import org.apache.commons.lang3.Strings; import org.prebid.server.bidder.Bidder; @@ -28,7 +27,6 @@ import java.math.BigDecimal; import java.util.ArrayList; -import java.util.Collection; import java.util.Collections; import java.util.List; import java.util.Objects; @@ -122,15 +120,15 @@ private List extractBids(BidResponse bidResponse, List e private List bidsFromResponse(BidResponse bidResponse, List errors) { return bidResponse.getSeatbid().stream() .filter(Objects::nonNull) - .map(SeatBid::getBid) - .filter(Objects::nonNull) - .flatMap(Collection::stream) - .map(bid -> makeBid(bid, bidResponse.getCur(), errors)) + .filter(seatBid -> seatBid.getBid() != null) + .flatMap(seatBid -> seatBid.getBid().stream() + .filter(Objects::nonNull) + .map(bid -> makeBid(bid, bidResponse.getCur(), errors, seatBid.getSeat()))) .filter(Objects::nonNull) .toList(); } - private BidderBid makeBid(Bid bid, String currency, List errors) { + private BidderBid makeBid(Bid bid, String currency, List errors, String originalSeat) { final BidType mediaType = getMediaType(bid, errors); if (mediaType == null) { @@ -145,7 +143,7 @@ private BidderBid makeBid(Bid bid, String currency, List errors) { .adm(Strings.CS.replace(bid.getAdm(), PRICE_MACRO, priceAsString)) .build(); - return BidderBid.of(modifiedBid, mediaType, currency); + return BidderBid.of(originalSeat, modifiedBid, mediaType, currency); } private BidType getMediaType(Bid bid, List errors) { @@ -160,4 +158,5 @@ private BidType getMediaType(Bid bid, List errors) { return null; } } + } diff --git a/src/main/java/org/prebid/server/bidder/audiencenetwork/AudienceNetworkBidder.java b/src/main/java/org/prebid/server/bidder/audiencenetwork/AudienceNetworkBidder.java index d04ddec92d2..1dedb490e39 100644 --- a/src/main/java/org/prebid/server/bidder/audiencenetwork/AudienceNetworkBidder.java +++ b/src/main/java/org/prebid/server/bidder/audiencenetwork/AudienceNetworkBidder.java @@ -11,7 +11,6 @@ import com.iab.openrtb.request.User; import com.iab.openrtb.response.Bid; import com.iab.openrtb.response.BidResponse; -import com.iab.openrtb.response.SeatBid; import io.vertx.core.MultiMap; import io.vertx.core.http.HttpMethod; import org.apache.commons.codec.binary.Hex; @@ -41,7 +40,6 @@ import javax.crypto.Mac; import java.util.ArrayList; import java.util.Arrays; -import java.util.Collection; import java.util.Collections; import java.util.List; import java.util.Objects; @@ -280,17 +278,19 @@ private Result> extractBids(BidResponse bidResponse, List i final List errors = new ArrayList<>(); final List bidderBids = bidResponse.getSeatbid().stream() - .map(SeatBid::getBid) .filter(Objects::nonNull) - .flatMap(Collection::stream) - .map(bid -> toBidderBid(bid, imps, bidResponse.getCur(), errors)) + .filter(seatBid -> seatBid.getBid() != null) + .flatMap(seatBid -> seatBid.getBid().stream() + .filter(Objects::nonNull) + .map(bid -> toBidderBid(bid, imps, bidResponse.getCur(), errors, seatBid.getSeat()))) .filter(Objects::nonNull) .toList(); return Result.of(bidderBids, errors); } - private BidderBid toBidderBid(Bid bid, List imps, String currency, List errors) { + private BidderBid toBidderBid(Bid bid, List imps, String currency, List errors, + String originalSeat) { final String bidId; try { if (StringUtils.isBlank(bid.getAdm())) { @@ -308,7 +308,7 @@ private BidderBid toBidderBid(Bid bid, List imps, String currency, List> makeBids(BidderCall httpCall, BidRequ final List bidderBids = new ArrayList<>(); final List errors = new ArrayList<>(); + if (bidResponse == null || CollectionUtils.isEmpty(bidResponse.getSeatbid())) { + return Result.of(bidderBids, errors); + } for (SeatBid seatBid : bidResponse.getSeatbid()) { + if (seatBid == null || CollectionUtils.isEmpty(seatBid.getBid())) { + continue; + } for (Bid bid : seatBid.getBid()) { + if (bid == null) { + continue; + } final BidType bidType; try { bidType = getBidType(bid); @@ -63,7 +73,7 @@ public Result> makeBids(BidderCall httpCall, BidRequ errors.add(BidderError.badServerResponse(e.getMessage())); continue; } - bidderBids.add(BidderBid.of(bid, bidType, bidResponse.getCur())); + bidderBids.add(BidderBid.of(seatBid.getSeat(), bid, bidType, bidResponse.getCur())); } } return Result.of(bidderBids, errors); diff --git a/src/main/java/org/prebid/server/bidder/axis/AxisBidder.java b/src/main/java/org/prebid/server/bidder/axis/AxisBidder.java index 265ce948214..0a166f394b3 100644 --- a/src/main/java/org/prebid/server/bidder/axis/AxisBidder.java +++ b/src/main/java/org/prebid/server/bidder/axis/AxisBidder.java @@ -5,7 +5,6 @@ import com.iab.openrtb.request.Imp; import com.iab.openrtb.response.Bid; import com.iab.openrtb.response.BidResponse; -import com.iab.openrtb.response.SeatBid; import org.apache.commons.collections4.CollectionUtils; import org.prebid.server.bidder.Bidder; import org.prebid.server.bidder.model.BidderBid; @@ -23,7 +22,6 @@ import org.prebid.server.util.HttpUtil; import java.util.ArrayList; -import java.util.Collection; import java.util.Collections; import java.util.List; import java.util.Objects; @@ -94,16 +92,16 @@ private List extractBids(BidResponse bidResponse, List e return bidResponse.getSeatbid().stream() .filter(Objects::nonNull) - .map(SeatBid::getBid) - .filter(Objects::nonNull) - .flatMap(Collection::stream) - .filter(Objects::nonNull) - .map(bid -> resolveBidderBid(bidResponse.getCur(), imps, bid, errors)) + .filter(seatBid -> seatBid.getBid() != null) + .flatMap(seatBid -> seatBid.getBid().stream() + .filter(Objects::nonNull) + .map(bid -> resolveBidderBid(bidResponse.getCur(), imps, bid, errors, seatBid.getSeat()))) .filter(Objects::nonNull) .toList(); } - private BidderBid resolveBidderBid(String currency, List imps, Bid bid, List errors) { + private BidderBid resolveBidderBid(String currency, List imps, Bid bid, List errors, + String originalSeat) { final BidType bidType; try { bidType = getBidType(bid.getImpid(), imps); @@ -111,7 +109,7 @@ private BidderBid resolveBidderBid(String currency, List imps, Bid bid, Lis errors.add(BidderError.badServerResponse(e.getMessage())); return null; } - return BidderBid.of(bid, bidType, currency); + return BidderBid.of(originalSeat, bid, bidType, currency); } private BidType getBidType(String impId, List imps) { @@ -130,4 +128,5 @@ private BidType getBidType(String impId, List imps) { } throw new PreBidException("Failed to find impression \"%s\"".formatted(impId)); } + } diff --git a/src/main/java/org/prebid/server/bidder/axonix/AxonixBidder.java b/src/main/java/org/prebid/server/bidder/axonix/AxonixBidder.java index 247eb090f8d..cc7f437de7a 100644 --- a/src/main/java/org/prebid/server/bidder/axonix/AxonixBidder.java +++ b/src/main/java/org/prebid/server/bidder/axonix/AxonixBidder.java @@ -5,7 +5,6 @@ import com.iab.openrtb.request.Imp; import com.iab.openrtb.response.Bid; import com.iab.openrtb.response.BidResponse; -import com.iab.openrtb.response.SeatBid; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.Strings; import org.prebid.server.bidder.Bidder; @@ -24,7 +23,6 @@ import org.prebid.server.util.Uri; import java.math.BigDecimal; -import java.util.Collection; import java.util.Collections; import java.util.List; import java.util.Objects; @@ -87,12 +85,13 @@ private static List extractBids(BidRequest bidRequest, BidResponse bi return bidResponse.getSeatbid().stream() .filter(Objects::nonNull) - .map(SeatBid::getBid) - .filter(Objects::nonNull) - .flatMap(Collection::stream) - .filter(Objects::nonNull) - .map(bid -> BidderBid.of(resolveMacros(bid), getMediaType(bid.getImpid(), bidRequest.getImp()), - bidResponse.getCur())) + .filter(seatBid -> seatBid.getBid() != null) + .flatMap(seatBid -> seatBid.getBid().stream() + .filter(Objects::nonNull) + .map(bid -> BidderBid.of( + seatBid.getSeat(), resolveMacros(bid), + getMediaType(bid.getImpid(), bidRequest.getImp()), + bidResponse.getCur()))) .toList(); } diff --git a/src/main/java/org/prebid/server/bidder/beachfront/BeachfrontBidder.java b/src/main/java/org/prebid/server/bidder/beachfront/BeachfrontBidder.java index b5f125c6617..8ad93118780 100644 --- a/src/main/java/org/prebid/server/bidder/beachfront/BeachfrontBidder.java +++ b/src/main/java/org/prebid/server/bidder/beachfront/BeachfrontBidder.java @@ -16,6 +16,7 @@ import com.iab.openrtb.request.Video; import com.iab.openrtb.response.Bid; import com.iab.openrtb.response.BidResponse; +import com.iab.openrtb.response.SeatBid; import io.vertx.core.MultiMap; import io.vertx.core.http.HttpMethod; import org.apache.commons.collections4.CollectionUtils; @@ -509,13 +510,18 @@ private List processVideoResponse(String responseBody, HttpRequest bids = bidResponse.getSeatbid().getFirst().getBid(); + final SeatBid seatBid = bidResponse.getSeatbid().getFirst(); + if (seatBid == null || CollectionUtils.isEmpty(seatBid.getBid())) { + return Collections.emptyList(); + } + final List bids = seatBid.getBid(); final List updatedBids = httpRequest.getUri().contains(NURL_VIDEO_ENDPOINT_SUFFIX) ? updateNurlVideoBids(bids, videoRequest.getRequest().getImp()) : updateVideoBids(bids); return updatedBids.stream() - .map(bid -> BidderBid.of(bid, BidType.video, bidResponse.getCur())) + .filter(Objects::nonNull) + .map(bid -> BidderBid.of(seatBid.getSeat(), bid, BidType.video, bidResponse.getCur())) .toList(); } @@ -565,7 +571,8 @@ private BidderBid updateBidderBid(BidderBid bidderBid) { final String primaryCategory = CollectionUtils.isNotEmpty(cat) ? cat.getFirst() : null; final Bid resolvedBid = bid.toBuilder().ext(resolveBidExt(duration, primaryCategory)).build(); - return BidderBid.of(resolvedBid, bidderBid.getType(), bidderBid.getBidCurrency()); + return BidderBid.of( + bidderBid.getOriginalSeat(), resolvedBid, bidderBid.getType(), bidderBid.getBidCurrency()); } private static Integer resolveDuration(ObjectNode bidExt) { diff --git a/src/main/java/org/prebid/server/bidder/beintoo/BeintooBidder.java b/src/main/java/org/prebid/server/bidder/beintoo/BeintooBidder.java index eb3eb6a27e7..aa72480f100 100644 --- a/src/main/java/org/prebid/server/bidder/beintoo/BeintooBidder.java +++ b/src/main/java/org/prebid/server/bidder/beintoo/BeintooBidder.java @@ -8,7 +8,6 @@ import com.iab.openrtb.request.Imp; import com.iab.openrtb.request.Site; import com.iab.openrtb.response.BidResponse; -import com.iab.openrtb.response.SeatBid; import io.vertx.core.MultiMap; import io.vertx.core.http.HttpMethod; import org.apache.commons.collections4.CollectionUtils; @@ -30,7 +29,6 @@ import org.prebid.server.util.HttpUtil; import java.math.BigDecimal; -import java.util.Collection; import java.util.Collections; import java.util.List; import java.util.Objects; @@ -189,11 +187,11 @@ private static List extractBids(BidResponse bidResponse) { private static List bidsFromResponse(BidResponse bidResponse) { return bidResponse.getSeatbid().stream() .filter(Objects::nonNull) - .map(SeatBid::getBid) - .filter(Objects::nonNull) - .flatMap(Collection::stream) + .filter(seatBid -> seatBid.getBid() != null) + .flatMap(seatBid -> seatBid.getBid().stream() + .filter(Objects::nonNull) .map(bid -> bid.toBuilder().impid(bid.getId()).build()) - .map(bid -> BidderBid.of(bid, BidType.banner, bidResponse.getCur())) + .map(bid -> BidderBid.of(seatBid.getSeat(), bid, BidType.banner, bidResponse.getCur()))) .toList(); } } diff --git a/src/main/java/org/prebid/server/bidder/bematterfull/BematterfullBidder.java b/src/main/java/org/prebid/server/bidder/bematterfull/BematterfullBidder.java index 2b95cf685d1..fe863a3771b 100644 --- a/src/main/java/org/prebid/server/bidder/bematterfull/BematterfullBidder.java +++ b/src/main/java/org/prebid/server/bidder/bematterfull/BematterfullBidder.java @@ -8,7 +8,6 @@ import com.iab.openrtb.request.Imp; import com.iab.openrtb.response.Bid; import com.iab.openrtb.response.BidResponse; -import com.iab.openrtb.response.SeatBid; import io.vertx.core.http.HttpMethod; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.StringUtils; @@ -29,7 +28,6 @@ import org.prebid.server.util.Uri; import java.util.ArrayList; -import java.util.Collection; import java.util.List; import java.util.Objects; import java.util.Optional; @@ -111,23 +109,22 @@ private List extractBids(BidResponse bidResponse, List e return bidResponse.getSeatbid() .stream() .filter(Objects::nonNull) - .map(SeatBid::getBid) - .filter(Objects::nonNull) - .flatMap(Collection::stream) - .filter(Objects::nonNull) - .map(bid -> makeBid(bid, bidResponse.getCur(), errors)) + .filter(seatBid -> seatBid.getBid() != null) + .flatMap(seatBid -> seatBid.getBid().stream() + .filter(Objects::nonNull) + .map(bid -> makeBid(bid, bidResponse.getCur(), errors, seatBid.getSeat()))) .filter(Objects::nonNull) .toList(); } - private BidderBid makeBid(Bid bid, String currency, List errors) { + private BidderBid makeBid(Bid bid, String currency, List errors, String originalSeat) { return Optional.ofNullable(bid.getExt()) .map(ext -> ext.get(EXT_PREBID)) .filter(JsonNode::isObject) .map(ObjectNode.class::cast) .map(prebid -> parseExtBidPrebid(prebid, errors)) .map(ExtBidPrebid::getType) - .map(type -> BidderBid.of(bid, type, currency)) + .map(type -> BidderBid.of(originalSeat, bid, type, currency)) .orElse(null); } @@ -139,4 +136,5 @@ private ExtBidPrebid parseExtBidPrebid(ObjectNode prebid, List erro return null; } } + } diff --git a/src/main/java/org/prebid/server/bidder/beop/BeopBidder.java b/src/main/java/org/prebid/server/bidder/beop/BeopBidder.java index 0848d5329a7..1127014a6df 100644 --- a/src/main/java/org/prebid/server/bidder/beop/BeopBidder.java +++ b/src/main/java/org/prebid/server/bidder/beop/BeopBidder.java @@ -5,7 +5,6 @@ import com.iab.openrtb.request.Imp; import com.iab.openrtb.response.Bid; import com.iab.openrtb.response.BidResponse; -import com.iab.openrtb.response.SeatBid; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.StringUtils; import org.prebid.server.bidder.Bidder; @@ -24,7 +23,6 @@ import org.prebid.server.util.Uri; import java.util.ArrayList; -import java.util.Collection; import java.util.List; import java.util.Objects; @@ -99,18 +97,17 @@ public Result> makeBids(BidderCall httpCall, BidRequ private static List extractBids(BidResponse bidResponse, List errors) { return bidResponse.getSeatbid().stream() .filter(Objects::nonNull) - .map(SeatBid::getBid) - .filter(Objects::nonNull) - .flatMap(Collection::stream) - .filter(Objects::nonNull) - .map(bid -> makeBidderBid(bid, bidResponse.getCur(), errors)) + .filter(seatBid -> seatBid.getBid() != null) + .flatMap(seatBid -> seatBid.getBid().stream() + .filter(Objects::nonNull) + .map(bid -> makeBidderBid(bid, bidResponse.getCur(), errors, seatBid.getSeat()))) .filter(Objects::nonNull) .toList(); } - private static BidderBid makeBidderBid(Bid bid, String currency, List errors) { + private static BidderBid makeBidderBid(Bid bid, String currency, List errors, String originalSeat) { try { - return BidderBid.of(bid, resolveBidType(bid), currency); + return BidderBid.of(originalSeat, bid, resolveBidType(bid), currency); } catch (PreBidException e) { errors.add(BidderError.badServerResponse(e.getMessage())); return null; @@ -126,4 +123,5 @@ private static BidType resolveBidType(Bid bid) { "Failed to parse bid mtype for impression \"%s\"".formatted(bid.getImpid())); }; } + } diff --git a/src/main/java/org/prebid/server/bidder/between/BetweenBidder.java b/src/main/java/org/prebid/server/bidder/between/BetweenBidder.java index 94be04947b6..2c07090f5c3 100644 --- a/src/main/java/org/prebid/server/bidder/between/BetweenBidder.java +++ b/src/main/java/org/prebid/server/bidder/between/BetweenBidder.java @@ -8,7 +8,6 @@ import com.iab.openrtb.request.Imp; import com.iab.openrtb.request.Site; import com.iab.openrtb.response.BidResponse; -import com.iab.openrtb.response.SeatBid; import io.vertx.core.MultiMap; import io.vertx.core.http.HttpMethod; import org.apache.commons.collections4.CollectionUtils; @@ -30,7 +29,6 @@ import org.prebid.server.util.Uri; import java.util.ArrayList; -import java.util.Collection; import java.util.Collections; import java.util.List; import java.util.Objects; @@ -187,10 +185,10 @@ private static List extractBids(BidResponse bidResponse) { private static List bidsFromResponse(BidResponse bidResponse) { return bidResponse.getSeatbid().stream() .filter(Objects::nonNull) - .map(SeatBid::getBid) - .filter(Objects::nonNull) - .flatMap(Collection::stream) - .map(bid -> BidderBid.of(bid, BidType.banner, bidResponse.getCur())) + .filter(seatBid -> seatBid.getBid() != null) + .flatMap(seatBid -> seatBid.getBid().stream() + .filter(Objects::nonNull) + .map(bid -> BidderBid.of(seatBid.getSeat(), bid, BidType.banner, bidResponse.getCur()))) .toList(); } } diff --git a/src/main/java/org/prebid/server/bidder/beyondmedia/BeyondMediaBidder.java b/src/main/java/org/prebid/server/bidder/beyondmedia/BeyondMediaBidder.java index 957ae5f8f43..72a1aee19f0 100644 --- a/src/main/java/org/prebid/server/bidder/beyondmedia/BeyondMediaBidder.java +++ b/src/main/java/org/prebid/server/bidder/beyondmedia/BeyondMediaBidder.java @@ -5,7 +5,6 @@ import com.iab.openrtb.request.BidRequest; import com.iab.openrtb.request.Imp; import com.iab.openrtb.response.BidResponse; -import com.iab.openrtb.response.SeatBid; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.StringUtils; import org.prebid.server.bidder.Bidder; @@ -25,7 +24,6 @@ import org.prebid.server.util.HttpUtil; import java.util.ArrayList; -import java.util.Collection; import java.util.Collections; import java.util.List; import java.util.Objects; @@ -118,11 +116,11 @@ private static List extractBids(BidRequest bidRequest, BidResponse bi return bidResponse.getSeatbid().stream() .filter(Objects::nonNull) - .map(SeatBid::getBid) - .filter(Objects::nonNull) - .flatMap(Collection::stream) - .filter(Objects::nonNull) - .map(bid -> BidderBid.of(bid, getBidType(bid.getImpid(), bidRequest.getImp()), bidResponse.getCur())) + .filter(seatBid -> seatBid.getBid() != null) + .flatMap(seatBid -> seatBid.getBid().stream() + .filter(Objects::nonNull) + .map(bid -> BidderBid.of( + seatBid.getSeat(), bid, getBidType(bid.getImpid(), bidRequest.getImp()), bidResponse.getCur()))) .toList(); } diff --git a/src/main/java/org/prebid/server/bidder/bidmatic/BidmaticBidder.java b/src/main/java/org/prebid/server/bidder/bidmatic/BidmaticBidder.java index dadf1f6e9f4..51c9ecd3898 100644 --- a/src/main/java/org/prebid/server/bidder/bidmatic/BidmaticBidder.java +++ b/src/main/java/org/prebid/server/bidder/bidmatic/BidmaticBidder.java @@ -5,7 +5,6 @@ import com.iab.openrtb.request.Imp; import com.iab.openrtb.response.Bid; import com.iab.openrtb.response.BidResponse; -import com.iab.openrtb.response.SeatBid; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.tuple.Pair; import org.prebid.server.bidder.Bidder; @@ -24,7 +23,6 @@ import org.prebid.server.util.Uri; import java.util.ArrayList; -import java.util.Collection; import java.util.Collections; import java.util.HashMap; import java.util.List; @@ -134,20 +132,20 @@ private static List extractBids(BidRequest bidRequest, return bidResponse.getSeatbid().stream() .filter(Objects::nonNull) - .map(SeatBid::getBid) - .filter(Objects::nonNull) - .flatMap(Collection::stream) - .filter(Objects::nonNull) - .map(bid -> makeBid(bid, impMap, bidResponse.getCur(), errors)) + .filter(seatBid -> seatBid.getBid() != null) + .flatMap(seatBid -> seatBid.getBid().stream() + .filter(Objects::nonNull) + .map(bid -> makeBid(bid, impMap, bidResponse.getCur(), errors, seatBid.getSeat()))) .filter(Objects::nonNull) .toList(); } - private static BidderBid makeBid(Bid bid, Map impMap, String currency, List errors) { + private static BidderBid makeBid(Bid bid, Map impMap, String currency, List errors, + String originalSeat) { try { final Pair bidType = getBidType(bid, impMap); final Bid modifiedBid = bid.toBuilder().mtype(bidType.getRight()).build(); - return BidderBid.of(modifiedBid, bidType.getLeft(), currency); + return BidderBid.of(originalSeat, modifiedBid, bidType.getLeft(), currency); } catch (PreBidException e) { errors.add(BidderError.badServerResponse(e.getMessage())); return null; @@ -173,4 +171,5 @@ private static Pair getBidType(Bid bid, Map impId return Pair.of(BidType.banner, 1); } } + } diff --git a/src/main/java/org/prebid/server/bidder/bidmyadz/BidmyadzBidder.java b/src/main/java/org/prebid/server/bidder/bidmyadz/BidmyadzBidder.java index e871390d01e..a0006477e1d 100644 --- a/src/main/java/org/prebid/server/bidder/bidmyadz/BidmyadzBidder.java +++ b/src/main/java/org/prebid/server/bidder/bidmyadz/BidmyadzBidder.java @@ -5,6 +5,7 @@ import com.iab.openrtb.request.Device; import com.iab.openrtb.response.Bid; import com.iab.openrtb.response.BidResponse; +import com.iab.openrtb.response.SeatBid; import io.vertx.core.MultiMap; import io.vertx.core.http.HttpMethod; import org.apache.commons.collections4.CollectionUtils; @@ -90,14 +91,18 @@ private BidderBid extractBids(BidResponse bidResponse) { } private BidderBid bidsFromResponse(BidResponse bidResponse) { - final List bids = bidResponse.getSeatbid().getFirst().getBid(); + final SeatBid seatBid = bidResponse.getSeatbid().getFirst(); + if (seatBid == null) { + throw new PreBidException("Empty SeatBid"); + } + final List bids = seatBid.getBid(); if (CollectionUtils.isEmpty(bids)) { throw new PreBidException("Empty SeatBid.Bids"); } final Bid bid = bids.getFirst(); - return BidderBid.of(bid, getBidType(bid.getExt()), bidResponse.getCur()); + return BidderBid.of(seatBid.getSeat(), bid, getBidType(bid.getExt()), bidResponse.getCur()); } private static BidType getBidType(JsonNode ext) { diff --git a/src/main/java/org/prebid/server/bidder/bidscube/BidscubeBidder.java b/src/main/java/org/prebid/server/bidder/bidscube/BidscubeBidder.java index 2cf8045edbd..7591196833e 100644 --- a/src/main/java/org/prebid/server/bidder/bidscube/BidscubeBidder.java +++ b/src/main/java/org/prebid/server/bidder/bidscube/BidscubeBidder.java @@ -6,7 +6,6 @@ import com.iab.openrtb.request.Imp; import com.iab.openrtb.response.Bid; import com.iab.openrtb.response.BidResponse; -import com.iab.openrtb.response.SeatBid; import org.apache.commons.collections4.CollectionUtils; import org.prebid.server.bidder.Bidder; import org.prebid.server.bidder.model.BidderBid; @@ -22,7 +21,6 @@ import org.prebid.server.util.HttpUtil; import java.util.ArrayList; -import java.util.Collection; import java.util.Collections; import java.util.List; import java.util.Objects; @@ -93,15 +91,16 @@ private List extractBids(BidResponse bidResponse, List e private List bidsFromResponse(BidResponse bidResponse, List errors) { return bidResponse.getSeatbid().stream() .filter(Objects::nonNull) - .map(SeatBid::getBid) - .filter(Objects::nonNull) - .flatMap(Collection::stream) - .map(bid -> constructBidderBid(bid, bidResponse, errors)) + .filter(seatBid -> seatBid.getBid() != null) + .flatMap(seatBid -> seatBid.getBid().stream() + .filter(Objects::nonNull) + .map(bid -> constructBidderBid(bid, bidResponse, errors, seatBid.getSeat()))) .filter(Objects::nonNull) .toList(); } - private BidderBid constructBidderBid(Bid bid, BidResponse bidResponse, List errors) { + private BidderBid constructBidderBid(Bid bid, BidResponse bidResponse, List errors, + String originalSeat) { final JsonNode extNode = bid.getExt(); final JsonNode typeNode = isNotEmptyOrMissedNode(extNode) ? extNode.at("/prebid/type") : null; @@ -110,7 +109,7 @@ private BidderBid constructBidderBid(Bid bid, BidResponse bidResponse, List extractBids(BidResponse bidResponse) { private static List bidsFromResponse(BidResponse bidResponse) { return bidResponse.getSeatbid().stream() .filter(Objects::nonNull) - .map(SeatBid::getBid) - .filter(Objects::nonNull) - .flatMap(Collection::stream) - .map(bid -> BidderBid.of(bid, BidType.video, bidResponse.getCur())) + .filter(seatBid -> seatBid.getBid() != null) + .flatMap(seatBid -> seatBid.getBid().stream() + .filter(Objects::nonNull) + .map(bid -> BidderBid.of(seatBid.getSeat(), bid, BidType.video, bidResponse.getCur()))) .toList(); } } diff --git a/src/main/java/org/prebid/server/bidder/bidtheatre/BidTheatreBidder.java b/src/main/java/org/prebid/server/bidder/bidtheatre/BidTheatreBidder.java index 53ae434ed08..1c739f38b11 100644 --- a/src/main/java/org/prebid/server/bidder/bidtheatre/BidTheatreBidder.java +++ b/src/main/java/org/prebid/server/bidder/bidtheatre/BidTheatreBidder.java @@ -5,7 +5,6 @@ import com.iab.openrtb.request.BidRequest; import com.iab.openrtb.response.Bid; import com.iab.openrtb.response.BidResponse; -import com.iab.openrtb.response.SeatBid; import org.apache.commons.lang3.Strings; import org.prebid.server.bidder.Bidder; import org.prebid.server.bidder.model.BidderBid; @@ -24,7 +23,6 @@ import java.math.BigDecimal; import java.util.ArrayList; -import java.util.Collection; import java.util.Collections; import java.util.List; import java.util.Objects; @@ -72,16 +70,15 @@ private List extractBids(BidResponse bidResponse, List e private List bidsFromResponse(BidResponse bidResponse, List errors) { return bidResponse.getSeatbid().stream() .filter(Objects::nonNull) - .map(SeatBid::getBid) - .filter(Objects::nonNull) - .flatMap(Collection::stream) - .filter(Objects::nonNull) - .map(bid -> makeBid(bid, bidResponse.getCur(), errors)) + .filter(seatBid -> seatBid.getBid() != null) + .flatMap(seatBid -> seatBid.getBid().stream() + .filter(Objects::nonNull) + .map(bid -> makeBid(bid, bidResponse.getCur(), errors, seatBid.getSeat()))) .filter(Objects::nonNull) .toList(); } - private BidderBid makeBid(Bid bid, String currency, List errors) { + private BidderBid makeBid(Bid bid, String currency, List errors, String originalSeat) { final BidType mediaType = getMediaType(bid); if (mediaType == null) { errors.add(BidderError.badServerResponse("Failed to parse impression \"%s\" mediatype" @@ -97,7 +94,7 @@ private BidderBid makeBid(Bid bid, String currency, List errors) { .adm(Strings.CS.replace(bid.getAdm(), PRICE_MACRO, priceAsString)) .build(); - return BidderBid.of(modifiedBid, mediaType, currency); + return BidderBid.of(originalSeat, modifiedBid, mediaType, currency); } private BidType getMediaType(Bid bid) { @@ -115,4 +112,5 @@ private ExtPrebid parseBidExt(ObjectNode ext) { return null; } } + } diff --git a/src/main/java/org/prebid/server/bidder/bigoad/BigoadBidder.java b/src/main/java/org/prebid/server/bidder/bigoad/BigoadBidder.java index a27d4db1452..4f2ccecd279 100644 --- a/src/main/java/org/prebid/server/bidder/bigoad/BigoadBidder.java +++ b/src/main/java/org/prebid/server/bidder/bigoad/BigoadBidder.java @@ -5,7 +5,6 @@ import com.iab.openrtb.request.Imp; import com.iab.openrtb.response.Bid; import com.iab.openrtb.response.BidResponse; -import com.iab.openrtb.response.SeatBid; import io.vertx.core.MultiMap; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.StringUtils; @@ -27,7 +26,6 @@ import org.prebid.server.util.Uri; import java.util.ArrayList; -import java.util.Collection; import java.util.List; import java.util.Objects; @@ -118,16 +116,15 @@ private static List extractBids(BidResponse bidResponse, List makeBid(bid, bidResponse.getCur(), errors)) + .filter(seatBid -> seatBid.getBid() != null) + .flatMap(seatBid -> seatBid.getBid().stream() + .filter(Objects::nonNull) + .map(bid -> makeBid(bid, bidResponse.getCur(), errors, seatBid.getSeat()))) .filter(Objects::nonNull) .toList(); } - private static BidderBid makeBid(Bid bid, String currency, List errors) { + private static BidderBid makeBid(Bid bid, String currency, List errors, String originalSeat) { final BidType bidType; try { bidType = resolveBidType(bid.getMtype(), bid.getImpid()); @@ -136,7 +133,7 @@ private static BidderBid makeBid(Bid bid, String currency, List err return null; } - return BidderBid.of(bid, bidType, currency); + return BidderBid.of(originalSeat, bid, bidType, currency); } private static BidType resolveBidType(Integer mType, String impId) { @@ -147,4 +144,5 @@ private static BidType resolveBidType(Integer mType, String impId) { case null, default -> throw new PreBidException("unrecognized bid type in response from bigoad " + impId); }; } + } diff --git a/src/main/java/org/prebid/server/bidder/blasto/BlastoBidder.java b/src/main/java/org/prebid/server/bidder/blasto/BlastoBidder.java index 431b1ac8ca8..46015c81280 100644 --- a/src/main/java/org/prebid/server/bidder/blasto/BlastoBidder.java +++ b/src/main/java/org/prebid/server/bidder/blasto/BlastoBidder.java @@ -138,7 +138,8 @@ private static List extractBids(BidRequest bidRequest, BidResponse bi return seatBid.getBid().stream() .filter(Objects::nonNull) - .map(bid -> BidderBid.of(bid, resolveBidType(bid.getImpid(), bidRequest.getImp()), DEFAULT_CURRENCY)) + .map(bid -> BidderBid.of( + seatBid.getSeat(), bid, resolveBidType(bid.getImpid(), bidRequest.getImp()), DEFAULT_CURRENCY)) .toList(); } diff --git a/src/main/java/org/prebid/server/bidder/bliink/BliinkBidder.java b/src/main/java/org/prebid/server/bidder/bliink/BliinkBidder.java index 18fe5bd5d3a..e2d32e1b9c4 100644 --- a/src/main/java/org/prebid/server/bidder/bliink/BliinkBidder.java +++ b/src/main/java/org/prebid/server/bidder/bliink/BliinkBidder.java @@ -76,17 +76,20 @@ private static List extractBids(BidRequest bidRequest, return Collections.emptyList(); } - return Optional.ofNullable(bidResponse.getSeatbid().getFirst()) + final SeatBid seatBid = bidResponse.getSeatbid().getFirst(); + return Optional.ofNullable(seatBid) .map(SeatBid::getBid) .orElseGet(Collections::emptyList) .stream() .filter(Objects::nonNull) - .map(bid -> makeBidderBid(bid, bidRequest.getImp(), bidResponse.getCur(), errors)) + .map(bid -> makeBidderBid( + bid, bidRequest.getImp(), bidResponse.getCur(), errors, seatBid.getSeat())) .filter(Objects::nonNull) .collect(Collectors.toList()); } - private static BidderBid makeBidderBid(Bid bid, List imps, String currency, List errors) { + private static BidderBid makeBidderBid(Bid bid, List imps, String currency, List errors, + String originalSeat) { final BidType bidType; try { bidType = getBidType(bid.getImpid(), imps); @@ -95,7 +98,7 @@ private static BidderBid makeBidderBid(Bid bid, List imps, String currency, return null; } - return BidderBid.of(bid, bidType, currency); + return BidderBid.of(originalSeat, bid, bidType, currency); } private static BidType getBidType(String impId, List imps) { diff --git a/src/main/java/org/prebid/server/bidder/blis/BlisBidder.java b/src/main/java/org/prebid/server/bidder/blis/BlisBidder.java index f0e5e9d2b97..97ed03bb115 100644 --- a/src/main/java/org/prebid/server/bidder/blis/BlisBidder.java +++ b/src/main/java/org/prebid/server/bidder/blis/BlisBidder.java @@ -5,7 +5,6 @@ import com.iab.openrtb.request.Imp; import com.iab.openrtb.response.Bid; import com.iab.openrtb.response.BidResponse; -import com.iab.openrtb.response.SeatBid; import io.vertx.core.MultiMap; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.Strings; @@ -27,7 +26,6 @@ import java.math.BigDecimal; import java.util.ArrayList; -import java.util.Collection; import java.util.Collections; import java.util.List; import java.util.Objects; @@ -97,19 +95,18 @@ private static List extractBids(BidResponse bidResponse, List bidsFromResponse(BidResponse bidResponse, List errors) { return bidResponse.getSeatbid().stream() .filter(Objects::nonNull) - .map(SeatBid::getBid) - .filter(Objects::nonNull) - .flatMap(Collection::stream) - .filter(Objects::nonNull) - .map(bid -> makeBid(bid, bidResponse.getCur(), errors)) + .filter(seatBid -> seatBid.getBid() != null) + .flatMap(seatBid -> seatBid.getBid().stream() + .filter(Objects::nonNull) + .map(bid -> makeBid(bid, bidResponse.getCur(), errors, seatBid.getSeat()))) .filter(Objects::nonNull) .collect(Collectors.toList()); } - private static BidderBid makeBid(Bid bid, String currency, List errors) { + private static BidderBid makeBid(Bid bid, String currency, List errors, String originalSeat) { final BidType bidType = getBidType(bid, errors); return bidType != null - ? BidderBid.of(resolveMacros(bid), bidType, currency) + ? BidderBid.of(originalSeat, resolveMacros(bid), bidType, currency) : null; } diff --git a/src/main/java/org/prebid/server/bidder/bluesea/BlueSeaBidder.java b/src/main/java/org/prebid/server/bidder/bluesea/BlueSeaBidder.java index 731ceae3897..caef6e1fd54 100644 --- a/src/main/java/org/prebid/server/bidder/bluesea/BlueSeaBidder.java +++ b/src/main/java/org/prebid/server/bidder/bluesea/BlueSeaBidder.java @@ -7,7 +7,6 @@ import com.iab.openrtb.request.Imp; import com.iab.openrtb.response.Bid; import com.iab.openrtb.response.BidResponse; -import com.iab.openrtb.response.SeatBid; import org.apache.commons.collections4.CollectionUtils; import org.prebid.server.bidder.Bidder; import org.prebid.server.bidder.model.BidderBid; @@ -25,7 +24,6 @@ import org.prebid.server.util.Uri; import java.util.ArrayList; -import java.util.Collection; import java.util.Collections; import java.util.List; import java.util.Objects; @@ -106,18 +104,17 @@ private static List extractBids(BidResponse bidResponse, return bidResponse.getSeatbid().stream() .filter(Objects::nonNull) - .map(SeatBid::getBid) - .filter(Objects::nonNull) - .flatMap(Collection::stream) - .filter(Objects::nonNull) - .map(bid -> makeBidderBid(bid, bidResponse.getCur(), errors)) + .filter(seatBid -> seatBid.getBid() != null) + .flatMap(seatBid -> seatBid.getBid().stream() + .filter(Objects::nonNull) + .map(bid -> makeBidderBid(bid, bidResponse.getCur(), errors, seatBid.getSeat()))) .filter(Objects::nonNull) .toList(); } - private static BidderBid makeBidderBid(Bid bid, String currency, List errors) { + private static BidderBid makeBidderBid(Bid bid, String currency, List errors, String originalSeat) { try { - return BidderBid.of(bid, resolveBidType(bid), currency); + return BidderBid.of(originalSeat, bid, resolveBidType(bid), currency); } catch (PreBidException e) { errors.add(BidderError.badServerResponse(e.getMessage())); return null; @@ -142,4 +139,5 @@ private static BidType resolveBidType(Bid bid) { .formatted(bidTypeTextual, bid.getId())); }; } + } diff --git a/src/main/java/org/prebid/server/bidder/bmtm/BmtmBidder.java b/src/main/java/org/prebid/server/bidder/bmtm/BmtmBidder.java index 316ff29c0e5..a86f17d4360 100644 --- a/src/main/java/org/prebid/server/bidder/bmtm/BmtmBidder.java +++ b/src/main/java/org/prebid/server/bidder/bmtm/BmtmBidder.java @@ -6,7 +6,6 @@ import com.iab.openrtb.request.Imp; import com.iab.openrtb.request.Site; import com.iab.openrtb.response.BidResponse; -import com.iab.openrtb.response.SeatBid; import io.vertx.core.MultiMap; import io.vertx.core.http.HttpMethod; import org.apache.commons.collections4.CollectionUtils; @@ -27,7 +26,6 @@ import org.prebid.server.util.HttpUtil; import java.util.ArrayList; -import java.util.Collection; import java.util.Collections; import java.util.List; import java.util.Objects; @@ -134,10 +132,11 @@ private static List bidsFromResponse(BidRequest bidRequest, BidResponse bidResponse) { return bidResponse.getSeatbid().stream() .filter(Objects::nonNull) - .map(SeatBid::getBid) - .filter(Objects::nonNull) - .flatMap(Collection::stream) - .map(bid -> BidderBid.of(bid, getBidType(bid.getImpid(), bidRequest.getImp()), bidResponse.getCur())) + .filter(seatBid -> seatBid.getBid() != null) + .flatMap(seatBid -> seatBid.getBid().stream() + .filter(Objects::nonNull) + .map(bid -> BidderBid.of( + seatBid.getSeat(), bid, getBidType(bid.getImpid(), bidRequest.getImp()), bidResponse.getCur()))) .toList(); } diff --git a/src/main/java/org/prebid/server/bidder/boldwin/BoldwinBidder.java b/src/main/java/org/prebid/server/bidder/boldwin/BoldwinBidder.java index 0ddb3be524d..fefdc1448c4 100644 --- a/src/main/java/org/prebid/server/bidder/boldwin/BoldwinBidder.java +++ b/src/main/java/org/prebid/server/bidder/boldwin/BoldwinBidder.java @@ -6,7 +6,6 @@ import com.iab.openrtb.request.Imp; import com.iab.openrtb.response.Bid; import com.iab.openrtb.response.BidResponse; -import com.iab.openrtb.response.SeatBid; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.StringUtils; import org.prebid.server.bidder.Bidder; @@ -26,7 +25,6 @@ import org.prebid.server.util.HttpUtil; import java.util.ArrayList; -import java.util.Collection; import java.util.Collections; import java.util.List; import java.util.Objects; @@ -120,11 +118,10 @@ private static List extractBids(BidResponse bidResponse) { return bidResponse.getSeatbid().stream() .filter(Objects::nonNull) - .map(SeatBid::getBid) - .filter(Objects::nonNull) - .flatMap(Collection::stream) - .filter(Objects::nonNull) - .map(bid -> BidderBid.of(bid, getBidType(bid), bidResponse.getCur())) + .filter(seatBid -> seatBid.getBid() != null) + .flatMap(seatBid -> seatBid.getBid().stream() + .filter(Objects::nonNull) + .map(bid -> BidderBid.of(seatBid.getSeat(), bid, getBidType(bid), bidResponse.getCur()))) .toList(); } diff --git a/src/main/java/org/prebid/server/bidder/boldwinrapid/BoldwinRapidBidder.java b/src/main/java/org/prebid/server/bidder/boldwinrapid/BoldwinRapidBidder.java index dd8a1f71983..23bbe671c8d 100644 --- a/src/main/java/org/prebid/server/bidder/boldwinrapid/BoldwinRapidBidder.java +++ b/src/main/java/org/prebid/server/bidder/boldwinrapid/BoldwinRapidBidder.java @@ -6,7 +6,6 @@ import com.iab.openrtb.request.Imp; import com.iab.openrtb.response.Bid; import com.iab.openrtb.response.BidResponse; -import com.iab.openrtb.response.SeatBid; import io.vertx.core.MultiMap; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.StringUtils; @@ -27,7 +26,6 @@ import org.prebid.server.util.Uri; import java.util.ArrayList; -import java.util.Collection; import java.util.Collections; import java.util.List; import java.util.Objects; @@ -122,11 +120,10 @@ private static List extractBids(BidResponse bidResponse) { private static List bidsFromResponse(BidResponse bidResponse) { return bidResponse.getSeatbid().stream() .filter(Objects::nonNull) - .map(SeatBid::getBid) - .filter(Objects::nonNull) - .flatMap(Collection::stream) - .filter(Objects::nonNull) - .map(bid -> BidderBid.of(bid, getBidType(bid), bidResponse.getCur())) + .filter(seatBid -> seatBid.getBid() != null) + .flatMap(seatBid -> seatBid.getBid().stream() + .filter(Objects::nonNull) + .map(bid -> BidderBid.of(seatBid.getSeat(), bid, getBidType(bid), bidResponse.getCur()))) .toList(); } diff --git a/src/main/java/org/prebid/server/bidder/brave/BraveBidder.java b/src/main/java/org/prebid/server/bidder/brave/BraveBidder.java index 74017534501..fe07ba89316 100644 --- a/src/main/java/org/prebid/server/bidder/brave/BraveBidder.java +++ b/src/main/java/org/prebid/server/bidder/brave/BraveBidder.java @@ -5,7 +5,6 @@ import com.iab.openrtb.request.Imp; import com.iab.openrtb.response.Bid; import com.iab.openrtb.response.BidResponse; -import com.iab.openrtb.response.SeatBid; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.StringUtils; import org.prebid.server.bidder.Bidder; @@ -23,7 +22,6 @@ import org.prebid.server.util.BidderUtil; import org.prebid.server.util.Uri; -import java.util.Collection; import java.util.List; import java.util.Objects; import java.util.stream.IntStream; @@ -106,11 +104,11 @@ private static List bidsFromResponse(BidRequest bidRequest, BidRespon return bidResponse.getSeatbid().stream() .limit(1) .filter(Objects::nonNull) - .map(SeatBid::getBid) - .filter(Objects::nonNull) - .flatMap(Collection::stream) - .filter(Objects::nonNull) - .map(bid -> BidderBid.of(bid, getBidType(bid, bidRequest.getImp()), BIDDER_CURRENCY)) + .filter(seatBid -> seatBid.getBid() != null) + .flatMap(seatBid -> seatBid.getBid().stream() + .filter(Objects::nonNull) + .map(bid -> BidderBid.of( + seatBid.getSeat(), bid, getBidType(bid, bidRequest.getImp()), BIDDER_CURRENCY))) .toList(); } diff --git a/src/main/java/org/prebid/server/bidder/bwx/BwxBidder.java b/src/main/java/org/prebid/server/bidder/bwx/BwxBidder.java index a8a3a77b951..ddb8c3ee3f3 100644 --- a/src/main/java/org/prebid/server/bidder/bwx/BwxBidder.java +++ b/src/main/java/org/prebid/server/bidder/bwx/BwxBidder.java @@ -5,7 +5,6 @@ import com.iab.openrtb.request.Imp; import com.iab.openrtb.response.Bid; import com.iab.openrtb.response.BidResponse; -import com.iab.openrtb.response.SeatBid; import io.vertx.core.http.HttpMethod; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.StringUtils; @@ -25,7 +24,6 @@ import org.prebid.server.util.Uri; import java.util.ArrayList; -import java.util.Collection; import java.util.Collections; import java.util.List; import java.util.Objects; @@ -111,11 +109,10 @@ private List extractBids(BidResponse bidResponse) { private List bidsFromResponse(BidResponse bidResponse) { return bidResponse.getSeatbid().stream() .filter(Objects::nonNull) - .map(SeatBid::getBid) - .filter(Objects::nonNull) - .flatMap(Collection::stream) - .filter(Objects::nonNull) - .map(bid -> BidderBid.of(bid, getBidType(bid), bidResponse.getCur())) + .filter(seatBid -> seatBid.getBid() != null) + .flatMap(seatBid -> seatBid.getBid().stream() + .filter(Objects::nonNull) + .map(bid -> BidderBid.of(seatBid.getSeat(), bid, getBidType(bid), bidResponse.getCur()))) .filter(Objects::nonNull) .toList(); } diff --git a/src/main/java/org/prebid/server/bidder/clydo/ClydoBidder.java b/src/main/java/org/prebid/server/bidder/clydo/ClydoBidder.java index b45b0f17417..a7584fb0f9a 100644 --- a/src/main/java/org/prebid/server/bidder/clydo/ClydoBidder.java +++ b/src/main/java/org/prebid/server/bidder/clydo/ClydoBidder.java @@ -6,7 +6,6 @@ import com.iab.openrtb.request.Imp; import com.iab.openrtb.response.Bid; import com.iab.openrtb.response.BidResponse; -import com.iab.openrtb.response.SeatBid; import io.netty.handler.codec.http.HttpHeaderValues; import io.vertx.core.MultiMap; import org.prebid.server.bidder.Bidder; @@ -145,11 +144,11 @@ private List extractBids(BidRequest bidRequest, BidResponse bidRespon return bidResponse.getSeatbid().stream() .filter(Objects::nonNull) - .map(SeatBid::getBid) - .filter(Objects::nonNull) - .flatMap(List::stream) - .filter(Objects::nonNull) - .map(bid -> BidderBid.of(bid, resolveBidType(bid, impIdToBidTypeMap), bidResponse.getCur())) + .filter(seatBid -> seatBid.getBid() != null) + .flatMap(seatBid -> seatBid.getBid().stream() + .filter(Objects::nonNull) + .map(bid -> BidderBid.of( + seatBid.getSeat(), bid, resolveBidType(bid, impIdToBidTypeMap), bidResponse.getCur()))) .collect(Collectors.toList()); } diff --git a/src/main/java/org/prebid/server/bidder/cointraffic/CointrafficBidder.java b/src/main/java/org/prebid/server/bidder/cointraffic/CointrafficBidder.java index 8f17681295c..bbf46fe62bf 100644 --- a/src/main/java/org/prebid/server/bidder/cointraffic/CointrafficBidder.java +++ b/src/main/java/org/prebid/server/bidder/cointraffic/CointrafficBidder.java @@ -2,7 +2,6 @@ import com.iab.openrtb.request.BidRequest; import com.iab.openrtb.response.BidResponse; -import com.iab.openrtb.response.SeatBid; import io.vertx.core.MultiMap; import org.apache.commons.collections4.CollectionUtils; import org.prebid.server.bidder.Bidder; @@ -18,7 +17,6 @@ import org.prebid.server.util.HttpUtil; import java.util.ArrayList; -import java.util.Collection; import java.util.Collections; import java.util.List; import java.util.Objects; @@ -60,10 +58,10 @@ private static List extractBids(BidResponse bidResponse) { private static List bidsFromResponse(BidResponse bidResponse) { return bidResponse.getSeatbid().stream() .filter(Objects::nonNull) - .map(SeatBid::getBid) - .filter(Objects::nonNull) - .flatMap(Collection::stream) - .map(bid -> BidderBid.of(bid, BidType.banner, bidResponse.getCur())) + .filter(seatBid -> seatBid.getBid() != null) + .flatMap(seatBid -> seatBid.getBid().stream() + .filter(Objects::nonNull) + .map(bid -> BidderBid.of(seatBid.getSeat(), bid, BidType.banner, bidResponse.getCur()))) .toList(); } } diff --git a/src/main/java/org/prebid/server/bidder/coinzilla/CoinzillaBidder.java b/src/main/java/org/prebid/server/bidder/coinzilla/CoinzillaBidder.java index c550b5c39ff..a4c0fff02d0 100644 --- a/src/main/java/org/prebid/server/bidder/coinzilla/CoinzillaBidder.java +++ b/src/main/java/org/prebid/server/bidder/coinzilla/CoinzillaBidder.java @@ -2,7 +2,6 @@ import com.iab.openrtb.request.BidRequest; import com.iab.openrtb.response.BidResponse; -import com.iab.openrtb.response.SeatBid; import io.vertx.core.MultiMap; import io.vertx.core.http.HttpMethod; import org.apache.commons.collections4.CollectionUtils; @@ -17,7 +16,6 @@ import org.prebid.server.proto.openrtb.ext.response.BidType; import org.prebid.server.util.HttpUtil; -import java.util.Collection; import java.util.Collections; import java.util.List; import java.util.Objects; @@ -71,11 +69,10 @@ private List extractBids(BidResponse bidResponse) { private List bidsFromResponse(BidResponse bidResponse) { return bidResponse.getSeatbid().stream() .filter(Objects::nonNull) - .map(SeatBid::getBid) - .filter(Objects::nonNull) - .flatMap(Collection::stream) - .filter(Objects::nonNull) - .map(bid -> BidderBid.of(bid, BidType.banner, bidResponse.getCur())) + .filter(seatBid -> seatBid.getBid() != null) + .flatMap(seatBid -> seatBid.getBid().stream() + .filter(Objects::nonNull) + .map(bid -> BidderBid.of(seatBid.getSeat(), bid, BidType.banner, bidResponse.getCur()))) .filter(Objects::nonNull) .toList(); } diff --git a/src/main/java/org/prebid/server/bidder/colossus/ColossusBidder.java b/src/main/java/org/prebid/server/bidder/colossus/ColossusBidder.java index 0cd8e5f964a..82c822e9f5f 100644 --- a/src/main/java/org/prebid/server/bidder/colossus/ColossusBidder.java +++ b/src/main/java/org/prebid/server/bidder/colossus/ColossusBidder.java @@ -7,7 +7,6 @@ import com.iab.openrtb.request.Imp; import com.iab.openrtb.response.Bid; import com.iab.openrtb.response.BidResponse; -import com.iab.openrtb.response.SeatBid; import org.apache.commons.collections4.CollectionUtils; import org.prebid.server.bidder.Bidder; import org.prebid.server.bidder.model.BidderBid; @@ -25,7 +24,6 @@ import org.prebid.server.util.HttpUtil; import java.util.ArrayList; -import java.util.Collection; import java.util.Collections; import java.util.List; import java.util.Objects; @@ -103,18 +101,18 @@ private List extractBids(BidRequest bidRequest, BidResponse bidRespon return bidResponse.getSeatbid().stream() .filter(Objects::nonNull) - .map(SeatBid::getBid) - .filter(Objects::nonNull) - .flatMap(Collection::stream) - .filter(Objects::nonNull) - .map(bid -> makeBidderBid(bid, bidRequest.getImp(), bidResponse.getCur(), errors)) + .filter(seatBid -> seatBid.getBid() != null) + .flatMap(seatBid -> seatBid.getBid().stream() + .filter(Objects::nonNull) + .map(bid -> makeBidderBid(bid, bidRequest.getImp(), bidResponse.getCur(), errors, seatBid.getSeat()))) .filter(Objects::nonNull) .toList(); } - private BidderBid makeBidderBid(Bid bid, List imps, String currency, List errors) { + private BidderBid makeBidderBid(Bid bid, List imps, String currency, List errors, + String originalSeat) { try { - return BidderBid.of(bid, resolveBidType(bid.getExt(), bid.getImpid(), imps), currency); + return BidderBid.of(originalSeat, bid, resolveBidType(bid.getExt(), bid.getImpid(), imps), currency); } catch (PreBidException e) { errors.add(BidderError.badServerResponse(e.getMessage())); return null; @@ -143,4 +141,5 @@ private BidType resolveBidType(ObjectNode objectNode, String impId, List im throw new PreBidException("Failed to find impression for ID: " + impId); } + } diff --git a/src/main/java/org/prebid/server/bidder/compass/CompassBidder.java b/src/main/java/org/prebid/server/bidder/compass/CompassBidder.java index 7ccc321bd1e..0b5cb1c2b2b 100644 --- a/src/main/java/org/prebid/server/bidder/compass/CompassBidder.java +++ b/src/main/java/org/prebid/server/bidder/compass/CompassBidder.java @@ -5,7 +5,6 @@ import com.iab.openrtb.request.BidRequest; import com.iab.openrtb.request.Imp; import com.iab.openrtb.response.BidResponse; -import com.iab.openrtb.response.SeatBid; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.StringUtils; import org.prebid.server.bidder.Bidder; @@ -25,7 +24,6 @@ import org.prebid.server.util.HttpUtil; import java.util.ArrayList; -import java.util.Collection; import java.util.Collections; import java.util.List; import java.util.Objects; @@ -119,11 +117,11 @@ private static List extractBids(BidRequest bidRequest, BidResponse bi return bidResponse.getSeatbid().stream() .filter(Objects::nonNull) - .map(SeatBid::getBid) - .filter(Objects::nonNull) - .flatMap(Collection::stream) - .filter(Objects::nonNull) - .map(bid -> BidderBid.of(bid, getBidType(bid.getImpid(), bidRequest.getImp()), bidResponse.getCur())) + .filter(seatBid -> seatBid.getBid() != null) + .flatMap(seatBid -> seatBid.getBid().stream() + .filter(Objects::nonNull) + .map(bid -> BidderBid.of( + seatBid.getSeat(), bid, getBidType(bid.getImpid(), bidRequest.getImp()), bidResponse.getCur()))) .toList(); } diff --git a/src/main/java/org/prebid/server/bidder/concert/ConcertBidder.java b/src/main/java/org/prebid/server/bidder/concert/ConcertBidder.java index aaadcb08a89..f8e8c688c55 100644 --- a/src/main/java/org/prebid/server/bidder/concert/ConcertBidder.java +++ b/src/main/java/org/prebid/server/bidder/concert/ConcertBidder.java @@ -7,7 +7,6 @@ import com.iab.openrtb.request.Imp; import com.iab.openrtb.response.Bid; import com.iab.openrtb.response.BidResponse; -import com.iab.openrtb.response.SeatBid; import org.apache.commons.collections4.CollectionUtils; import org.prebid.server.bidder.Bidder; import org.prebid.server.bidder.model.BidderBid; @@ -27,7 +26,6 @@ import org.prebid.server.util.HttpUtil; import java.util.ArrayList; -import java.util.Collection; import java.util.List; import java.util.Objects; @@ -121,16 +119,15 @@ private static List extractBids(BidResponse bidResponse, List makeBid(bid, bidResponse.getCur(), errors)) + .filter(seatBid -> seatBid.getBid() != null) + .flatMap(seatBid -> seatBid.getBid().stream() + .filter(Objects::nonNull) + .map(bid -> makeBid(bid, bidResponse.getCur(), errors, seatBid.getSeat()))) .filter(Objects::nonNull) .toList(); } - private static BidderBid makeBid(Bid bid, String currency, List errors) { + private static BidderBid makeBid(Bid bid, String currency, List errors, String originalSeat) { final BidType bidType; try { bidType = resolveBidType(bid.getMtype(), bid.getImpid()); @@ -139,7 +136,7 @@ private static BidderBid makeBid(Bid bid, String currency, List err return null; } - return BidderBid.of(bid, bidType, currency); + return BidderBid.of(originalSeat, bid, bidType, currency); } private static BidType resolveBidType(Integer mType, String impId) { @@ -152,4 +149,5 @@ private static BidType resolveBidType(Integer mType, String impId) { throw new PreBidException("Failed to parse media type for bid: \"%s\"".formatted(impId)); }; } + } diff --git a/src/main/java/org/prebid/server/bidder/connatix/ConnatixBidder.java b/src/main/java/org/prebid/server/bidder/connatix/ConnatixBidder.java index 2259091da12..76f66dd898f 100644 --- a/src/main/java/org/prebid/server/bidder/connatix/ConnatixBidder.java +++ b/src/main/java/org/prebid/server/bidder/connatix/ConnatixBidder.java @@ -12,7 +12,6 @@ import com.iab.openrtb.request.User; import com.iab.openrtb.response.Bid; import com.iab.openrtb.response.BidResponse; -import com.iab.openrtb.response.SeatBid; import io.vertx.core.MultiMap; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.ObjectUtils; @@ -38,7 +37,6 @@ import java.math.BigDecimal; import java.util.ArrayList; -import java.util.Collection; import java.util.Collections; import java.util.List; import java.util.Objects; @@ -235,14 +233,14 @@ private static List extractBids(BidResponse bidResponse) { if (bidResponse == null || CollectionUtils.isEmpty(bidResponse.getSeatbid())) { return Collections.emptyList(); } - return bidResponse.getSeatbid().stream() .filter(Objects::nonNull) - .map(SeatBid::getBid) - .filter(Objects::nonNull) - .flatMap(Collection::stream) + .filter(seatBid -> seatBid.getBid() != null) + .flatMap(seatBid -> seatBid.getBid().stream() + .filter(Objects::nonNull) + .map(bid -> BidderBid.of( + seatBid.getSeat(), bid, getBidType(bid), BIDDER_CURRENCY))) .filter(Objects::nonNull) - .map(bid -> BidderBid.of(bid, getBidType(bid), BIDDER_CURRENCY)) .toList(); } diff --git a/src/main/java/org/prebid/server/bidder/connectad/ConnectAdBidder.java b/src/main/java/org/prebid/server/bidder/connectad/ConnectAdBidder.java index 1775537018c..fa23ddbabf9 100644 --- a/src/main/java/org/prebid/server/bidder/connectad/ConnectAdBidder.java +++ b/src/main/java/org/prebid/server/bidder/connectad/ConnectAdBidder.java @@ -11,7 +11,6 @@ import com.iab.openrtb.request.Site; import com.iab.openrtb.response.Bid; import com.iab.openrtb.response.BidResponse; -import com.iab.openrtb.response.SeatBid; import io.vertx.core.MultiMap; import org.apache.commons.collections4.CollectionUtils; import org.prebid.server.bidder.Bidder; @@ -31,7 +30,6 @@ import java.math.BigDecimal; import java.util.ArrayList; -import java.util.Collection; import java.util.Collections; import java.util.List; import java.util.Map; @@ -191,11 +189,11 @@ private List extractBids(BidResponse bidResponse, BidRequest bidReque return bidResponse.getSeatbid().stream() .filter(Objects::nonNull) - .map(SeatBid::getBid) - .filter(Objects::nonNull) - .flatMap(Collection::stream) - .filter(Objects::nonNull) - .map(bid -> BidderBid.of(bid, getBidType(bid, impIdToImp), bidResponse.getCur())) + .filter(seatBid -> seatBid.getBid() != null) + .flatMap(seatBid -> seatBid.getBid().stream() + .filter(Objects::nonNull) + .map(bid -> BidderBid.of( + seatBid.getSeat(), bid, getBidType(bid, impIdToImp), bidResponse.getCur()))) .toList(); } diff --git a/src/main/java/org/prebid/server/bidder/consumable/ConsumableBidder.java b/src/main/java/org/prebid/server/bidder/consumable/ConsumableBidder.java index 31b75e4980f..089c057702a 100644 --- a/src/main/java/org/prebid/server/bidder/consumable/ConsumableBidder.java +++ b/src/main/java/org/prebid/server/bidder/consumable/ConsumableBidder.java @@ -10,7 +10,6 @@ import com.iab.openrtb.request.Site; import com.iab.openrtb.response.Bid; import com.iab.openrtb.response.BidResponse; -import com.iab.openrtb.response.SeatBid; import io.vertx.core.MultiMap; import org.apache.commons.collections4.CollectionUtils; import org.prebid.server.bidder.Bidder; @@ -31,7 +30,6 @@ import org.prebid.server.util.Uri; import java.util.ArrayList; -import java.util.Collection; import java.util.Collections; import java.util.List; import java.util.Objects; @@ -133,11 +131,10 @@ private List extractConsumableBids(BidRequest bidRequest, BidResponse return bidResponse.getSeatbid().stream() .filter(Objects::nonNull) - .map(SeatBid::getBid) - .filter(Objects::nonNull) - .flatMap(Collection::stream) - .filter(Objects::nonNull) - .map(bid -> toBidderBid(bid, bidRequest, bidResponse, errors)) + .flatMap(seatBid -> CollectionUtils.emptyIfNull(seatBid.getBid()).stream() + .filter(Objects::nonNull) + .map(bid -> BidderBid.of( + seatBid.getSeat(), toBidderBid(bid, bidRequest, bidResponse, errors)))) .filter(Objects::nonNull) .toList(); diff --git a/src/main/java/org/prebid/server/bidder/copper6ssp/Copper6SspBidder.java b/src/main/java/org/prebid/server/bidder/copper6ssp/Copper6SspBidder.java index f8d739193a9..91656c6f3a9 100644 --- a/src/main/java/org/prebid/server/bidder/copper6ssp/Copper6SspBidder.java +++ b/src/main/java/org/prebid/server/bidder/copper6ssp/Copper6SspBidder.java @@ -6,7 +6,6 @@ import com.iab.openrtb.request.Imp; import com.iab.openrtb.response.Bid; import com.iab.openrtb.response.BidResponse; -import com.iab.openrtb.response.SeatBid; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.StringUtils; import org.prebid.server.bidder.Bidder; @@ -26,7 +25,6 @@ import org.prebid.server.util.HttpUtil; import java.util.ArrayList; -import java.util.Collection; import java.util.Collections; import java.util.List; import java.util.Objects; @@ -114,10 +112,11 @@ private static List extractBids(BidResponse bidResponse) { return bidResponse.getSeatbid().stream() .filter(Objects::nonNull) - .map(SeatBid::getBid).filter(Objects::nonNull) - .flatMap(Collection::stream) - .filter(Objects::nonNull) - .map(bid -> BidderBid.of(bid, getBidType(bid), bidResponse.getCur())) + .flatMap(seatBid -> CollectionUtils.emptyIfNull(seatBid.getBid()).stream() + .filter(Objects::nonNull) + .map(bid -> BidderBid.of( + seatBid.getSeat(), BidderBid.of(bid, + getBidType(bid), bidResponse.getCur())))) .toList(); } diff --git a/src/main/java/org/prebid/server/bidder/cpmstar/CpmStarBidder.java b/src/main/java/org/prebid/server/bidder/cpmstar/CpmStarBidder.java index a5b5687c1b4..def11258daf 100644 --- a/src/main/java/org/prebid/server/bidder/cpmstar/CpmStarBidder.java +++ b/src/main/java/org/prebid/server/bidder/cpmstar/CpmStarBidder.java @@ -7,7 +7,6 @@ import com.iab.openrtb.request.Imp; import com.iab.openrtb.response.Bid; import com.iab.openrtb.response.BidResponse; -import com.iab.openrtb.response.SeatBid; import org.apache.commons.collections4.CollectionUtils; import org.prebid.server.bidder.Bidder; import org.prebid.server.bidder.model.BidderBid; @@ -25,7 +24,6 @@ import org.prebid.server.util.HttpUtil; import java.util.ArrayList; -import java.util.Collection; import java.util.Collections; import java.util.List; import java.util.Objects; @@ -108,28 +106,26 @@ private Result> extractBids(BidRequest request, BidResponse bidR if (bidResponse == null || CollectionUtils.isEmpty(bidResponse.getSeatbid())) { return Result.of(Collections.emptyList(), Collections.emptyList()); } - final List responseBids = bidResponse.getSeatbid().stream() + final List errors = new ArrayList<>(); + final List result = bidResponse.getSeatbid().stream() .filter(Objects::nonNull) - .map(SeatBid::getBid) + .flatMap(seatBid -> CollectionUtils.emptyIfNull(seatBid.getBid()).stream() + .filter(Objects::nonNull) + .map(bid -> bidFromResponse( + request.getImp(), bid, seatBid.getSeat(), bidResponse.getCur(), errors))) .filter(Objects::nonNull) - .flatMap(Collection::stream) .toList(); - final List errors = new ArrayList<>(); - final List result = bidsFromResponse(request.getImp(), responseBids, bidResponse.getCur(), errors); return Result.of(result, errors); } - private static List bidsFromResponse(List imps, List responseBids, String currency, - List errors) { - final List bidderBids = new ArrayList<>(); - for (Bid bid : responseBids) { - try { - bidderBids.add(BidderBid.of(bid, bidType(bid.getImpid(), imps), currency)); - } catch (PreBidException e) { - errors.add(BidderError.badInput("bid id=%s %s".formatted(bid.getId(), e.getMessage()))); - } + private static BidderBid bidFromResponse(List imps, Bid bid, String originalSeat, String currency, + List errors) { + try { + return BidderBid.of(originalSeat, bid, bidType(bid.getImpid(), imps), currency); + } catch (PreBidException e) { + errors.add(BidderError.badInput("bid id=%s %s".formatted(bid.getId(), e.getMessage()))); + return null; } - return bidderBids; } private static BidType bidType(String impId, List imps) { diff --git a/src/main/java/org/prebid/server/bidder/criteo/CriteoBidder.java b/src/main/java/org/prebid/server/bidder/criteo/CriteoBidder.java index 1afc5d9fa98..5144d8b34ff 100644 --- a/src/main/java/org/prebid/server/bidder/criteo/CriteoBidder.java +++ b/src/main/java/org/prebid/server/bidder/criteo/CriteoBidder.java @@ -5,7 +5,6 @@ import com.iab.openrtb.request.BidRequest; import com.iab.openrtb.response.Bid; import com.iab.openrtb.response.BidResponse; -import com.iab.openrtb.response.SeatBid; import org.apache.commons.collections4.CollectionUtils; import org.prebid.server.bidder.Bidder; import org.prebid.server.bidder.model.BidderBid; @@ -22,7 +21,6 @@ import org.prebid.server.util.BidderUtil; import org.prebid.server.util.HttpUtil; -import java.util.Collection; import java.util.Collections; import java.util.List; import java.util.Objects; @@ -59,14 +57,14 @@ private List extractBids(BidResponse bidResponse) { if (bidResponse == null || CollectionUtils.isEmpty(bidResponse.getSeatbid())) { return Collections.emptyList(); } - return bidResponse.getSeatbid().stream() .filter(Objects::nonNull) - .map(SeatBid::getBid) - .filter(Objects::nonNull) - .flatMap(Collection::stream) + .filter(seatBid -> seatBid.getBid() != null) + .flatMap(seatBid -> seatBid.getBid().stream() + .filter(Objects::nonNull) + .map(bid -> BidderBid.of(seatBid.getSeat(), + modifyBidExt(bid), getBidType(bid), bidResponse.getCur()))) .filter(Objects::nonNull) - .map(bid -> BidderBid.of(modifyBidExt(bid), getBidType(bid), bidResponse.getCur())) .toList(); } diff --git a/src/main/java/org/prebid/server/bidder/datablocks/DatablocksBidder.java b/src/main/java/org/prebid/server/bidder/datablocks/DatablocksBidder.java index 938187b31f0..76dbeeaa038 100644 --- a/src/main/java/org/prebid/server/bidder/datablocks/DatablocksBidder.java +++ b/src/main/java/org/prebid/server/bidder/datablocks/DatablocksBidder.java @@ -5,7 +5,6 @@ import com.iab.openrtb.request.BidRequest; import com.iab.openrtb.request.Imp; import com.iab.openrtb.response.BidResponse; -import com.iab.openrtb.response.SeatBid; import org.apache.commons.collections4.CollectionUtils; import org.prebid.server.bidder.Bidder; import org.prebid.server.bidder.model.BidderBid; @@ -23,7 +22,6 @@ import org.prebid.server.util.Uri; import java.util.ArrayList; -import java.util.Collection; import java.util.Collections; import java.util.HashMap; import java.util.List; @@ -111,10 +109,11 @@ private static List extractBids(BidResponse bidResponse, BidRequest b private static List bidsFromResponse(BidResponse bidResponse, List imps) { return bidResponse.getSeatbid().stream() - .map(SeatBid::getBid) - .filter(Objects::nonNull) - .flatMap(Collection::stream) - .map(bid -> BidderBid.of(bid, getBidType(bid.getImpid(), imps), bidResponse.getCur())) + .flatMap(seatBid -> CollectionUtils.emptyIfNull(seatBid.getBid()).stream() + .filter(Objects::nonNull) + .map(bid -> BidderBid.of( + seatBid.getSeat(), BidderBid.of(bid, + getBidType(bid.getImpid(), imps), bidResponse.getCur())))) .toList(); } diff --git a/src/main/java/org/prebid/server/bidder/decenterads/DecenteradsBidder.java b/src/main/java/org/prebid/server/bidder/decenterads/DecenteradsBidder.java index 62a8d78aa56..fe93aca6d54 100644 --- a/src/main/java/org/prebid/server/bidder/decenterads/DecenteradsBidder.java +++ b/src/main/java/org/prebid/server/bidder/decenterads/DecenteradsBidder.java @@ -5,7 +5,6 @@ import com.iab.openrtb.request.BidRequest; import com.iab.openrtb.request.Imp; import com.iab.openrtb.response.BidResponse; -import com.iab.openrtb.response.SeatBid; import org.apache.commons.collections4.CollectionUtils; import org.prebid.server.bidder.Bidder; import org.prebid.server.bidder.model.BidderBid; @@ -21,7 +20,6 @@ import org.prebid.server.util.HttpUtil; import java.util.ArrayList; -import java.util.Collection; import java.util.Collections; import java.util.List; import java.util.Objects; @@ -93,10 +91,12 @@ private static List extractBids(BidRequest bidRequest, BidResponse bi private static List bidsFromResponse(BidRequest bidRequest, BidResponse bidResponse) { return bidResponse.getSeatbid().stream() .filter(Objects::nonNull) - .map(SeatBid::getBid) - .filter(Objects::nonNull) - .flatMap(Collection::stream) - .map(bid -> BidderBid.of(bid, getBidType(bid.getImpid(), bidRequest.getImp()), bidResponse.getCur())) + .flatMap(seatBid -> CollectionUtils.emptyIfNull(seatBid.getBid()).stream() + .filter(Objects::nonNull) + .map(bid -> BidderBid.of( + seatBid.getSeat(), BidderBid.of(bid, + getBidType(bid.getImpid(), bidRequest.getImp()), + bidResponse.getCur())))) .toList(); } diff --git a/src/main/java/org/prebid/server/bidder/deepintent/DeepintentBidder.java b/src/main/java/org/prebid/server/bidder/deepintent/DeepintentBidder.java index d85f782ba03..b4d916057f5 100644 --- a/src/main/java/org/prebid/server/bidder/deepintent/DeepintentBidder.java +++ b/src/main/java/org/prebid/server/bidder/deepintent/DeepintentBidder.java @@ -6,7 +6,6 @@ import com.iab.openrtb.request.Format; import com.iab.openrtb.request.Imp; import com.iab.openrtb.response.BidResponse; -import com.iab.openrtb.response.SeatBid; import org.apache.commons.collections4.CollectionUtils; import org.prebid.server.bidder.Bidder; import org.prebid.server.bidder.model.BidderBid; @@ -24,7 +23,6 @@ import org.prebid.server.util.HttpUtil; import java.util.ArrayList; -import java.util.Collection; import java.util.Collections; import java.util.List; import java.util.Objects; @@ -135,10 +133,12 @@ private List extractBids(BidderCall httpCall) { private List bidsFromResponse(BidRequest bidRequest, BidResponse bidResponse) { return bidResponse.getSeatbid().stream() .filter(Objects::nonNull) - .map(SeatBid::getBid) - .filter(Objects::nonNull) - .flatMap(Collection::stream) - .map(bid -> BidderBid.of(bid, getBidType(bid.getImpid(), bidRequest.getImp()), bidResponse.getCur())) + .flatMap(seatBid -> CollectionUtils.emptyIfNull(seatBid.getBid()).stream() + .filter(Objects::nonNull) + .map(bid -> BidderBid.of( + seatBid.getSeat(), BidderBid.of(bid, + getBidType(bid.getImpid(), bidRequest.getImp()), + bidResponse.getCur())))) .toList(); } diff --git a/src/main/java/org/prebid/server/bidder/definemedia/DefineMediaBidder.java b/src/main/java/org/prebid/server/bidder/definemedia/DefineMediaBidder.java index d27bbe87cf2..1d622be68b3 100644 --- a/src/main/java/org/prebid/server/bidder/definemedia/DefineMediaBidder.java +++ b/src/main/java/org/prebid/server/bidder/definemedia/DefineMediaBidder.java @@ -4,7 +4,6 @@ import com.iab.openrtb.request.BidRequest; import com.iab.openrtb.response.Bid; import com.iab.openrtb.response.BidResponse; -import com.iab.openrtb.response.SeatBid; import org.apache.commons.collections4.CollectionUtils; import org.prebid.server.bidder.Bidder; import org.prebid.server.bidder.model.BidderBid; @@ -20,7 +19,6 @@ import org.prebid.server.util.ObjectUtil; import java.util.ArrayList; -import java.util.Collection; import java.util.Collections; import java.util.List; import java.util.Objects; @@ -59,11 +57,10 @@ private List extractBids(BidResponse bidResponse, List e return bidResponse.getSeatbid().stream() .filter(Objects::nonNull) - .map(SeatBid::getBid) - .filter(Objects::nonNull) - .flatMap(Collection::stream) - .filter(Objects::nonNull) - .map(bid -> makeBidderBid(bid, bidResponse.getCur(), errors)) + .flatMap(seatBid -> CollectionUtils.emptyIfNull(seatBid.getBid()).stream() + .filter(Objects::nonNull) + .map(bid -> BidderBid.of( + seatBid.getSeat(), makeBidderBid(bid, bidResponse.getCur(), errors)))) .filter(Objects::nonNull) .toList(); } diff --git a/src/main/java/org/prebid/server/bidder/dianomi/DianomiBidder.java b/src/main/java/org/prebid/server/bidder/dianomi/DianomiBidder.java index 9d39a981272..aed5cad785f 100644 --- a/src/main/java/org/prebid/server/bidder/dianomi/DianomiBidder.java +++ b/src/main/java/org/prebid/server/bidder/dianomi/DianomiBidder.java @@ -7,7 +7,6 @@ import com.iab.openrtb.request.Imp; import com.iab.openrtb.response.Bid; import com.iab.openrtb.response.BidResponse; -import com.iab.openrtb.response.SeatBid; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.ObjectUtils; import org.apache.commons.lang3.StringUtils; @@ -29,7 +28,6 @@ import org.prebid.server.util.ObjectUtil; import java.util.ArrayList; -import java.util.Collection; import java.util.Collections; import java.util.List; import java.util.Objects; @@ -124,11 +122,10 @@ private List extractBids(BidResponse bidResponse, List e return bidResponse.getSeatbid().stream() .filter(Objects::nonNull) - .map(SeatBid::getBid) - .filter(Objects::nonNull) - .flatMap(Collection::stream) - .filter(Objects::nonNull) - .map(bid -> makeBidderBid(bid, bidResponse.getCur(), errors)) + .flatMap(seatBid -> CollectionUtils.emptyIfNull(seatBid.getBid()).stream() + .filter(Objects::nonNull) + .map(bid -> BidderBid.of( + seatBid.getSeat(), makeBidderBid(bid, bidResponse.getCur(), errors)))) .filter(Objects::nonNull) .toList(); } diff --git a/src/main/java/org/prebid/server/bidder/displayio/DisplayioBidder.java b/src/main/java/org/prebid/server/bidder/displayio/DisplayioBidder.java index 7079cbe2213..665eefa8a18 100644 --- a/src/main/java/org/prebid/server/bidder/displayio/DisplayioBidder.java +++ b/src/main/java/org/prebid/server/bidder/displayio/DisplayioBidder.java @@ -5,7 +5,6 @@ import com.iab.openrtb.request.Imp; import com.iab.openrtb.response.Bid; import com.iab.openrtb.response.BidResponse; -import com.iab.openrtb.response.SeatBid; import io.vertx.core.MultiMap; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.StringUtils; @@ -30,7 +29,6 @@ import java.math.BigDecimal; import java.util.ArrayList; -import java.util.Collection; import java.util.Collections; import java.util.List; import java.util.Objects; @@ -159,11 +157,10 @@ private List extractBids(BidResponse bidResponse, List e return bidResponse.getSeatbid().stream() .filter(Objects::nonNull) - .map(SeatBid::getBid) - .filter(Objects::nonNull) - .flatMap(Collection::stream) - .filter(Objects::nonNull) - .map(bid -> toBidderBid(bid, bidResponse.getCur(), errors)) + .flatMap(seatBid -> CollectionUtils.emptyIfNull(seatBid.getBid()).stream() + .filter(Objects::nonNull) + .map(bid -> BidderBid.of( + seatBid.getSeat(), toBidderBid(bid, bidResponse.getCur(), errors)))) .filter(Objects::nonNull) .toList(); } diff --git a/src/main/java/org/prebid/server/bidder/dmx/DmxBidder.java b/src/main/java/org/prebid/server/bidder/dmx/DmxBidder.java index 85db83c9aa3..c684a17c410 100644 --- a/src/main/java/org/prebid/server/bidder/dmx/DmxBidder.java +++ b/src/main/java/org/prebid/server/bidder/dmx/DmxBidder.java @@ -284,7 +284,8 @@ public Result> makeBids(BidderCall httpCall, BidRequ final Bid updatedBid = bidType == BidType.video ? bid.toBuilder().adm(getAdm(bid)).build() : bid; - final BidderBid bidderBid = BidderBid.of(updatedBid, bidType, bidResponse.getCur()); + final BidderBid bidderBid = BidderBid.of(seatBid.getSeat(), updatedBid, bidType, + bidResponse.getCur()); bidderBids.add(bidderBid); } catch (PreBidException e) { errors.add(BidderError.badInput(e.getMessage())); diff --git a/src/main/java/org/prebid/server/bidder/driftpixel/DriftpixelBidder.java b/src/main/java/org/prebid/server/bidder/driftpixel/DriftpixelBidder.java index 8d783a3e03d..851eb0f31ba 100644 --- a/src/main/java/org/prebid/server/bidder/driftpixel/DriftpixelBidder.java +++ b/src/main/java/org/prebid/server/bidder/driftpixel/DriftpixelBidder.java @@ -5,7 +5,6 @@ import com.iab.openrtb.request.Imp; import com.iab.openrtb.response.Bid; import com.iab.openrtb.response.BidResponse; -import com.iab.openrtb.response.SeatBid; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.StringUtils; import org.prebid.server.bidder.Bidder; @@ -24,7 +23,6 @@ import org.prebid.server.util.Uri; import java.util.ArrayList; -import java.util.Collection; import java.util.Collections; import java.util.List; import java.util.Objects; @@ -98,10 +96,10 @@ private static List extractBids(BidResponse bidResponse, List bidsFromResponse(BidResponse bidResponse, List errors) { return bidResponse.getSeatbid().stream() .filter(Objects::nonNull) - .map(SeatBid::getBid) - .filter(Objects::nonNull) - .flatMap(Collection::stream) - .map(bid -> makeBid(bid, bidResponse.getCur(), errors)) + .flatMap(seatBid -> CollectionUtils.emptyIfNull(seatBid.getBid()).stream() + .filter(Objects::nonNull) + .map(bid -> BidderBid.of( + seatBid.getSeat(), makeBid(bid, bidResponse.getCur(), errors)))) .filter(Objects::nonNull) .toList(); } diff --git a/src/main/java/org/prebid/server/bidder/edge226/Edge226Bidder.java b/src/main/java/org/prebid/server/bidder/edge226/Edge226Bidder.java index 192ac15e9ff..2aeff743801 100644 --- a/src/main/java/org/prebid/server/bidder/edge226/Edge226Bidder.java +++ b/src/main/java/org/prebid/server/bidder/edge226/Edge226Bidder.java @@ -111,8 +111,11 @@ private List extractBids(BidResponse bidResponse) { } return bidResponse.getSeatbid().stream() - .flatMap(seatBid -> Optional.ofNullable(seatBid.getBid()).orElse(List.of()).stream()) - .map(bid -> BidderBid.of(bid, getBidMediaType(bid), bidResponse.getCur())) + .filter(Objects::nonNull) + .flatMap(seatBid -> Optional.ofNullable(seatBid.getBid()).orElse(List.of()).stream() + .filter(Objects::nonNull) + .map(bid -> BidderBid.of( + seatBid.getSeat(), bid, getBidMediaType(bid), bidResponse.getCur()))) .toList(); } diff --git a/src/main/java/org/prebid/server/bidder/elementaltv/ElementalTVBidder.java b/src/main/java/org/prebid/server/bidder/elementaltv/ElementalTVBidder.java index 07f92b66243..8129d608e38 100644 --- a/src/main/java/org/prebid/server/bidder/elementaltv/ElementalTVBidder.java +++ b/src/main/java/org/prebid/server/bidder/elementaltv/ElementalTVBidder.java @@ -7,9 +7,9 @@ import com.iab.openrtb.request.Imp; import com.iab.openrtb.response.Bid; import com.iab.openrtb.response.BidResponse; -import com.iab.openrtb.response.SeatBid; import io.vertx.core.MultiMap; import io.vertx.core.http.HttpMethod; +import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.StringUtils; import org.prebid.server.bidder.Bidder; import org.prebid.server.bidder.elementaltv.model.ElementalTVResponseAdsExt; @@ -30,7 +30,6 @@ import org.prebid.server.util.Uri; import java.util.ArrayList; -import java.util.Collection; import java.util.Collections; import java.util.HashMap; import java.util.List; @@ -107,10 +106,10 @@ public Result> makeBids(BidderCall httpCall, BidRequ final Map impTypes = getImpTypes(bidRequest); final List bidderBids = bidResponse.getSeatbid().stream() .filter(Objects::nonNull) - .map(SeatBid::getBid) - .filter(Objects::nonNull) - .flatMap(Collection::stream) - .map(bid -> createBid(bid, impTypes, bidResponse.getCur())) + .flatMap(seatBid -> CollectionUtils.emptyIfNull(seatBid.getBid()).stream() + .filter(Objects::nonNull) + .map(bid -> BidderBid.of( + seatBid.getSeat(), createBid(bid, impTypes, bidResponse.getCur())))) .toList(); return Result.withValues(bidderBids); } catch (PreBidException e) { diff --git a/src/main/java/org/prebid/server/bidder/emtv/EmtvBidder.java b/src/main/java/org/prebid/server/bidder/emtv/EmtvBidder.java index 0061563b59d..129b577d8d2 100644 --- a/src/main/java/org/prebid/server/bidder/emtv/EmtvBidder.java +++ b/src/main/java/org/prebid/server/bidder/emtv/EmtvBidder.java @@ -5,7 +5,6 @@ import com.iab.openrtb.request.BidRequest; import com.iab.openrtb.request.Imp; import com.iab.openrtb.response.BidResponse; -import com.iab.openrtb.response.SeatBid; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.StringUtils; import org.prebid.server.bidder.Bidder; @@ -25,7 +24,6 @@ import org.prebid.server.util.HttpUtil; import java.util.ArrayList; -import java.util.Collection; import java.util.Collections; import java.util.List; import java.util.Objects; @@ -119,11 +117,12 @@ private static List extractBids(BidRequest bidRequest, BidResponse bi return bidResponse.getSeatbid().stream() .filter(Objects::nonNull) - .map(SeatBid::getBid) - .filter(Objects::nonNull) - .flatMap(Collection::stream) - .filter(Objects::nonNull) - .map(bid -> BidderBid.of(bid, getBidType(bid.getImpid(), bidRequest.getImp()), bidResponse.getCur())) + .flatMap(seatBid -> CollectionUtils.emptyIfNull(seatBid.getBid()).stream() + .filter(Objects::nonNull) + .map(bid -> BidderBid.of( + seatBid.getSeat(), BidderBid.of(bid, + getBidType(bid.getImpid(), bidRequest.getImp()), + bidResponse.getCur())))) .toList(); } diff --git a/src/main/java/org/prebid/server/bidder/emxdigital/EmxDigitalBidder.java b/src/main/java/org/prebid/server/bidder/emxdigital/EmxDigitalBidder.java index 356bc0cf86a..2a006e9d9a1 100644 --- a/src/main/java/org/prebid/server/bidder/emxdigital/EmxDigitalBidder.java +++ b/src/main/java/org/prebid/server/bidder/emxdigital/EmxDigitalBidder.java @@ -10,7 +10,6 @@ import com.iab.openrtb.request.Site; import com.iab.openrtb.request.Video; import com.iab.openrtb.response.BidResponse; -import com.iab.openrtb.response.SeatBid; import io.vertx.core.MultiMap; import io.vertx.core.http.HttpMethod; import org.apache.commons.collections4.CollectionUtils; @@ -34,7 +33,6 @@ import java.math.BigDecimal; import java.time.Instant; -import java.util.Collection; import java.util.Collections; import java.util.List; import java.util.Objects; @@ -259,10 +257,11 @@ private static List extractBids(BidResponse bidResponse) { private static List bidsFromResponse(BidResponse bidResponse) { return bidResponse.getSeatbid().stream() .filter(Objects::nonNull) - .map(SeatBid::getBid) - .filter(Objects::nonNull) - .flatMap(Collection::stream) - .map(bid -> BidderBid.of(bid, getBidType(bid.getAdm()), bidResponse.getCur())) + .flatMap(seatBid -> CollectionUtils.emptyIfNull(seatBid.getBid()).stream() + .filter(Objects::nonNull) + .map(bid -> BidderBid.of( + seatBid.getSeat(), BidderBid.of(bid, + getBidType(bid.getAdm()), bidResponse.getCur())))) .toList(); } diff --git a/src/main/java/org/prebid/server/bidder/epom/EpomBidder.java b/src/main/java/org/prebid/server/bidder/epom/EpomBidder.java index 5efcee56db0..01c6c4b812f 100644 --- a/src/main/java/org/prebid/server/bidder/epom/EpomBidder.java +++ b/src/main/java/org/prebid/server/bidder/epom/EpomBidder.java @@ -4,7 +4,6 @@ import com.iab.openrtb.request.Device; import com.iab.openrtb.request.Imp; import com.iab.openrtb.response.BidResponse; -import com.iab.openrtb.response.SeatBid; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.StringUtils; import org.prebid.server.bidder.Bidder; @@ -20,7 +19,6 @@ import org.prebid.server.util.BidderUtil; import org.prebid.server.util.HttpUtil; -import java.util.Collection; import java.util.Collections; import java.util.List; import java.util.Objects; @@ -66,10 +64,12 @@ private static List extractBids(BidRequest bidRequest, BidResponse bi private static List bidsFromResponse(BidRequest bidRequest, BidResponse bidResponse) { return bidResponse.getSeatbid().stream() .filter(Objects::nonNull) - .map(SeatBid::getBid) - .filter(Objects::nonNull) - .flatMap(Collection::stream) - .map(bid -> BidderBid.of(bid, getBidType(bid.getImpid(), bidRequest.getImp()), bidResponse.getCur())) + .flatMap(seatBid -> CollectionUtils.emptyIfNull(seatBid.getBid()).stream() + .filter(Objects::nonNull) + .map(bid -> BidderBid.of( + seatBid.getSeat(), BidderBid.of(bid, + getBidType(bid.getImpid(), bidRequest.getImp()), + bidResponse.getCur())))) .toList(); } diff --git a/src/main/java/org/prebid/server/bidder/epsilon/EpsilonBidder.java b/src/main/java/org/prebid/server/bidder/epsilon/EpsilonBidder.java index ce9baacd4dc..79d5d3d39b6 100644 --- a/src/main/java/org/prebid/server/bidder/epsilon/EpsilonBidder.java +++ b/src/main/java/org/prebid/server/bidder/epsilon/EpsilonBidder.java @@ -251,8 +251,8 @@ private List bidsFromResponse(BidRequest bidRequest, BidResponse bidR } return bids.stream() .filter(Objects::nonNull) - .map(bid -> BidderBid.of(updateBidWithId(bid), getType(bid.getImpid(), - bidRequest.getImp()), bidResponse.getCur())) + .map(bid -> BidderBid.of(firstSeatBid.getSeat(), + updateBidWithId(bid), getType(bid.getImpid(), bidRequest.getImp()), bidResponse.getCur())) .toList(); } diff --git a/src/main/java/org/prebid/server/bidder/escalax/EscalaxBidder.java b/src/main/java/org/prebid/server/bidder/escalax/EscalaxBidder.java index 81b5ba7862a..376d8580eb0 100644 --- a/src/main/java/org/prebid/server/bidder/escalax/EscalaxBidder.java +++ b/src/main/java/org/prebid/server/bidder/escalax/EscalaxBidder.java @@ -6,7 +6,6 @@ import com.iab.openrtb.request.Imp; import com.iab.openrtb.response.Bid; import com.iab.openrtb.response.BidResponse; -import com.iab.openrtb.response.SeatBid; import io.vertx.core.MultiMap; import org.apache.commons.collections4.CollectionUtils; import org.prebid.server.bidder.Bidder; @@ -27,7 +26,6 @@ import org.prebid.server.util.Uri; import java.util.ArrayList; -import java.util.Collection; import java.util.List; import java.util.Objects; @@ -124,11 +122,11 @@ private static List extractBids(BidResponse bidResponse) { return bidResponse.getSeatbid().stream() .filter(Objects::nonNull) - .map(SeatBid::getBid) - .filter(Objects::nonNull) - .flatMap(Collection::stream) - .filter(Objects::nonNull) - .map(bid -> BidderBid.of(bid, getBidType(bid), bidResponse.getCur())) + .flatMap(seatBid -> CollectionUtils.emptyIfNull(seatBid.getBid()).stream() + .filter(Objects::nonNull) + .map(bid -> BidderBid.of( + seatBid.getSeat(), BidderBid.of(bid, + getBidType(bid), bidResponse.getCur())))) .toList(); } diff --git a/src/main/java/org/prebid/server/bidder/evolution/EvolutionBidder.java b/src/main/java/org/prebid/server/bidder/evolution/EvolutionBidder.java index 62a90882099..cf03c3b49ec 100644 --- a/src/main/java/org/prebid/server/bidder/evolution/EvolutionBidder.java +++ b/src/main/java/org/prebid/server/bidder/evolution/EvolutionBidder.java @@ -58,9 +58,13 @@ private List extractBids(BidResponse bidResponse) { private List bidsFromResponse(BidResponse bidResponse) { final SeatBid firstSeatBid = bidResponse.getSeatbid().getFirst(); + if (firstSeatBid == null) { + return Collections.emptyList(); + } return CollectionUtils.emptyIfNull(firstSeatBid.getBid()).stream() .filter(Objects::nonNull) - .map(bid -> BidderBid.of(bid, getBidMediaType(bid.getExt()), bidResponse.getCur())) + .map(bid -> BidderBid.of(firstSeatBid.getSeat(), bid, getBidMediaType(bid.getExt()), + bidResponse.getCur())) .toList(); } diff --git a/src/main/java/org/prebid/server/bidder/exco/ExcoBidder.java b/src/main/java/org/prebid/server/bidder/exco/ExcoBidder.java index 41e067def03..ed69b9de853 100644 --- a/src/main/java/org/prebid/server/bidder/exco/ExcoBidder.java +++ b/src/main/java/org/prebid/server/bidder/exco/ExcoBidder.java @@ -8,7 +8,6 @@ import com.iab.openrtb.request.Site; import com.iab.openrtb.response.Bid; import com.iab.openrtb.response.BidResponse; -import com.iab.openrtb.response.SeatBid; import org.apache.commons.collections4.CollectionUtils; import org.prebid.server.bidder.Bidder; import org.prebid.server.bidder.model.BidderBid; @@ -26,7 +25,6 @@ import org.prebid.server.util.HttpUtil; import java.util.ArrayList; -import java.util.Collection; import java.util.Collections; import java.util.List; import java.util.Objects; @@ -123,11 +121,10 @@ private static List extractBids(BidResponse bidResponse, List bidsFromResponse(BidResponse bidResponse, List errors) { return bidResponse.getSeatbid().stream() .filter(Objects::nonNull) - .map(SeatBid::getBid) - .filter(Objects::nonNull) - .flatMap(Collection::stream) - .filter(Objects::nonNull) - .map(bid -> makeBidderBid(bid, bidResponse.getCur(), errors)) + .flatMap(seatBid -> CollectionUtils.emptyIfNull(seatBid.getBid()).stream() + .filter(Objects::nonNull) + .map(bid -> BidderBid.of( + seatBid.getSeat(), makeBidderBid(bid, bidResponse.getCur(), errors)))) .filter(Objects::nonNull) .collect(Collectors.toList()); } diff --git a/src/main/java/org/prebid/server/bidder/feedad/FeedAdBidder.java b/src/main/java/org/prebid/server/bidder/feedad/FeedAdBidder.java index 5279e2f70b3..de2373db54e 100644 --- a/src/main/java/org/prebid/server/bidder/feedad/FeedAdBidder.java +++ b/src/main/java/org/prebid/server/bidder/feedad/FeedAdBidder.java @@ -3,7 +3,6 @@ import com.iab.openrtb.request.BidRequest; import com.iab.openrtb.request.Device; import com.iab.openrtb.response.BidResponse; -import com.iab.openrtb.response.SeatBid; import io.vertx.core.MultiMap; import org.apache.commons.collections4.CollectionUtils; import org.prebid.server.bidder.Bidder; @@ -18,7 +17,6 @@ import org.prebid.server.util.BidderUtil; import org.prebid.server.util.HttpUtil; -import java.util.Collection; import java.util.Collections; import java.util.List; import java.util.Objects; @@ -74,10 +72,11 @@ private static List extractBids(BidResponse bidResponse) { private static List bidsFromResponse(BidResponse bidResponse) { return bidResponse.getSeatbid().stream() .filter(Objects::nonNull) - .map(SeatBid::getBid) - .filter(Objects::nonNull) - .flatMap(Collection::stream) - .map(bid -> BidderBid.of(bid, BidType.banner, bidResponse.getCur())) + .flatMap(seatBid -> CollectionUtils.emptyIfNull(seatBid.getBid()).stream() + .filter(Objects::nonNull) + .map(bid -> BidderBid.of( + seatBid.getSeat(), BidderBid.of(bid, + BidType.banner, bidResponse.getCur())))) .toList(); } } diff --git a/src/main/java/org/prebid/server/bidder/flatads/FlatadsBidder.java b/src/main/java/org/prebid/server/bidder/flatads/FlatadsBidder.java index 07b74f9d8dd..5cb8adabcbf 100644 --- a/src/main/java/org/prebid/server/bidder/flatads/FlatadsBidder.java +++ b/src/main/java/org/prebid/server/bidder/flatads/FlatadsBidder.java @@ -6,7 +6,6 @@ import com.iab.openrtb.request.Imp; import com.iab.openrtb.response.Bid; import com.iab.openrtb.response.BidResponse; -import com.iab.openrtb.response.SeatBid; import io.vertx.core.MultiMap; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.StringUtils; @@ -27,7 +26,6 @@ import org.prebid.server.util.Uri; import java.util.ArrayList; -import java.util.Collection; import java.util.Collections; import java.util.List; import java.util.Map; @@ -133,11 +131,10 @@ private static List bidsFromResponse(BidRequest bidRequest, return bidResponse.getSeatbid().stream() .filter(Objects::nonNull) - .map(SeatBid::getBid) - .filter(Objects::nonNull) - .flatMap(Collection::stream) - .filter(Objects::nonNull) - .map(bid -> makeBid(bid, imps, bidResponse.getCur(), errors)) + .flatMap(seatBid -> CollectionUtils.emptyIfNull(seatBid.getBid()).stream() + .filter(Objects::nonNull) + .map(bid -> BidderBid.of( + seatBid.getSeat(), makeBid(bid, imps, bidResponse.getCur(), errors)))) .filter(Objects::nonNull) .collect(Collectors.toList()); } diff --git a/src/main/java/org/prebid/server/bidder/freewheelssp/FreewheelSSPBidder.java b/src/main/java/org/prebid/server/bidder/freewheelssp/FreewheelSSPBidder.java index 868516f5efb..8f02bd12ee1 100644 --- a/src/main/java/org/prebid/server/bidder/freewheelssp/FreewheelSSPBidder.java +++ b/src/main/java/org/prebid/server/bidder/freewheelssp/FreewheelSSPBidder.java @@ -5,7 +5,6 @@ import com.iab.openrtb.request.Imp; import com.iab.openrtb.response.Bid; import com.iab.openrtb.response.BidResponse; -import com.iab.openrtb.response.SeatBid; import io.vertx.core.MultiMap; import org.apache.commons.collections4.CollectionUtils; import org.prebid.server.bidder.Bidder; @@ -25,7 +24,6 @@ import org.prebid.server.util.HttpUtil; import java.util.ArrayList; -import java.util.Collection; import java.util.Collections; import java.util.List; import java.util.Objects; @@ -110,15 +108,15 @@ private static List extractBids(BidResponse bidResponse) { return bidResponse.getSeatbid().stream() .filter(Objects::nonNull) - .map(SeatBid::getBid) - .filter(Objects::nonNull) - .flatMap(Collection::stream) - .map(bid -> BidderBid.builder() + .flatMap(seatBid -> CollectionUtils.emptyIfNull(seatBid.getBid()).stream() + .filter(Objects::nonNull) + .map(bid -> BidderBid.of( + seatBid.getSeat(), BidderBid.builder() .bid(bid) .type(BID_TYPE) .bidCurrency(bidResponse.getCur()) .videoInfo(videoInfo(bid)) - .build()) + .build()))) .toList(); } diff --git a/src/main/java/org/prebid/server/bidder/frvradn/FrvrAdnBidder.java b/src/main/java/org/prebid/server/bidder/frvradn/FrvrAdnBidder.java index 1a1f3757ec2..4c3ce721964 100644 --- a/src/main/java/org/prebid/server/bidder/frvradn/FrvrAdnBidder.java +++ b/src/main/java/org/prebid/server/bidder/frvradn/FrvrAdnBidder.java @@ -6,7 +6,6 @@ import com.iab.openrtb.request.Imp; import com.iab.openrtb.response.Bid; import com.iab.openrtb.response.BidResponse; -import com.iab.openrtb.response.SeatBid; import org.apache.commons.collections4.CollectionUtils; import org.prebid.server.bidder.Bidder; import org.prebid.server.bidder.frvradn.model.ExtImpFrvrAdn; @@ -27,7 +26,6 @@ import java.math.BigDecimal; import java.util.ArrayList; -import java.util.Collection; import java.util.Collections; import java.util.List; import java.util.Objects; @@ -133,10 +131,10 @@ private static List extractBids(BidResponse bidResponse, List bidsFromResponse(BidResponse bidResponse, List errors) { return bidResponse.getSeatbid().stream() .filter(Objects::nonNull) - .map(SeatBid::getBid) - .filter(Objects::nonNull) - .flatMap(Collection::stream) - .map(bid -> makeBidderBid(bid, bidResponse.getCur(), errors)) + .flatMap(seatBid -> CollectionUtils.emptyIfNull(seatBid.getBid()).stream() + .filter(Objects::nonNull) + .map(bid -> BidderBid.of( + seatBid.getSeat(), makeBidderBid(bid, bidResponse.getCur(), errors)))) .filter(Objects::nonNull) .toList(); } diff --git a/src/main/java/org/prebid/server/bidder/gamoshi/GamoshiBidder.java b/src/main/java/org/prebid/server/bidder/gamoshi/GamoshiBidder.java index a62db476070..cfa71ede2d7 100644 --- a/src/main/java/org/prebid/server/bidder/gamoshi/GamoshiBidder.java +++ b/src/main/java/org/prebid/server/bidder/gamoshi/GamoshiBidder.java @@ -6,7 +6,6 @@ import com.iab.openrtb.request.Format; import com.iab.openrtb.request.Imp; import com.iab.openrtb.response.BidResponse; -import com.iab.openrtb.response.SeatBid; import io.vertx.core.MultiMap; import io.vertx.core.http.HttpMethod; import org.apache.commons.collections4.CollectionUtils; @@ -26,7 +25,6 @@ import org.prebid.server.util.Uri; import java.util.ArrayList; -import java.util.Collection; import java.util.Collections; import java.util.List; import java.util.Map; @@ -154,11 +152,12 @@ private static List bidsFromResponse(BidRequest bidRequest, BidRespon return bidResponse.getSeatbid().stream() .filter(Objects::nonNull) - .map(SeatBid::getBid) - .filter(Objects::nonNull) - .flatMap(Collection::stream) - .map(bid -> BidderBid.of(bid, impIdToBidType.getOrDefault(bid.getImpid(), BidType.banner), - bidResponse.getCur())) + .flatMap(seatBid -> CollectionUtils.emptyIfNull(seatBid.getBid()).stream() + .filter(Objects::nonNull) + .map(bid -> BidderBid.of( + seatBid.getSeat(), BidderBid.of(bid, + impIdToBidType.getOrDefault(bid.getImpid(), BidType.banner), + bidResponse.getCur())))) .toList(); } diff --git a/src/main/java/org/prebid/server/bidder/globalsun/GlobalsunBidder.java b/src/main/java/org/prebid/server/bidder/globalsun/GlobalsunBidder.java index 783ecdc5d64..a3ceb3fe484 100644 --- a/src/main/java/org/prebid/server/bidder/globalsun/GlobalsunBidder.java +++ b/src/main/java/org/prebid/server/bidder/globalsun/GlobalsunBidder.java @@ -5,7 +5,6 @@ import com.iab.openrtb.request.BidRequest; import com.iab.openrtb.request.Imp; import com.iab.openrtb.response.BidResponse; -import com.iab.openrtb.response.SeatBid; import org.apache.commons.collections4.CollectionUtils; import org.prebid.server.bidder.Bidder; import org.prebid.server.bidder.globalsun.model.GlobalsunImpExtBidder; @@ -24,7 +23,6 @@ import org.prebid.server.util.HttpUtil; import java.util.ArrayList; -import java.util.Collection; import java.util.Collections; import java.util.List; import java.util.Objects; @@ -108,11 +106,12 @@ private static List extractBids(BidRequest bidRequest, BidResponse bi return bidResponse.getSeatbid().stream() .filter(Objects::nonNull) - .map(SeatBid::getBid) - .filter(Objects::nonNull) - .flatMap(Collection::stream) - .filter(Objects::nonNull) - .map(bid -> BidderBid.of(bid, getBidType(bid.getImpid(), bidRequest.getImp()), bidResponse.getCur())) + .flatMap(seatBid -> CollectionUtils.emptyIfNull(seatBid.getBid()).stream() + .filter(Objects::nonNull) + .map(bid -> BidderBid.of( + seatBid.getSeat(), BidderBid.of(bid, + getBidType(bid.getImpid(), bidRequest.getImp()), + bidResponse.getCur())))) .toList(); } diff --git a/src/main/java/org/prebid/server/bidder/gotthamads/GothamAdsBidder.java b/src/main/java/org/prebid/server/bidder/gotthamads/GothamAdsBidder.java index c745beda007..5d1ff97b5ce 100644 --- a/src/main/java/org/prebid/server/bidder/gotthamads/GothamAdsBidder.java +++ b/src/main/java/org/prebid/server/bidder/gotthamads/GothamAdsBidder.java @@ -126,8 +126,11 @@ private static List extractBids(BidResponse bidResponse) { return bidResponse.getSeatbid() .stream() - .flatMap(seatBid -> Optional.ofNullable(seatBid.getBid()).orElse(List.of()).stream()) - .map(bid -> BidderBid.of(bid, getBidMediaType(bid), bidResponse.getCur())) + .filter(Objects::nonNull) + .flatMap(seatBid -> Optional.ofNullable(seatBid.getBid()).orElse(List.of()).stream() + .filter(Objects::nonNull) + .map(bid -> BidderBid.of( + seatBid.getSeat(), bid, getBidMediaType(bid), bidResponse.getCur()))) .toList(); } diff --git a/src/main/java/org/prebid/server/bidder/grid/GridBidder.java b/src/main/java/org/prebid/server/bidder/grid/GridBidder.java index 6c67eef66dd..8deadd46f09 100644 --- a/src/main/java/org/prebid/server/bidder/grid/GridBidder.java +++ b/src/main/java/org/prebid/server/bidder/grid/GridBidder.java @@ -20,7 +20,6 @@ import org.prebid.server.bidder.grid.model.request.GridNative; import org.prebid.server.bidder.grid.model.request.Keywords; import org.prebid.server.bidder.grid.model.response.GridBidResponse; -import org.prebid.server.bidder.grid.model.response.GridSeatBid; import org.prebid.server.bidder.model.BidderBid; import org.prebid.server.bidder.model.BidderCall; import org.prebid.server.bidder.model.BidderError; @@ -41,7 +40,6 @@ import org.prebid.server.util.ObjectUtil; import java.util.ArrayList; -import java.util.Collection; import java.util.Collections; import java.util.List; import java.util.Map; @@ -239,19 +237,20 @@ private List extractBids(BidRequest bidRequest, GridBidResponse gridB private List bidsFromResponse(BidRequest bidRequest, GridBidResponse gridBidResponse) { return gridBidResponse.getSeatbid().stream() .filter(Objects::nonNull) - .map(GridSeatBid::getBid) - .filter(Objects::nonNull) - .flatMap(Collection::stream) - .map(bid -> makeBidderBid(bid, bidRequest.getImp(), gridBidResponse.getCur())) + .filter(seatBid -> seatBid.getBid() != null) + .flatMap(seatBid -> seatBid.getBid().stream() + .filter(Objects::nonNull) + .map(bid -> makeBidderBid(bid, bidRequest.getImp(), gridBidResponse.getCur(), + seatBid.getSeat()))) .toList(); } - private BidderBid makeBidderBid(ObjectNode bidNode, List imps, String currency) { + private BidderBid makeBidderBid(ObjectNode bidNode, List imps, String currency, String originalSeat) { try { final Bid bid = mapper.mapper().treeToValue(bidNode, Bid.class); final Bid modifiedBid = bid.toBuilder().adm(modifyAdm(bidNode, bid)).ext(modifyBidExt(bidNode)).build(); - return BidderBid.of(modifiedBid, resolveBidType(bidNode, bid.getImpid(), imps), currency); + return BidderBid.of(originalSeat, modifiedBid, resolveBidType(bidNode, bid.getImpid(), imps), currency); } catch (JsonProcessingException | IllegalArgumentException e) { throw new PreBidException(e.getMessage()); } diff --git a/src/main/java/org/prebid/server/bidder/gumgum/GumgumBidder.java b/src/main/java/org/prebid/server/bidder/gumgum/GumgumBidder.java index 926af4ffbe6..513e65cdfb0 100644 --- a/src/main/java/org/prebid/server/bidder/gumgum/GumgumBidder.java +++ b/src/main/java/org/prebid/server/bidder/gumgum/GumgumBidder.java @@ -11,7 +11,6 @@ import com.iab.openrtb.request.Video; import com.iab.openrtb.response.Bid; import com.iab.openrtb.response.BidResponse; -import com.iab.openrtb.response.SeatBid; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.ObjectUtils; import org.apache.commons.lang3.StringUtils; @@ -36,7 +35,6 @@ import java.math.BigDecimal; import java.math.BigInteger; import java.util.ArrayList; -import java.util.Collection; import java.util.Collections; import java.util.Comparator; import java.util.List; @@ -212,7 +210,8 @@ private static Site modifySite(Site requestSite, String zone, BigInteger pubId) public Result> makeBids(BidderCall httpCall, BidRequest bidRequest) { try { final BidResponse bidResponse = mapper.decodeValue(httpCall.getResponse().getBody(), BidResponse.class); - return Result.of(extractBids(bidResponse, bidRequest), Collections.emptyList()); + return Result.of(extractBids(bidResponse, bidRequest), + Collections.emptyList()); } catch (DecodeException | PreBidException e) { return Result.withError(BidderError.badServerResponse(e.getMessage())); } @@ -227,19 +226,20 @@ private static List extractBids(BidResponse bidResponse, BidRequest b private static List bidsFromResponse(BidResponse bidResponse, BidRequest bidRequest) { return bidResponse.getSeatbid().stream() .filter(Objects::nonNull) - .map(SeatBid::getBid) - .flatMap(Collection::stream) + .filter(seatBid -> seatBid.getBid() != null) + .flatMap(seatBid -> seatBid.getBid().stream() + .filter(Objects::nonNull) + .map(bid -> toBidderBid(bid, bidRequest, bidResponse.getCur(), seatBid.getSeat()))) .filter(Objects::nonNull) - .map(bid -> toBidderBid(bid, bidRequest, bidResponse.getCur())) .toList(); } - private static BidderBid toBidderBid(Bid bid, BidRequest bidRequest, String currency) { + private static BidderBid toBidderBid(Bid bid, BidRequest bidRequest, String currency, String originalSeat) { final BidType bidType = getBidType(bid.getImpid(), bidRequest.getImp()); final Bid updatedBid = bidType == BidType.video ? bid.toBuilder().adm(resolveAdm(bid.getAdm(), bid.getPrice())).build() : bid; - return BidderBid.of(updatedBid, bidType, currency); + return BidderBid.of(originalSeat, updatedBid, bidType, currency); } private static BidType getBidType(String impId, List imps) { diff --git a/src/main/java/org/prebid/server/bidder/imds/ImdsBidder.java b/src/main/java/org/prebid/server/bidder/imds/ImdsBidder.java index 1ff66d79370..e47e061d2c5 100644 --- a/src/main/java/org/prebid/server/bidder/imds/ImdsBidder.java +++ b/src/main/java/org/prebid/server/bidder/imds/ImdsBidder.java @@ -6,7 +6,6 @@ import com.iab.openrtb.request.Imp; import com.iab.openrtb.response.Bid; import com.iab.openrtb.response.BidResponse; -import com.iab.openrtb.response.SeatBid; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.StringUtils; import org.prebid.server.bidder.Bidder; @@ -27,7 +26,6 @@ import org.prebid.server.util.Uri; import java.util.ArrayList; -import java.util.Collection; import java.util.Collections; import java.util.List; import java.util.Objects; @@ -135,10 +133,10 @@ private static List extractBids(BidResponse bidResponse, BidRequest b private static List bidsFromResponse(BidResponse bidResponse, BidRequest bidRequest) { return bidResponse.getSeatbid().stream() - .map(SeatBid::getBid) - .filter(Objects::nonNull) - .flatMap(Collection::stream) - .map(bid -> mapBidToBidderBid(bid, bidRequest.getImp(), bidResponse.getCur())) + .flatMap(seatBid -> CollectionUtils.emptyIfNull(seatBid.getBid()).stream() + .filter(Objects::nonNull) + .map(bid -> BidderBid.of( + seatBid.getSeat(), mapBidToBidderBid(bid, bidRequest.getImp(), bidResponse.getCur())))) .filter(Objects::nonNull) .toList(); } diff --git a/src/main/java/org/prebid/server/bidder/impactify/ImpactifyBidder.java b/src/main/java/org/prebid/server/bidder/impactify/ImpactifyBidder.java index 28aa64c790a..0ee8489bc22 100644 --- a/src/main/java/org/prebid/server/bidder/impactify/ImpactifyBidder.java +++ b/src/main/java/org/prebid/server/bidder/impactify/ImpactifyBidder.java @@ -7,7 +7,6 @@ import com.iab.openrtb.request.Site; import com.iab.openrtb.request.User; import com.iab.openrtb.response.BidResponse; -import com.iab.openrtb.response.SeatBid; import io.vertx.core.MultiMap; import io.vertx.core.http.HttpMethod; import org.apache.commons.collections4.CollectionUtils; @@ -31,7 +30,6 @@ import java.math.BigDecimal; import java.util.ArrayList; -import java.util.Collection; import java.util.Collections; import java.util.List; import java.util.Objects; @@ -177,9 +175,12 @@ private List extractBids(BidRequest bidRequest, BidResponse bidRespon private List bidsFromResponse(BidResponse bidResponse, BidRequest bidRequest) { return bidResponse.getSeatbid().stream() .filter(Objects::nonNull) - .map(SeatBid::getBid) - .flatMap(Collection::stream) - .map(bid -> BidderBid.of(bid, getBidType(bid.getImpid(), bidRequest.getImp()), bidResponse.getCur())) + .flatMap(seatBid -> CollectionUtils.emptyIfNull(seatBid.getBid()).stream() + .filter(Objects::nonNull) + .map(bid -> BidderBid.of( + seatBid.getSeat(), BidderBid.of(bid, + getBidType(bid.getImpid(), bidRequest.getImp()), + bidResponse.getCur())))) .toList(); } diff --git a/src/main/java/org/prebid/server/bidder/improvedigital/ImprovedigitalBidder.java b/src/main/java/org/prebid/server/bidder/improvedigital/ImprovedigitalBidder.java index 59564195b09..74accc75993 100644 --- a/src/main/java/org/prebid/server/bidder/improvedigital/ImprovedigitalBidder.java +++ b/src/main/java/org/prebid/server/bidder/improvedigital/ImprovedigitalBidder.java @@ -9,7 +9,6 @@ import com.iab.openrtb.request.Imp; import com.iab.openrtb.response.Bid; import com.iab.openrtb.response.BidResponse; -import com.iab.openrtb.response.SeatBid; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.StringUtils; import org.prebid.server.bidder.Bidder; @@ -30,7 +29,6 @@ import org.prebid.server.util.Uri; import java.util.ArrayList; -import java.util.Collection; import java.util.Collections; import java.util.List; import java.util.Map; @@ -139,23 +137,22 @@ private List bidsFromResponse(BidRequest bidRequest, BidResponse bidR .collect(Collectors.toMap(Imp::getId, Function.identity())); return bidResponse.getSeatbid().stream() .filter(Objects::nonNull) - .map(SeatBid::getBid) - .filter(Objects::nonNull) - .flatMap(Collection::stream) - .filter(Objects::nonNull) - .map(bid -> createBidderBid(bid, impMap, bidResponse.getCur())) + .filter(seatBid -> seatBid.getBid() != null) + .flatMap(seatBid -> seatBid.getBid().stream() + .filter(Objects::nonNull) + .map(bid -> createBidderBid(bid, impMap, bidResponse.getCur(), seatBid.getSeat()))) .filter(Objects::nonNull) .toList(); } - private BidderBid createBidderBid(Bid bid, Map impMap, String cur) { + private BidderBid createBidderBid(Bid bid, Map impMap, String cur, String originalSeat) { final Imp imp = impMap.get(bid.getImpid()); if (imp == null) { throw new PreBidException( "Failed to find impression for ID: \"%s\"".formatted(bid.getImpid())); } final Bid resolvedBid = resolveBid(bid, imp); - return BidderBid.of(resolvedBid, getBidType(resolvedBid), cur); + return BidderBid.of(originalSeat, resolvedBid, getBidType(resolvedBid), cur); } private Bid resolveBid(Bid bid, Imp imp) { diff --git a/src/main/java/org/prebid/server/bidder/inmobi/InmobiBidder.java b/src/main/java/org/prebid/server/bidder/inmobi/InmobiBidder.java index 33e8d25e9d7..a0649ece7b2 100644 --- a/src/main/java/org/prebid/server/bidder/inmobi/InmobiBidder.java +++ b/src/main/java/org/prebid/server/bidder/inmobi/InmobiBidder.java @@ -7,7 +7,6 @@ import com.iab.openrtb.request.Imp; import com.iab.openrtb.response.Bid; import com.iab.openrtb.response.BidResponse; -import com.iab.openrtb.response.SeatBid; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.StringUtils; import org.prebid.server.bidder.Bidder; @@ -26,7 +25,6 @@ import org.prebid.server.util.HttpUtil; import java.util.ArrayList; -import java.util.Collection; import java.util.Collections; import java.util.List; import java.util.Objects; @@ -112,10 +110,11 @@ private List extractBids(BidResponse bidResponse) { private List bidsFromResponse(BidResponse bidResponse) { return bidResponse.getSeatbid().stream() .filter(Objects::nonNull) - .map(SeatBid::getBid) - .filter(Objects::nonNull) - .flatMap(Collection::stream) - .map(bid -> BidderBid.of(bid, getBidType(bid), bidResponse.getCur())) + .filter(seatBid -> seatBid.getBid() != null) + .flatMap(seatBid -> seatBid.getBid().stream() + .filter(Objects::nonNull) + .map(bid -> BidderBid.of( + seatBid.getSeat(), bid, getBidType(bid), bidResponse.getCur()))) .toList(); } diff --git a/src/main/java/org/prebid/server/bidder/insticator/InsticatorBidder.java b/src/main/java/org/prebid/server/bidder/insticator/InsticatorBidder.java index cd8ebe32bb8..98e82d358e8 100644 --- a/src/main/java/org/prebid/server/bidder/insticator/InsticatorBidder.java +++ b/src/main/java/org/prebid/server/bidder/insticator/InsticatorBidder.java @@ -262,7 +262,7 @@ private Stream bidsFromSeatBid(SeatBid seatBid, String currency) { final String seat = seatBid.getSeat(); return bids.stream() .filter(Objects::nonNull) - .map(bid -> BidderBid.of(modifyBidExt(bid, seat), getBidType(bid), currency)); + .map(bid -> BidderBid.of(seatBid.getSeat(), modifyBidExt(bid, seat), getBidType(bid), currency)); } private Bid modifyBidExt(Bid bid, String seat) { diff --git a/src/main/java/org/prebid/server/bidder/interactiveoffers/InteractiveOffersBidder.java b/src/main/java/org/prebid/server/bidder/interactiveoffers/InteractiveOffersBidder.java index bc774e1408b..83bb6a29a82 100644 --- a/src/main/java/org/prebid/server/bidder/interactiveoffers/InteractiveOffersBidder.java +++ b/src/main/java/org/prebid/server/bidder/interactiveoffers/InteractiveOffersBidder.java @@ -3,7 +3,6 @@ import com.fasterxml.jackson.databind.node.ObjectNode; import com.iab.openrtb.request.BidRequest; import com.iab.openrtb.response.BidResponse; -import com.iab.openrtb.response.SeatBid; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.StringUtils; import org.prebid.server.bidder.Bidder; @@ -19,7 +18,6 @@ import org.prebid.server.util.BidderUtil; import org.prebid.server.util.Uri; -import java.util.Collection; import java.util.Collections; import java.util.List; import java.util.Objects; @@ -70,10 +68,11 @@ private static List extractBids(BidResponse bidResponse) { private static List bidsFromResponse(BidResponse bidResponse) { return bidResponse.getSeatbid().stream() .filter(Objects::nonNull) - .map(SeatBid::getBid) - .filter(Objects::nonNull) - .flatMap(Collection::stream) - .map(bid -> BidderBid.of(bid, BidType.banner, bidResponse.getCur())) + .flatMap(seatBid -> CollectionUtils.emptyIfNull(seatBid.getBid()).stream() + .filter(Objects::nonNull) + .map(bid -> BidderBid.of( + seatBid.getSeat(), BidderBid.of(bid, + BidType.banner, bidResponse.getCur())))) .toList(); } } diff --git a/src/main/java/org/prebid/server/bidder/iqx/IqxBidder.java b/src/main/java/org/prebid/server/bidder/iqx/IqxBidder.java index e4d5d0af95a..ea39976da9a 100644 --- a/src/main/java/org/prebid/server/bidder/iqx/IqxBidder.java +++ b/src/main/java/org/prebid/server/bidder/iqx/IqxBidder.java @@ -5,7 +5,6 @@ import com.iab.openrtb.request.Imp; import com.iab.openrtb.response.Bid; import com.iab.openrtb.response.BidResponse; -import com.iab.openrtb.response.SeatBid; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.ObjectUtils; import org.apache.commons.lang3.StringUtils; @@ -25,7 +24,6 @@ import org.prebid.server.util.Uri; import java.util.ArrayList; -import java.util.Collection; import java.util.Collections; import java.util.List; import java.util.Objects; @@ -108,11 +106,10 @@ private static List extractBids(BidResponse bidResponse, List makeBid(bid, bidResponse.getCur(), errors)) + .flatMap(seatBid -> CollectionUtils.emptyIfNull(seatBid.getBid()).stream() + .filter(Objects::nonNull) + .map(bid -> BidderBid.of( + seatBid.getSeat(), makeBid(bid, bidResponse.getCur(), errors)))) .filter(Objects::nonNull) .toList(); } diff --git a/src/main/java/org/prebid/server/bidder/iqzone/IqzoneBidder.java b/src/main/java/org/prebid/server/bidder/iqzone/IqzoneBidder.java index c6f473bc52a..9b9bf3ae52c 100644 --- a/src/main/java/org/prebid/server/bidder/iqzone/IqzoneBidder.java +++ b/src/main/java/org/prebid/server/bidder/iqzone/IqzoneBidder.java @@ -7,7 +7,6 @@ import com.iab.openrtb.request.Imp; import com.iab.openrtb.response.Bid; import com.iab.openrtb.response.BidResponse; -import com.iab.openrtb.response.SeatBid; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.StringUtils; import org.prebid.server.bidder.Bidder; @@ -26,7 +25,6 @@ import org.prebid.server.util.HttpUtil; import java.util.ArrayList; -import java.util.Collection; import java.util.Collections; import java.util.List; import java.util.Objects; @@ -117,11 +115,11 @@ private List extractBids(BidResponse bidResponse) { return bidResponse.getSeatbid().stream() .filter(Objects::nonNull) - .map(SeatBid::getBid) - .filter(Objects::nonNull) - .flatMap(Collection::stream) - .filter(Objects::nonNull) - .map(bid -> BidderBid.of(bid, getBidMediaType(bid), bidResponse.getCur())) + .flatMap(seatBid -> CollectionUtils.emptyIfNull(seatBid.getBid()).stream() + .filter(Objects::nonNull) + .map(bid -> BidderBid.of( + seatBid.getSeat(), BidderBid.of(bid, + getBidMediaType(bid), bidResponse.getCur())))) .toList(); } diff --git a/src/main/java/org/prebid/server/bidder/ix/IxBidder.java b/src/main/java/org/prebid/server/bidder/ix/IxBidder.java index 7c0ad863a34..76e565945b5 100644 --- a/src/main/java/org/prebid/server/bidder/ix/IxBidder.java +++ b/src/main/java/org/prebid/server/bidder/ix/IxBidder.java @@ -18,7 +18,6 @@ import com.iab.openrtb.response.BidResponse; import com.iab.openrtb.response.EventTracker; import com.iab.openrtb.response.Response; -import com.iab.openrtb.response.SeatBid; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.StringUtils; import org.prebid.server.bidder.Bidder; @@ -259,16 +258,16 @@ private List extractBids(BidRequest bidRequest, return bidResponse.getSeatbid().stream() .filter(Objects::nonNull) - .map(SeatBid::getBid) - .filter(Objects::nonNull) - .flatMap(Collection::stream) - .filter(Objects::nonNull) - .map(bid -> toBidderBid(bid, bidRequest, bidResponse, errors)) + .filter(seatBid -> seatBid.getBid() != null) + .flatMap(seatBid -> seatBid.getBid().stream() + .filter(Objects::nonNull) + .map(bid -> toBidderBid(bid, bidRequest, bidResponse, errors, seatBid.getSeat()))) .filter(Objects::nonNull) .toList(); } - private BidderBid toBidderBid(Bid bid, BidRequest bidRequest, BidResponse bidResponse, List errors) { + private BidderBid toBidderBid( + Bid bid, BidRequest bidRequest, BidResponse bidResponse, List errors, String originalSeat) { final BidType bidType; try { bidType = getBidType(bid, bidRequest.getImp()); @@ -289,6 +288,7 @@ private BidderBid toBidderBid(Bid bid, BidRequest bidRequest, BidResponse bidRes return BidderBid.builder() .bid(updatedBid) + .originalSeat(originalSeat) .type(bidType) .bidCurrency(bidResponse.getCur()) .videoInfo(bidType == BidType.video ? videoInfo(extBidPrebidVideo) : null) diff --git a/src/main/java/org/prebid/server/bidder/jixie/JixieBidder.java b/src/main/java/org/prebid/server/bidder/jixie/JixieBidder.java index a556815063e..62077905bde 100644 --- a/src/main/java/org/prebid/server/bidder/jixie/JixieBidder.java +++ b/src/main/java/org/prebid/server/bidder/jixie/JixieBidder.java @@ -4,7 +4,6 @@ import com.iab.openrtb.request.Device; import com.iab.openrtb.request.Site; import com.iab.openrtb.response.BidResponse; -import com.iab.openrtb.response.SeatBid; import io.vertx.core.MultiMap; import io.vertx.core.http.HttpMethod; import org.apache.commons.collections4.CollectionUtils; @@ -21,7 +20,6 @@ import org.prebid.server.proto.openrtb.ext.response.BidType; import org.prebid.server.util.HttpUtil; -import java.util.Collection; import java.util.Collections; import java.util.List; import java.util.Objects; @@ -82,10 +80,11 @@ private static List extractBids(BidResponse bidResponse) { private static List bidsFromResponse(BidResponse bidResponse) { return bidResponse.getSeatbid().stream() .filter(Objects::nonNull) - .map(SeatBid::getBid) - .filter(Objects::nonNull) - .flatMap(Collection::stream) - .map(bid -> BidderBid.of(bid, getBidType(bid.getAdm()), bidResponse.getCur())) + .flatMap(seatBid -> CollectionUtils.emptyIfNull(seatBid.getBid()).stream() + .filter(Objects::nonNull) + .map(bid -> BidderBid.of( + seatBid.getSeat(), BidderBid.of(bid, + getBidType(bid.getAdm()), bidResponse.getCur())))) .toList(); } diff --git a/src/main/java/org/prebid/server/bidder/kargo/KargoBidder.java b/src/main/java/org/prebid/server/bidder/kargo/KargoBidder.java index ea0025e974d..66a7bff3ce5 100644 --- a/src/main/java/org/prebid/server/bidder/kargo/KargoBidder.java +++ b/src/main/java/org/prebid/server/bidder/kargo/KargoBidder.java @@ -4,7 +4,6 @@ import com.iab.openrtb.request.BidRequest; import com.iab.openrtb.response.Bid; import com.iab.openrtb.response.BidResponse; -import com.iab.openrtb.response.SeatBid; import org.apache.commons.collections4.CollectionUtils; import org.prebid.server.bidder.Bidder; import org.prebid.server.bidder.kargo.model.KargoExtBid; @@ -20,7 +19,6 @@ import org.prebid.server.util.BidderUtil; import org.prebid.server.util.HttpUtil; -import java.util.Collection; import java.util.Collections; import java.util.List; import java.util.Objects; @@ -61,10 +59,11 @@ private List extractBids(BidResponse bidResponse) { private List bidsFromResponse(BidResponse bidResponse) { return bidResponse.getSeatbid().stream() .filter(Objects::nonNull) - .map(SeatBid::getBid) - .filter(Objects::nonNull) - .flatMap(Collection::stream) - .map(bid -> BidderBid.of(bid, resolvedBidType(bid), bidResponse.getCur())) + .filter(seatBid -> seatBid.getBid() != null) + .flatMap(seatBid -> seatBid.getBid().stream() + .filter(Objects::nonNull) + .map(bid -> BidderBid.of( + seatBid.getSeat(), bid, resolvedBidType(bid), bidResponse.getCur()))) .collect(Collectors.toList()); } diff --git a/src/main/java/org/prebid/server/bidder/kayzen/KayzenBidder.java b/src/main/java/org/prebid/server/bidder/kayzen/KayzenBidder.java index fc30b5886e7..7227e3427ea 100644 --- a/src/main/java/org/prebid/server/bidder/kayzen/KayzenBidder.java +++ b/src/main/java/org/prebid/server/bidder/kayzen/KayzenBidder.java @@ -4,7 +4,6 @@ import com.iab.openrtb.request.BidRequest; import com.iab.openrtb.request.Imp; import com.iab.openrtb.response.BidResponse; -import com.iab.openrtb.response.SeatBid; import org.apache.commons.collections4.CollectionUtils; import org.prebid.server.bidder.Bidder; import org.prebid.server.bidder.model.BidderBid; @@ -22,7 +21,6 @@ import org.prebid.server.util.Uri; import java.util.ArrayList; -import java.util.Collection; import java.util.Collections; import java.util.List; import java.util.Objects; @@ -99,11 +97,11 @@ private static List extractBids(BidRequest bidRequest, BidResponse bi private static List bidsFromResponse(BidRequest bidRequest, BidResponse bidResponse) { return bidResponse.getSeatbid().stream() .filter(Objects::nonNull) - .map(SeatBid::getBid) - .filter(Objects::nonNull) - .flatMap(Collection::stream) - .map(bid -> BidderBid.of(bid, - getBidMediaType(bid.getImpid(), bidRequest.getImp()), bidResponse.getCur())) + .flatMap(seatBid -> CollectionUtils.emptyIfNull(seatBid.getBid()).stream() + .filter(Objects::nonNull) + .map(bid -> BidderBid.of( + seatBid.getSeat(), BidderBid.of(bid, + getBidMediaType(bid.getImpid(), bidRequest.getImp()), bidResponse.getCur())))) .toList(); } diff --git a/src/main/java/org/prebid/server/bidder/kidoz/KidozBidder.java b/src/main/java/org/prebid/server/bidder/kidoz/KidozBidder.java index 88568ee41f1..2d4fa28f3a0 100644 --- a/src/main/java/org/prebid/server/bidder/kidoz/KidozBidder.java +++ b/src/main/java/org/prebid/server/bidder/kidoz/KidozBidder.java @@ -6,7 +6,6 @@ import com.iab.openrtb.request.Imp; import com.iab.openrtb.response.Bid; import com.iab.openrtb.response.BidResponse; -import com.iab.openrtb.response.SeatBid; import io.vertx.core.MultiMap; import io.vertx.core.http.HttpMethod; import org.apache.commons.collections4.CollectionUtils; @@ -26,7 +25,6 @@ import org.prebid.server.util.HttpUtil; import java.util.ArrayList; -import java.util.Collection; import java.util.Collections; import java.util.List; import java.util.Objects; @@ -129,10 +127,11 @@ private static Result> extractBids(BidRequest bidRequest, BidRes final List errors = new ArrayList<>(); final List bidderBids = bidResponse.getSeatbid().stream() .filter(Objects::nonNull) - .map(SeatBid::getBid) - .filter(Objects::nonNull) - .flatMap(Collection::stream) - .map(bid -> bidFromResponse(bidRequest.getImp(), bid, bidResponse.getCur(), errors)) + .flatMap(seatBid -> CollectionUtils.emptyIfNull(seatBid.getBid()).stream() + .filter(Objects::nonNull) + .map(bid -> BidderBid.of( + seatBid.getSeat(), + bidFromResponse(bidRequest.getImp(), bid, bidResponse.getCur(), errors)))) .filter(Objects::nonNull) .toList(); return Result.of(bidderBids, errors); diff --git a/src/main/java/org/prebid/server/bidder/kiviads/KiviAdsBidder.java b/src/main/java/org/prebid/server/bidder/kiviads/KiviAdsBidder.java index 54d735b8e83..c72ca57c3dd 100644 --- a/src/main/java/org/prebid/server/bidder/kiviads/KiviAdsBidder.java +++ b/src/main/java/org/prebid/server/bidder/kiviads/KiviAdsBidder.java @@ -5,7 +5,6 @@ import com.iab.openrtb.request.BidRequest; import com.iab.openrtb.request.Imp; import com.iab.openrtb.response.BidResponse; -import com.iab.openrtb.response.SeatBid; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.StringUtils; import org.prebid.server.bidder.Bidder; @@ -25,7 +24,6 @@ import org.prebid.server.util.HttpUtil; import java.util.ArrayList; -import java.util.Collection; import java.util.Collections; import java.util.List; import java.util.Objects; @@ -119,11 +117,12 @@ private static List extractBids(BidRequest bidRequest, BidResponse bi return bidResponse.getSeatbid().stream() .filter(Objects::nonNull) - .map(SeatBid::getBid) - .filter(Objects::nonNull) - .flatMap(Collection::stream) - .filter(Objects::nonNull) - .map(bid -> BidderBid.of(bid, getBidType(bid.getImpid(), bidRequest.getImp()), bidResponse.getCur())) + .flatMap(seatBid -> CollectionUtils.emptyIfNull(seatBid.getBid()).stream() + .filter(Objects::nonNull) + .map(bid -> BidderBid.of( + seatBid.getSeat(), BidderBid.of(bid, + getBidType(bid.getImpid(), bidRequest.getImp()), + bidResponse.getCur())))) .toList(); } diff --git a/src/main/java/org/prebid/server/bidder/kobler/KoblerBidder.java b/src/main/java/org/prebid/server/bidder/kobler/KoblerBidder.java index b87df9dcffa..aa6203d56b9 100644 --- a/src/main/java/org/prebid/server/bidder/kobler/KoblerBidder.java +++ b/src/main/java/org/prebid/server/bidder/kobler/KoblerBidder.java @@ -9,7 +9,6 @@ import com.iab.openrtb.request.Imp; import com.iab.openrtb.response.Bid; import com.iab.openrtb.response.BidResponse; -import com.iab.openrtb.response.SeatBid; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.BooleanUtils; import org.prebid.server.bidder.Bidder; @@ -32,7 +31,6 @@ import java.math.BigDecimal; import java.util.ArrayList; -import java.util.Collection; import java.util.Collections; import java.util.List; import java.util.Objects; @@ -166,11 +164,11 @@ private List extractBids(BidResponse bidResponse) { private List bidsFromResponse(BidResponse bidResponse) { return bidResponse.getSeatbid().stream() .filter(Objects::nonNull) - .map(SeatBid::getBid) - .filter(Objects::nonNull) - .flatMap(Collection::stream) - .filter(Objects::nonNull) - .map(bid -> BidderBid.of(bid, getBidType(bid), bidResponse.getCur())) + .flatMap(seatBid -> CollectionUtils.emptyIfNull(seatBid.getBid()).stream() + .filter(Objects::nonNull) + .map(bid -> BidderBid.of( + seatBid.getSeat(), BidderBid.of(bid, + getBidType(bid), bidResponse.getCur())))) .toList(); } diff --git a/src/main/java/org/prebid/server/bidder/krushmedia/KrushmediaBidder.java b/src/main/java/org/prebid/server/bidder/krushmedia/KrushmediaBidder.java index a6af9db3500..d4f69b22723 100644 --- a/src/main/java/org/prebid/server/bidder/krushmedia/KrushmediaBidder.java +++ b/src/main/java/org/prebid/server/bidder/krushmedia/KrushmediaBidder.java @@ -129,10 +129,14 @@ private List extractBids(BidRequest bidRequest, BidResponse bidRespon private List bidsFromResponse(BidRequest bidRequest, BidResponse bidResponse) { final SeatBid firstSeatBid = bidResponse.getSeatbid().getFirst(); + if (firstSeatBid == null) { + return Collections.emptyList(); + } - return firstSeatBid.getBid().stream() + return CollectionUtils.emptyIfNull(firstSeatBid.getBid()).stream() .filter(Objects::nonNull) - .map(bid -> BidderBid.of(bid, getBidType(bid.getImpid(), bidRequest.getImp()), bidResponse.getCur())) + .map(bid -> BidderBid.of(firstSeatBid.getSeat(), bid, + getBidType(bid.getImpid(), bidRequest.getImp()), bidResponse.getCur())) .toList(); } diff --git a/src/main/java/org/prebid/server/bidder/kueezrtb/KueezRtbBidder.java b/src/main/java/org/prebid/server/bidder/kueezrtb/KueezRtbBidder.java index 915831df21e..ab7220db62d 100644 --- a/src/main/java/org/prebid/server/bidder/kueezrtb/KueezRtbBidder.java +++ b/src/main/java/org/prebid/server/bidder/kueezrtb/KueezRtbBidder.java @@ -5,7 +5,7 @@ import com.iab.openrtb.request.Imp; import com.iab.openrtb.response.Bid; import com.iab.openrtb.response.BidResponse; -import com.iab.openrtb.response.SeatBid; +import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.StringUtils; import org.prebid.server.bidder.Bidder; import org.prebid.server.bidder.model.BidderBid; @@ -21,10 +21,8 @@ import org.prebid.server.proto.openrtb.ext.response.BidType; import org.prebid.server.util.BidderUtil; import org.prebid.server.util.Uri; -import org.springframework.util.CollectionUtils; import java.util.ArrayList; -import java.util.Collection; import java.util.Collections; import java.util.List; import java.util.Objects; @@ -93,11 +91,10 @@ private static List extractBids(BidResponse bidResponse, List makeBid(bid, bidResponse.getCur(), errors)) + .flatMap(seatBid -> CollectionUtils.emptyIfNull(seatBid.getBid()).stream() + .filter(Objects::nonNull) + .map(bid -> BidderBid.of( + seatBid.getSeat(), makeBid(bid, bidResponse.getCur(), errors)))) .filter(Objects::nonNull) .toList(); } diff --git a/src/main/java/org/prebid/server/bidder/lemmadigital/LemmaDigitalBidder.java b/src/main/java/org/prebid/server/bidder/lemmadigital/LemmaDigitalBidder.java index 988e83087ba..cabd78c3488 100644 --- a/src/main/java/org/prebid/server/bidder/lemmadigital/LemmaDigitalBidder.java +++ b/src/main/java/org/prebid/server/bidder/lemmadigital/LemmaDigitalBidder.java @@ -4,7 +4,6 @@ import com.iab.openrtb.request.BidRequest; import com.iab.openrtb.request.Imp; import com.iab.openrtb.response.BidResponse; -import com.iab.openrtb.response.SeatBid; import io.vertx.core.http.HttpMethod; import org.apache.commons.collections4.CollectionUtils; import org.prebid.server.bidder.Bidder; @@ -23,7 +22,6 @@ import org.prebid.server.util.HttpUtil; import org.prebid.server.util.Uri; -import java.util.Collection; import java.util.Collections; import java.util.List; import java.util.Objects; @@ -110,10 +108,11 @@ private static List bidsFromResponse(BidRequest bidRequest, BidRespon final BidType bidType = resolveBidType(bidRequest); return bidResponse.getSeatbid().stream() .filter(Objects::nonNull) - .map(SeatBid::getBid) - .filter(Objects::nonNull) - .flatMap(Collection::stream) - .map(bid -> BidderBid.of(bid, bidType, bidResponse.getCur())) + .flatMap(seatBid -> CollectionUtils.emptyIfNull(seatBid.getBid()).stream() + .filter(Objects::nonNull) + .map(bid -> BidderBid.of( + seatBid.getSeat(), BidderBid.of(bid, + bidType, bidResponse.getCur())))) .toList(); } diff --git a/src/main/java/org/prebid/server/bidder/limelightdigital/LimeLightDigitalBidder.java b/src/main/java/org/prebid/server/bidder/limelightdigital/LimeLightDigitalBidder.java index 0afae4b5182..b75f1aa1a38 100644 --- a/src/main/java/org/prebid/server/bidder/limelightdigital/LimeLightDigitalBidder.java +++ b/src/main/java/org/prebid/server/bidder/limelightdigital/LimeLightDigitalBidder.java @@ -5,7 +5,6 @@ import com.iab.openrtb.request.Imp; import com.iab.openrtb.response.Bid; import com.iab.openrtb.response.BidResponse; -import com.iab.openrtb.response.SeatBid; import org.apache.commons.collections4.CollectionUtils; import org.prebid.server.bidder.Bidder; import org.prebid.server.bidder.model.BidderBid; @@ -26,7 +25,6 @@ import java.math.BigDecimal; import java.util.ArrayList; -import java.util.Collection; import java.util.Collections; import java.util.List; import java.util.Objects; @@ -157,10 +155,11 @@ private static List bidsFromResponse(BidRequest bidRequest, List errors) { return bidResponse.getSeatbid().stream() .filter(Objects::nonNull) - .map(SeatBid::getBid) - .filter(Objects::nonNull) - .flatMap(Collection::stream) - .map(bid -> resolveBidderBid(bid, bidResponse.getCur(), bidRequest.getImp(), errors)) + .flatMap(seatBid -> CollectionUtils.emptyIfNull(seatBid.getBid()).stream() + .filter(Objects::nonNull) + .map(bid -> BidderBid.of( + seatBid.getSeat(), + resolveBidderBid(bid, bidResponse.getCur(), bidRequest.getImp(), errors)))) .filter(Objects::nonNull) .toList(); } diff --git a/src/main/java/org/prebid/server/bidder/lmkiviads/LmKiviAdsBidder.java b/src/main/java/org/prebid/server/bidder/lmkiviads/LmKiviAdsBidder.java index 1b214076dd8..49f10c9c737 100644 --- a/src/main/java/org/prebid/server/bidder/lmkiviads/LmKiviAdsBidder.java +++ b/src/main/java/org/prebid/server/bidder/lmkiviads/LmKiviAdsBidder.java @@ -5,7 +5,6 @@ import com.iab.openrtb.request.Imp; import com.iab.openrtb.response.Bid; import com.iab.openrtb.response.BidResponse; -import com.iab.openrtb.response.SeatBid; import io.vertx.core.http.HttpMethod; import org.apache.commons.collections4.CollectionUtils; import org.prebid.server.bidder.Bidder; @@ -25,7 +24,6 @@ import org.prebid.server.util.Uri; import java.util.ArrayList; -import java.util.Collection; import java.util.Collections; import java.util.List; import java.util.Objects; @@ -114,10 +112,10 @@ private List extractBids(BidResponse bidResponse, List e private List bidsFromResponse(BidResponse bidResponse, List errors) { return bidResponse.getSeatbid().stream() .filter(Objects::nonNull) - .map(SeatBid::getBid) - .filter(Objects::nonNull) - .flatMap(Collection::stream) - .map(bid -> resolvedBidderBid(bid, bidResponse.getCur(), errors)) + .flatMap(seatBid -> CollectionUtils.emptyIfNull(seatBid.getBid()).stream() + .filter(Objects::nonNull) + .map(bid -> BidderBid.of( + seatBid.getSeat(), resolvedBidderBid(bid, bidResponse.getCur(), errors)))) .filter(Objects::nonNull) .toList(); } diff --git a/src/main/java/org/prebid/server/bidder/lockerdome/LockerdomeBidder.java b/src/main/java/org/prebid/server/bidder/lockerdome/LockerdomeBidder.java index 3092ce49482..4a0399e1019 100644 --- a/src/main/java/org/prebid/server/bidder/lockerdome/LockerdomeBidder.java +++ b/src/main/java/org/prebid/server/bidder/lockerdome/LockerdomeBidder.java @@ -4,7 +4,6 @@ import com.iab.openrtb.request.BidRequest; import com.iab.openrtb.request.Imp; import com.iab.openrtb.response.BidResponse; -import com.iab.openrtb.response.SeatBid; import io.vertx.core.MultiMap; import io.vertx.core.http.HttpMethod; import org.apache.commons.collections4.CollectionUtils; @@ -24,7 +23,6 @@ import org.prebid.server.util.HttpUtil; import java.util.ArrayList; -import java.util.Collection; import java.util.Collections; import java.util.List; import java.util.Objects; @@ -117,10 +115,11 @@ private static List extractBids(BidResponse bidResponse) { private static List bidsFromResponse(BidResponse bidResponse) { return bidResponse.getSeatbid().stream() .filter(Objects::nonNull) - .map(SeatBid::getBid) - .filter(Objects::nonNull) - .flatMap(Collection::stream) - .map(bid -> BidderBid.of(bid, BidType.banner, bidResponse.getCur())) + .flatMap(seatBid -> CollectionUtils.emptyIfNull(seatBid.getBid()).stream() + .filter(Objects::nonNull) + .map(bid -> BidderBid.of( + seatBid.getSeat(), BidderBid.of(bid, + BidType.banner, bidResponse.getCur())))) .toList(); } } diff --git a/src/main/java/org/prebid/server/bidder/logan/LoganBidder.java b/src/main/java/org/prebid/server/bidder/logan/LoganBidder.java index 6d1b5a53fd5..e3b89d6720d 100644 --- a/src/main/java/org/prebid/server/bidder/logan/LoganBidder.java +++ b/src/main/java/org/prebid/server/bidder/logan/LoganBidder.java @@ -4,7 +4,6 @@ import com.iab.openrtb.request.BidRequest; import com.iab.openrtb.request.Imp; import com.iab.openrtb.response.BidResponse; -import com.iab.openrtb.response.SeatBid; import org.apache.commons.collections4.CollectionUtils; import org.prebid.server.bidder.Bidder; import org.prebid.server.bidder.logan.request.LoganRequestImpExt; @@ -22,7 +21,6 @@ import org.prebid.server.util.BidderUtil; import org.prebid.server.util.HttpUtil; -import java.util.Collection; import java.util.Collections; import java.util.List; import java.util.Objects; @@ -95,11 +93,12 @@ private static List extractBids(BidRequest bidRequest, BidResponse bi return bidResponse.getSeatbid().stream() .filter(Objects::nonNull) - .map(SeatBid::getBid) - .filter(Objects::nonNull) - .flatMap(Collection::stream) - .filter(Objects::nonNull) - .map(bid -> BidderBid.of(bid, getBidType(bid.getImpid(), bidRequest.getImp()), bidResponse.getCur())) + .flatMap(seatBid -> CollectionUtils.emptyIfNull(seatBid.getBid()).stream() + .filter(Objects::nonNull) + .map(bid -> BidderBid.of( + seatBid.getSeat(), BidderBid.of(bid, + getBidType(bid.getImpid(), bidRequest.getImp()), + bidResponse.getCur())))) .toList(); } diff --git a/src/main/java/org/prebid/server/bidder/logicad/LogicadBidder.java b/src/main/java/org/prebid/server/bidder/logicad/LogicadBidder.java index 2ec529fede8..9ac8b763333 100644 --- a/src/main/java/org/prebid/server/bidder/logicad/LogicadBidder.java +++ b/src/main/java/org/prebid/server/bidder/logicad/LogicadBidder.java @@ -4,7 +4,6 @@ import com.iab.openrtb.request.BidRequest; import com.iab.openrtb.request.Imp; import com.iab.openrtb.response.BidResponse; -import com.iab.openrtb.response.SeatBid; import io.vertx.core.http.HttpMethod; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.StringUtils; @@ -23,7 +22,6 @@ import org.prebid.server.util.HttpUtil; import java.util.ArrayList; -import java.util.Collection; import java.util.Collections; import java.util.HashMap; import java.util.List; @@ -138,9 +136,11 @@ private static List extractBids(BidResponse bidResponse) { private static List bidsFromResponse(BidResponse bidResponse) { return bidResponse.getSeatbid().stream() - .map(SeatBid::getBid) - .flatMap(Collection::stream) - .map(bid -> BidderBid.of(bid, BidType.banner, bidResponse.getCur())) + .flatMap(seatBid -> CollectionUtils.emptyIfNull(seatBid.getBid()).stream() + .filter(Objects::nonNull) + .map(bid -> BidderBid.of( + seatBid.getSeat(), BidderBid.of(bid, + BidType.banner, bidResponse.getCur())))) .toList(); } } diff --git a/src/main/java/org/prebid/server/bidder/loopme/LoopmeBidder.java b/src/main/java/org/prebid/server/bidder/loopme/LoopmeBidder.java index 3774ef5e060..f269fff51f2 100644 --- a/src/main/java/org/prebid/server/bidder/loopme/LoopmeBidder.java +++ b/src/main/java/org/prebid/server/bidder/loopme/LoopmeBidder.java @@ -3,7 +3,6 @@ import com.iab.openrtb.request.BidRequest; import com.iab.openrtb.request.Imp; import com.iab.openrtb.response.BidResponse; -import com.iab.openrtb.response.SeatBid; import io.vertx.core.http.HttpMethod; import org.apache.commons.collections4.CollectionUtils; import org.prebid.server.bidder.Bidder; @@ -19,7 +18,6 @@ import org.prebid.server.util.BidderUtil; import org.prebid.server.util.HttpUtil; -import java.util.Collection; import java.util.Collections; import java.util.List; import java.util.Objects; @@ -69,10 +67,12 @@ private static List extractBids(BidRequest bidRequest, BidResponse bi private static List bidsFromResponse(BidRequest bidRequest, BidResponse bidResponse) { return bidResponse.getSeatbid().stream() .filter(Objects::nonNull) - .map(SeatBid::getBid) - .filter(Objects::nonNull) - .flatMap(Collection::stream) - .map(bid -> BidderBid.of(bid, getBidType(bid.getImpid(), bidRequest.getImp()), bidResponse.getCur())) + .flatMap(seatBid -> CollectionUtils.emptyIfNull(seatBid.getBid()).stream() + .filter(Objects::nonNull) + .map(bid -> BidderBid.of( + seatBid.getSeat(), BidderBid.of(bid, + getBidType(bid.getImpid(), bidRequest.getImp()), + bidResponse.getCur())))) .collect(Collectors.toList()); } diff --git a/src/main/java/org/prebid/server/bidder/loyal/LoyalBidder.java b/src/main/java/org/prebid/server/bidder/loyal/LoyalBidder.java index 3644cc7e009..12f45527405 100644 --- a/src/main/java/org/prebid/server/bidder/loyal/LoyalBidder.java +++ b/src/main/java/org/prebid/server/bidder/loyal/LoyalBidder.java @@ -7,7 +7,6 @@ import com.iab.openrtb.request.Imp; import com.iab.openrtb.response.Bid; import com.iab.openrtb.response.BidResponse; -import com.iab.openrtb.response.SeatBid; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.StringUtils; import org.prebid.server.bidder.Bidder; @@ -27,7 +26,6 @@ import org.prebid.server.util.HttpUtil; import java.util.ArrayList; -import java.util.Collection; import java.util.Collections; import java.util.List; import java.util.Objects; @@ -125,11 +123,11 @@ private List extractBids(BidResponse bidResponse) { return bidResponse.getSeatbid().stream() .filter(Objects::nonNull) - .map(SeatBid::getBid) - .filter(Objects::nonNull) - .flatMap(Collection::stream) - .filter(Objects::nonNull) - .map(bid -> BidderBid.of(bid, getBidType(bid), bidResponse.getCur())) + .flatMap(seatBid -> CollectionUtils.emptyIfNull(seatBid.getBid()).stream() + .filter(Objects::nonNull) + .map(bid -> BidderBid.of( + seatBid.getSeat(), BidderBid.of(bid, + getBidType(bid), bidResponse.getCur())))) .toList(); } diff --git a/src/main/java/org/prebid/server/bidder/lunamedia/LunamediaBidder.java b/src/main/java/org/prebid/server/bidder/lunamedia/LunamediaBidder.java index 845b147bc92..043d32b74f9 100644 --- a/src/main/java/org/prebid/server/bidder/lunamedia/LunamediaBidder.java +++ b/src/main/java/org/prebid/server/bidder/lunamedia/LunamediaBidder.java @@ -9,7 +9,6 @@ import com.iab.openrtb.request.Site; import com.iab.openrtb.request.Video; import com.iab.openrtb.response.BidResponse; -import com.iab.openrtb.response.SeatBid; import io.vertx.core.MultiMap; import io.vertx.core.http.HttpMethod; import org.apache.commons.collections4.CollectionUtils; @@ -30,7 +29,6 @@ import org.prebid.server.util.Uri; import java.util.ArrayList; -import java.util.Collection; import java.util.Collections; import java.util.HashMap; import java.util.List; @@ -215,10 +213,12 @@ private static List extractBids(BidRequest bidRequest, BidResponse bi private static List bidsFromResponse(BidRequest bidRequest, BidResponse bidResponse) { return bidResponse.getSeatbid().stream() .filter(Objects::nonNull) - .map(SeatBid::getBid) - .filter(Objects::nonNull) - .flatMap(Collection::stream) - .map(bid -> BidderBid.of(bid, getBidType(bid.getImpid(), bidRequest.getImp()), bidResponse.getCur())) + .flatMap(seatBid -> CollectionUtils.emptyIfNull(seatBid.getBid()).stream() + .filter(Objects::nonNull) + .map(bid -> BidderBid.of( + seatBid.getSeat(), BidderBid.of(bid, + getBidType(bid.getImpid(), bidRequest.getImp()), + bidResponse.getCur())))) .toList(); } diff --git a/src/main/java/org/prebid/server/bidder/madsense/MadsenseBidder.java b/src/main/java/org/prebid/server/bidder/madsense/MadsenseBidder.java index 862df6dcf09..0d1a3a2d5ad 100644 --- a/src/main/java/org/prebid/server/bidder/madsense/MadsenseBidder.java +++ b/src/main/java/org/prebid/server/bidder/madsense/MadsenseBidder.java @@ -7,7 +7,6 @@ import com.iab.openrtb.request.Site; import com.iab.openrtb.response.Bid; import com.iab.openrtb.response.BidResponse; -import com.iab.openrtb.response.SeatBid; import io.vertx.core.MultiMap; import org.apache.commons.collections4.CollectionUtils; import org.prebid.server.bidder.Bidder; @@ -28,7 +27,6 @@ import org.prebid.server.util.Uri; import java.util.ArrayList; -import java.util.Collection; import java.util.Collections; import java.util.List; import java.util.Objects; @@ -140,11 +138,10 @@ private static List extractBids(BidResponse bidResponse, List bidsFromResponse(BidResponse bidResponse, List errors) { return bidResponse.getSeatbid().stream() .filter(Objects::nonNull) - .map(SeatBid::getBid) - .filter(Objects::nonNull) - .flatMap(Collection::stream) - .filter(Objects::nonNull) - .map(bid -> makeBidderBid(bid, bidResponse.getCur(), errors)) + .flatMap(seatBid -> CollectionUtils.emptyIfNull(seatBid.getBid()).stream() + .filter(Objects::nonNull) + .map(bid -> BidderBid.of( + seatBid.getSeat(), makeBidderBid(bid, bidResponse.getCur(), errors)))) .filter(Objects::nonNull) .toList(); } diff --git a/src/main/java/org/prebid/server/bidder/madvertise/MadvertiseBidder.java b/src/main/java/org/prebid/server/bidder/madvertise/MadvertiseBidder.java index c609366d821..20e5057d72d 100644 --- a/src/main/java/org/prebid/server/bidder/madvertise/MadvertiseBidder.java +++ b/src/main/java/org/prebid/server/bidder/madvertise/MadvertiseBidder.java @@ -5,7 +5,6 @@ import com.iab.openrtb.request.Device; import com.iab.openrtb.request.Imp; import com.iab.openrtb.response.BidResponse; -import com.iab.openrtb.response.SeatBid; import io.vertx.core.MultiMap; import io.vertx.core.http.HttpMethod; import org.apache.commons.collections4.CollectionUtils; @@ -25,7 +24,6 @@ import org.prebid.server.util.HttpUtil; import org.prebid.server.util.Uri; -import java.util.Collection; import java.util.Collections; import java.util.List; import java.util.Objects; @@ -130,11 +128,11 @@ private static List extractBids(BidResponse bidResponse) { return bidResponse.getSeatbid().stream() .filter(Objects::nonNull) - .map(SeatBid::getBid) - .filter(Objects::nonNull) - .flatMap(Collection::stream) - .filter(Objects::nonNull) - .map(bid -> BidderBid.of(bid, getBidMediaType(bid.getAttr()), bidResponse.getCur())) + .flatMap(seatBid -> CollectionUtils.emptyIfNull(seatBid.getBid()).stream() + .filter(Objects::nonNull) + .map(bid -> BidderBid.of( + seatBid.getSeat(), BidderBid.of(bid, + getBidMediaType(bid.getAttr()), bidResponse.getCur())))) .toList(); } diff --git a/src/main/java/org/prebid/server/bidder/marsmedia/MarsmediaBidder.java b/src/main/java/org/prebid/server/bidder/marsmedia/MarsmediaBidder.java index 9fbc0ba872e..69596d304b0 100644 --- a/src/main/java/org/prebid/server/bidder/marsmedia/MarsmediaBidder.java +++ b/src/main/java/org/prebid/server/bidder/marsmedia/MarsmediaBidder.java @@ -151,7 +151,7 @@ private static List bidsFromResponse(List seatbid, List return firstSeatBid != null ? firstSeatBid.getBid().stream() .filter(Objects::nonNull) - .map(bid -> BidderBid.of(bid, getBidType(bid.getImpid(), imps), currency)) + .map(bid -> BidderBid.of(firstSeatBid.getSeat(), bid, getBidType(bid.getImpid(), imps), currency)) .toList() : Collections.emptyList(); } diff --git a/src/main/java/org/prebid/server/bidder/mediago/MediaGoBidder.java b/src/main/java/org/prebid/server/bidder/mediago/MediaGoBidder.java index aad120c9c27..ae56520985d 100644 --- a/src/main/java/org/prebid/server/bidder/mediago/MediaGoBidder.java +++ b/src/main/java/org/prebid/server/bidder/mediago/MediaGoBidder.java @@ -7,7 +7,6 @@ import com.iab.openrtb.request.Imp; import com.iab.openrtb.response.Bid; import com.iab.openrtb.response.BidResponse; -import com.iab.openrtb.response.SeatBid; import io.vertx.core.MultiMap; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.StringUtils; @@ -30,7 +29,6 @@ import org.prebid.server.util.Uri; import java.util.ArrayList; -import java.util.Collection; import java.util.Collections; import java.util.List; import java.util.Map; @@ -168,11 +166,10 @@ private List extractBids(BidRequest bidRequest, BidResponse bidRespon return bidResponse.getSeatbid().stream() .filter(Objects::nonNull) - .map(SeatBid::getBid) - .filter(Objects::nonNull) - .flatMap(Collection::stream) - .filter(Objects::nonNull) - .map(bid -> makeBid(bid, bidRequest, bidResponse.getCur(), errors)) + .flatMap(seatBid -> CollectionUtils.emptyIfNull(seatBid.getBid()).stream() + .filter(Objects::nonNull) + .map(bid -> BidderBid.of( + seatBid.getSeat(), makeBid(bid, bidRequest, bidResponse.getCur(), errors)))) .filter(Objects::nonNull) .toList(); diff --git a/src/main/java/org/prebid/server/bidder/medianet/MedianetBidder.java b/src/main/java/org/prebid/server/bidder/medianet/MedianetBidder.java index adb208364ab..ceab1efe42a 100644 --- a/src/main/java/org/prebid/server/bidder/medianet/MedianetBidder.java +++ b/src/main/java/org/prebid/server/bidder/medianet/MedianetBidder.java @@ -4,7 +4,6 @@ import com.iab.openrtb.request.Imp; import com.iab.openrtb.response.Bid; import com.iab.openrtb.response.BidResponse; -import com.iab.openrtb.response.SeatBid; import org.apache.commons.collections4.CollectionUtils; import org.prebid.server.bidder.Bidder; import org.prebid.server.bidder.model.BidderBid; @@ -20,7 +19,6 @@ import org.prebid.server.util.HttpUtil; import java.util.ArrayList; -import java.util.Collection; import java.util.Collections; import java.util.List; import java.util.Objects; @@ -60,15 +58,14 @@ private static List extractBids(BidRequest bidRequest, if (bidResponse == null || CollectionUtils.isEmpty(bidResponse.getSeatbid())) { return Collections.emptyList(); } - final String currency = bidResponse.getCur(); return bidResponse.getSeatbid().stream() .filter(Objects::nonNull) - .map(SeatBid::getBid) - .filter(Objects::nonNull) - .flatMap(Collection::stream) - .filter(Objects::nonNull) - .map(bid -> makeBidderBid(bid, bidRequest.getImp(), currency, errors)) + .filter(seatBid -> seatBid.getBid() != null) + .flatMap(seatBid -> seatBid.getBid().stream() + .filter(Objects::nonNull) + .map(bid -> makeBidderBid( + bid, bidRequest.getImp(), currency, errors, seatBid.getSeat()))) .filter(Objects::nonNull) .toList(); } @@ -89,7 +86,8 @@ private static BidType resolveBidType(Bid bid, List imps) { }; } - private static BidderBid makeBidderBid(Bid bid, List imps, String cur, List errors) { + private static BidderBid makeBidderBid(Bid bid, List imps, String cur, List errors, + String originalSeat) { final BidType bidType; try { bidType = resolveBidType(bid, imps); @@ -98,7 +96,7 @@ private static BidderBid makeBidderBid(Bid bid, List imps, String cur, List return null; } - return BidderBid.of(bid, bidType, cur); + return BidderBid.of(originalSeat, bid, bidType, cur); } private static BidType resolveBidTypeFromImpId(String impId, List imps) { diff --git a/src/main/java/org/prebid/server/bidder/melozen/MeloZenBidder.java b/src/main/java/org/prebid/server/bidder/melozen/MeloZenBidder.java index 721860abcc2..d84b48d6828 100644 --- a/src/main/java/org/prebid/server/bidder/melozen/MeloZenBidder.java +++ b/src/main/java/org/prebid/server/bidder/melozen/MeloZenBidder.java @@ -10,7 +10,6 @@ import com.iab.openrtb.request.Video; import com.iab.openrtb.response.Bid; import com.iab.openrtb.response.BidResponse; -import com.iab.openrtb.response.SeatBid; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.ObjectUtils; import org.apache.commons.lang3.StringUtils; @@ -35,7 +34,6 @@ import java.math.BigDecimal; import java.util.ArrayList; -import java.util.Collection; import java.util.Collections; import java.util.List; import java.util.Objects; @@ -175,11 +173,10 @@ private List extractBids(BidResponse bidResponse, List e return bidResponse.getSeatbid().stream() .filter(Objects::nonNull) - .map(SeatBid::getBid) - .filter(Objects::nonNull) - .flatMap(Collection::stream) - .filter(Objects::nonNull) - .map(bid -> toBidderBid(bid, bidResponse.getCur(), errors)) + .flatMap(seatBid -> CollectionUtils.emptyIfNull(seatBid.getBid()).stream() + .filter(Objects::nonNull) + .map(bid -> BidderBid.of( + seatBid.getSeat(), toBidderBid(bid, bidResponse.getCur(), errors)))) .filter(Objects::nonNull) .toList(); } diff --git a/src/main/java/org/prebid/server/bidder/metax/MetaxBidder.java b/src/main/java/org/prebid/server/bidder/metax/MetaxBidder.java index ae67fb2b20b..a85553daf9b 100644 --- a/src/main/java/org/prebid/server/bidder/metax/MetaxBidder.java +++ b/src/main/java/org/prebid/server/bidder/metax/MetaxBidder.java @@ -7,7 +7,6 @@ import com.iab.openrtb.request.Imp; import com.iab.openrtb.response.Bid; import com.iab.openrtb.response.BidResponse; -import com.iab.openrtb.response.SeatBid; import org.apache.commons.collections4.CollectionUtils; import org.prebid.server.bidder.Bidder; import org.prebid.server.bidder.model.BidderBid; @@ -26,7 +25,6 @@ import org.prebid.server.util.Uri; import java.util.ArrayList; -import java.util.Collection; import java.util.Collections; import java.util.List; import java.util.Objects; @@ -134,15 +132,15 @@ private static List extractBids(BidResponse bidResponse) { return bidResponse.getSeatbid().stream() .filter(Objects::nonNull) - .map(SeatBid::getBid).filter(Objects::nonNull) - .flatMap(Collection::stream) - .filter(Objects::nonNull) - .map(bid -> BidderBid.builder() + .flatMap(seatBid -> CollectionUtils.emptyIfNull(seatBid.getBid()).stream() + .filter(Objects::nonNull) + .map(bid -> BidderBid.of( + seatBid.getSeat(), BidderBid.builder() .bid(bid) .type(getBidType(bid)) .bidCurrency(bidResponse.getCur()) .videoInfo(videoInfo(bid)) - .build()) + .build()))) .toList(); } diff --git a/src/main/java/org/prebid/server/bidder/mgid/MgidBidder.java b/src/main/java/org/prebid/server/bidder/mgid/MgidBidder.java index 9da34c5e895..840bbfb979e 100644 --- a/src/main/java/org/prebid/server/bidder/mgid/MgidBidder.java +++ b/src/main/java/org/prebid/server/bidder/mgid/MgidBidder.java @@ -5,7 +5,6 @@ import com.iab.openrtb.request.Imp.ImpBuilder; import com.iab.openrtb.response.Bid; import com.iab.openrtb.response.BidResponse; -import com.iab.openrtb.response.SeatBid; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.ObjectUtils; import org.apache.commons.lang3.StringUtils; @@ -26,7 +25,6 @@ import java.math.BigDecimal; import java.util.ArrayList; -import java.util.Collection; import java.util.Collections; import java.util.List; import java.util.Objects; @@ -149,10 +147,11 @@ private List extractBids(BidResponse bidResponse) { private List bidsFromResponse(BidResponse bidResponse) { return bidResponse.getSeatbid().stream() .filter(Objects::nonNull) - .map(SeatBid::getBid) - .filter(Objects::nonNull) - .flatMap(Collection::stream) - .map(bid -> BidderBid.of(bid, getBidType(bid), bidResponse.getCur())) + .flatMap(seatBid -> CollectionUtils.emptyIfNull(seatBid.getBid()).stream() + .filter(Objects::nonNull) + .map(bid -> BidderBid.of( + seatBid.getSeat(), BidderBid.of(bid, + getBidType(bid), bidResponse.getCur())))) .toList(); } diff --git a/src/main/java/org/prebid/server/bidder/mgidx/MgidxBidder.java b/src/main/java/org/prebid/server/bidder/mgidx/MgidxBidder.java index c5b6663315a..8e41f73034b 100644 --- a/src/main/java/org/prebid/server/bidder/mgidx/MgidxBidder.java +++ b/src/main/java/org/prebid/server/bidder/mgidx/MgidxBidder.java @@ -7,7 +7,6 @@ import com.iab.openrtb.request.Imp; import com.iab.openrtb.response.Bid; import com.iab.openrtb.response.BidResponse; -import com.iab.openrtb.response.SeatBid; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.StringUtils; import org.prebid.server.bidder.Bidder; @@ -27,7 +26,6 @@ import org.prebid.server.util.HttpUtil; import java.util.ArrayList; -import java.util.Collection; import java.util.Collections; import java.util.List; import java.util.Objects; @@ -122,11 +120,11 @@ private List extractBids(BidResponse bidResponse) { return bidResponse.getSeatbid().stream() .filter(Objects::nonNull) - .map(SeatBid::getBid) - .filter(Objects::nonNull) - .flatMap(Collection::stream) - .filter(Objects::nonNull) - .map(bid -> BidderBid.of(bid, getBidType(bid), bidResponse.getCur())) + .flatMap(seatBid -> CollectionUtils.emptyIfNull(seatBid.getBid()).stream() + .filter(Objects::nonNull) + .map(bid -> BidderBid.of( + seatBid.getSeat(), BidderBid.of(bid, + getBidType(bid), bidResponse.getCur())))) .toList(); } diff --git a/src/main/java/org/prebid/server/bidder/minutemedia/MinuteMediaBidder.java b/src/main/java/org/prebid/server/bidder/minutemedia/MinuteMediaBidder.java index 7672b2d35f9..f2aca8236c9 100644 --- a/src/main/java/org/prebid/server/bidder/minutemedia/MinuteMediaBidder.java +++ b/src/main/java/org/prebid/server/bidder/minutemedia/MinuteMediaBidder.java @@ -5,7 +5,6 @@ import com.iab.openrtb.request.Imp; import com.iab.openrtb.response.Bid; import com.iab.openrtb.response.BidResponse; -import com.iab.openrtb.response.SeatBid; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.StringUtils; import org.prebid.server.bidder.Bidder; @@ -24,7 +23,6 @@ import org.prebid.server.util.Uri; import java.util.ArrayList; -import java.util.Collection; import java.util.Collections; import java.util.List; import java.util.Objects; @@ -104,10 +102,10 @@ private static List extractBids(BidResponse bidResponse, List bidsFromResponse(BidResponse bidResponse, List errors) { return bidResponse.getSeatbid().stream() .filter(Objects::nonNull) - .map(SeatBid::getBid) - .filter(Objects::nonNull) - .flatMap(Collection::stream) - .map(bid -> makeBidderBid(bid, bidResponse.getCur(), errors)) + .flatMap(seatBid -> CollectionUtils.emptyIfNull(seatBid.getBid()).stream() + .filter(Objects::nonNull) + .map(bid -> BidderBid.of( + seatBid.getSeat(), makeBidderBid(bid, bidResponse.getCur(), errors)))) .filter(Objects::nonNull) .toList(); } diff --git a/src/main/java/org/prebid/server/bidder/mobfoxpb/MobfoxpbBidder.java b/src/main/java/org/prebid/server/bidder/mobfoxpb/MobfoxpbBidder.java index 915e8e58662..d0ed7cc94e6 100644 --- a/src/main/java/org/prebid/server/bidder/mobfoxpb/MobfoxpbBidder.java +++ b/src/main/java/org/prebid/server/bidder/mobfoxpb/MobfoxpbBidder.java @@ -5,7 +5,6 @@ import com.iab.openrtb.request.Imp; import com.iab.openrtb.response.Bid; import com.iab.openrtb.response.BidResponse; -import com.iab.openrtb.response.SeatBid; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.StringUtils; import org.prebid.server.bidder.Bidder; @@ -24,7 +23,6 @@ import org.prebid.server.util.Uri; import java.util.ArrayList; -import java.util.Collection; import java.util.Collections; import java.util.List; import java.util.Objects; @@ -112,10 +110,10 @@ private static Result> extractBids(BidResponse bidResponse, List final List bidderBids = bidResponse.getSeatbid().stream() .filter(Objects::nonNull) - .map(SeatBid::getBid) - .filter(Objects::nonNull) - .flatMap(Collection::stream) - .map(bid -> bidFromResponse(imps, bid, bidResponse.getCur(), errors)) + .flatMap(seatBid -> CollectionUtils.emptyIfNull(seatBid.getBid()).stream() + .filter(Objects::nonNull) + .map(bid -> BidderBid.of( + seatBid.getSeat(), bidFromResponse(imps, bid, bidResponse.getCur(), errors)))) .filter(Objects::nonNull) .toList(); diff --git a/src/main/java/org/prebid/server/bidder/mobilefuse/MobilefuseBidder.java b/src/main/java/org/prebid/server/bidder/mobilefuse/MobilefuseBidder.java index 40e5cf72074..9c34a163277 100644 --- a/src/main/java/org/prebid/server/bidder/mobilefuse/MobilefuseBidder.java +++ b/src/main/java/org/prebid/server/bidder/mobilefuse/MobilefuseBidder.java @@ -6,7 +6,6 @@ import com.iab.openrtb.request.Imp; import com.iab.openrtb.response.Bid; import com.iab.openrtb.response.BidResponse; -import com.iab.openrtb.response.SeatBid; import org.apache.commons.collections4.CollectionUtils; import org.prebid.server.bidder.Bidder; import org.prebid.server.bidder.model.BidderBid; @@ -24,7 +23,6 @@ import org.prebid.server.util.HttpUtil; import java.util.ArrayList; -import java.util.Collection; import java.util.Collections; import java.util.List; import java.util.Objects; @@ -122,10 +120,10 @@ private List extractBids(BidResponse bidResponse) { private List bidsFromResponse(BidResponse bidResponse) { return bidResponse.getSeatbid().stream() .filter(Objects::nonNull) - .map(SeatBid::getBid) - .filter(Objects::nonNull) - .flatMap(Collection::stream) - .map(bid -> BidderBid.of(bid.toBuilder().ext(null).build(), getBidType(bid), bidResponse.getCur())) + .flatMap(seatBid -> CollectionUtils.emptyIfNull(seatBid.getBid()).stream() + .filter(Objects::nonNull) + .map(bid -> BidderBid.of(seatBid.getSeat(), + bid.toBuilder().ext(null).build(), getBidType(bid), bidResponse.getCur()))) .toList(); } diff --git a/src/main/java/org/prebid/server/bidder/mobkoi/MobkoiBidder.java b/src/main/java/org/prebid/server/bidder/mobkoi/MobkoiBidder.java index a7342a2c82e..ff4a45dc8f8 100644 --- a/src/main/java/org/prebid/server/bidder/mobkoi/MobkoiBidder.java +++ b/src/main/java/org/prebid/server/bidder/mobkoi/MobkoiBidder.java @@ -5,7 +5,6 @@ import com.iab.openrtb.request.Imp; import com.iab.openrtb.request.User; import com.iab.openrtb.response.BidResponse; -import com.iab.openrtb.response.SeatBid; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.StringUtils; import org.prebid.server.bidder.Bidder; @@ -25,7 +24,6 @@ import org.prebid.server.util.HttpUtil; import java.util.ArrayList; -import java.util.Collection; import java.util.Collections; import java.util.List; import java.util.Objects; @@ -128,10 +126,10 @@ private static List bidsFromResponse(BidResponse bidResponse) { return bidResponse.getSeatbid() .stream() .filter(Objects::nonNull) - .map(SeatBid::getBid) - .filter(Objects::nonNull) - .flatMap(Collection::stream) - .map(bid -> BidderBid.of(bid, BidType.banner, bidResponse.getCur())) + .flatMap(seatBid -> CollectionUtils.emptyIfNull(seatBid.getBid()).stream() + .filter(Objects::nonNull) + .map(bid -> BidderBid.of( + seatBid.getSeat(), bid, BidType.banner, bidResponse.getCur()))) .toList(); } } diff --git a/src/main/java/org/prebid/server/bidder/model/BidderBid.java b/src/main/java/org/prebid/server/bidder/model/BidderBid.java index 559d072cdd4..bfaaf0956db 100644 --- a/src/main/java/org/prebid/server/bidder/model/BidderBid.java +++ b/src/main/java/org/prebid/server/bidder/model/BidderBid.java @@ -7,6 +7,8 @@ import org.prebid.server.proto.openrtb.ext.response.BidType; import org.prebid.server.proto.openrtb.ext.response.ExtBidPrebidVideo; +import java.util.Objects; + /** * Bid returned by a {@link Bidder}. */ @@ -21,6 +23,11 @@ public class BidderBid { String seat; + /** + * Original seat from the bidder's OpenRTB response, when it can be associated with this bid. + */ + String originalSeat; + /** * Will become response.seatbid[i].bid.ext.prebid.type in the final OpenRTB response. */ @@ -47,20 +54,36 @@ public class BidderBid { */ PriceFloorInfo priceFloorInfo; + public static BidderBid of(String originalSeat, BidderBid bidderBid) { + return bidderBid == null || Objects.equals(originalSeat, bidderBid.getOriginalSeat()) + ? bidderBid + : bidderBid.toBuilder().originalSeat(originalSeat).build(); + } + public static BidderBid of(Bid bid, BidType bidType, String bidCurrency) { + return of(null, bid, bidType, bidCurrency); + } + + public static BidderBid of(String originalSeat, Bid bid, BidType bidType, String bidCurrency) { return BidderBid.builder() .bid(bid) + .originalSeat(originalSeat) .type(bidType) .bidCurrency(bidCurrency) .build(); } public static BidderBid of(Bid bid, BidType bidType, String seat, String bidCurrency) { + return of(null, bid, bidType, seat, bidCurrency); + } + + public static BidderBid of(String originalSeat, Bid bid, BidType bidType, String seat, String bidCurrency) { return BidderBid.builder() .bid(bid) .type(bidType) .bidCurrency(bidCurrency) .seat(seat) + .originalSeat(originalSeat) .build(); } } diff --git a/src/main/java/org/prebid/server/bidder/motorik/MotorikBidder.java b/src/main/java/org/prebid/server/bidder/motorik/MotorikBidder.java index 29ef6cfc2fa..309262c8217 100644 --- a/src/main/java/org/prebid/server/bidder/motorik/MotorikBidder.java +++ b/src/main/java/org/prebid/server/bidder/motorik/MotorikBidder.java @@ -5,7 +5,6 @@ import com.iab.openrtb.request.Device; import com.iab.openrtb.request.Imp; import com.iab.openrtb.response.BidResponse; -import com.iab.openrtb.response.SeatBid; import io.vertx.core.MultiMap; import io.vertx.core.http.HttpMethod; import org.apache.commons.collections4.CollectionUtils; @@ -26,7 +25,6 @@ import org.prebid.server.util.Uri; import java.util.ArrayList; -import java.util.Collection; import java.util.Collections; import java.util.List; import java.util.Objects; @@ -129,11 +127,10 @@ private static List extractBids(BidRequest bidRequest, BidResponse bi return bidResponse.getSeatbid().stream() .filter(Objects::nonNull) - .map(SeatBid::getBid) - .filter(Objects::nonNull) - .flatMap(Collection::stream) - .filter(Objects::nonNull) - .map(bid -> BidderBid.of(bid, getBidType(bid.getImpid(), bidRequest.getImp()), bidResponse.getCur())) + .flatMap(seatBid -> CollectionUtils.emptyIfNull(seatBid.getBid()).stream() + .filter(Objects::nonNull) + .map(bid -> BidderBid.of(seatBid.getSeat(), + bid, getBidType(bid.getImpid(), bidRequest.getImp()), bidResponse.getCur()))) .toList(); } diff --git a/src/main/java/org/prebid/server/bidder/nativery/NativeryBidder.java b/src/main/java/org/prebid/server/bidder/nativery/NativeryBidder.java index f221539754f..3b07c6c5c79 100644 --- a/src/main/java/org/prebid/server/bidder/nativery/NativeryBidder.java +++ b/src/main/java/org/prebid/server/bidder/nativery/NativeryBidder.java @@ -7,7 +7,6 @@ import com.iab.openrtb.request.Imp; import com.iab.openrtb.response.Bid; import com.iab.openrtb.response.BidResponse; -import com.iab.openrtb.response.SeatBid; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.collections4.ListUtils; import org.apache.commons.lang3.StringUtils; @@ -36,7 +35,6 @@ import org.prebid.server.util.HttpUtil; import java.util.ArrayList; -import java.util.Collection; import java.util.Collections; import java.util.List; import java.util.Objects; @@ -161,11 +159,10 @@ private List extractBids(BidResponse bidResponse, List e return bidResponse.getSeatbid().stream() .filter(Objects::nonNull) - .map(SeatBid::getBid) - .filter(Objects::nonNull) - .flatMap(Collection::stream) - .filter(Objects::nonNull) - .map(bid -> resolveBidderBid(bid, currency, errors)) + .flatMap(seatBid -> CollectionUtils.emptyIfNull(seatBid.getBid()).stream() + .filter(Objects::nonNull) + .map(bid -> BidderBid.of(seatBid.getSeat(), + resolveBidderBid(bid, currency, errors)))) .filter(Objects::nonNull) .toList(); } diff --git a/src/main/java/org/prebid/server/bidder/nativo/NativoBidder.java b/src/main/java/org/prebid/server/bidder/nativo/NativoBidder.java index 394279fff83..32d9ec37806 100644 --- a/src/main/java/org/prebid/server/bidder/nativo/NativoBidder.java +++ b/src/main/java/org/prebid/server/bidder/nativo/NativoBidder.java @@ -6,7 +6,6 @@ import com.iab.openrtb.request.Imp; import com.iab.openrtb.response.Bid; import com.iab.openrtb.response.BidResponse; -import com.iab.openrtb.response.SeatBid; import org.apache.commons.collections4.CollectionUtils; import org.prebid.server.bidder.Bidder; import org.prebid.server.bidder.model.BidderBid; @@ -28,7 +27,6 @@ import org.prebid.server.util.HttpUtil; import java.util.ArrayList; -import java.util.Collection; import java.util.Collections; import java.util.List; import java.util.Map; @@ -83,12 +81,13 @@ private List bidsFromResponse(BidRequest bidRequest, BidResponse bidR return bidResponse.getSeatbid().stream() .filter(Objects::nonNull) - .map(SeatBid::getBid) + .filter(seatBid -> seatBid.getBid() != null) + .flatMap(seatBid -> seatBid.getBid().stream() + .filter(Objects::nonNull) + .map(bid -> BidderBid.of(seatBid.getSeat(), + updateBid(bid, rendererVersion, errors), + BidderUtil.getBidType(bid, impMap), bidResponse.getCur()))) .filter(Objects::nonNull) - .flatMap(Collection::stream) - .filter(Objects::nonNull) - .map(bid -> updateBid(bid, rendererVersion, errors)) - .map(bid -> BidderBid.of(bid, BidderUtil.getBidType(bid, impMap), bidResponse.getCur())) .toList(); } diff --git a/src/main/java/org/prebid/server/bidder/nextmillennium/NextMillenniumBidder.java b/src/main/java/org/prebid/server/bidder/nextmillennium/NextMillenniumBidder.java index 57f5200f786..cecd90c4cb1 100644 --- a/src/main/java/org/prebid/server/bidder/nextmillennium/NextMillenniumBidder.java +++ b/src/main/java/org/prebid/server/bidder/nextmillennium/NextMillenniumBidder.java @@ -10,7 +10,6 @@ import com.iab.openrtb.request.Site; import com.iab.openrtb.response.Bid; import com.iab.openrtb.response.BidResponse; -import com.iab.openrtb.response.SeatBid; import io.vertx.core.MultiMap; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.ObjectUtils; @@ -39,7 +38,6 @@ import org.prebid.server.version.PrebidVersionProvider; import java.util.ArrayList; -import java.util.Collection; import java.util.List; import java.util.Objects; import java.util.Optional; @@ -213,10 +211,10 @@ public final Result> makeBids(BidderCall httpCall, B private static List bidsFromResponse(BidResponse bidResponse, List bidderErrors) { return bidResponse.getSeatbid().stream() .filter(Objects::nonNull) - .map(SeatBid::getBid) - .filter(Objects::nonNull) - .flatMap(Collection::stream) - .map(bid -> resolveBidderBid(bidResponse, bidderErrors, bid)) + .flatMap(seatBid -> CollectionUtils.emptyIfNull(seatBid.getBid()).stream() + .filter(Objects::nonNull) + .map(bid -> BidderBid.of(seatBid.getSeat(), + resolveBidderBid(bidResponse, bidderErrors, bid)))) .filter(Objects::nonNull) .toList(); } diff --git a/src/main/java/org/prebid/server/bidder/nexx360/Nexx360Bidder.java b/src/main/java/org/prebid/server/bidder/nexx360/Nexx360Bidder.java index 9741c87c2e3..1c3975510f9 100644 --- a/src/main/java/org/prebid/server/bidder/nexx360/Nexx360Bidder.java +++ b/src/main/java/org/prebid/server/bidder/nexx360/Nexx360Bidder.java @@ -6,7 +6,6 @@ import com.iab.openrtb.request.Imp; import com.iab.openrtb.response.Bid; import com.iab.openrtb.response.BidResponse; -import com.iab.openrtb.response.SeatBid; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.StringUtils; import org.prebid.server.bidder.Bidder; @@ -27,7 +26,6 @@ import org.prebid.server.version.PrebidVersionProvider; import java.util.ArrayList; -import java.util.Collection; import java.util.Collections; import java.util.List; import java.util.Objects; @@ -125,11 +123,10 @@ private List extractBids(BidResponse bidResponse, List e private List bidsFromResponse(BidResponse bidResponse, List errors) { return bidResponse.getSeatbid().stream() .filter(Objects::nonNull) - .map(SeatBid::getBid) - .filter(Objects::nonNull) - .flatMap(Collection::stream) - .filter(Objects::nonNull) - .map(bid -> makeBid(bid, bidResponse.getCur(), errors)) + .flatMap(seatBid -> CollectionUtils.emptyIfNull(seatBid.getBid()).stream() + .filter(Objects::nonNull) + .map(bid -> BidderBid.of(seatBid.getSeat(), + makeBid(bid, bidResponse.getCur(), errors)))) .filter(Objects::nonNull) .collect(Collectors.toList()); } diff --git a/src/main/java/org/prebid/server/bidder/nobid/NobidBidder.java b/src/main/java/org/prebid/server/bidder/nobid/NobidBidder.java index 54ff88cdc07..7d555fae411 100644 --- a/src/main/java/org/prebid/server/bidder/nobid/NobidBidder.java +++ b/src/main/java/org/prebid/server/bidder/nobid/NobidBidder.java @@ -4,7 +4,6 @@ import com.iab.openrtb.request.Imp; import com.iab.openrtb.response.Bid; import com.iab.openrtb.response.BidResponse; -import com.iab.openrtb.response.SeatBid; import org.apache.commons.collections4.CollectionUtils; import org.prebid.server.bidder.Bidder; import org.prebid.server.bidder.model.BidderBid; @@ -20,7 +19,6 @@ import org.prebid.server.util.HttpUtil; import java.util.ArrayList; -import java.util.Collection; import java.util.Collections; import java.util.List; import java.util.Objects; @@ -61,9 +59,11 @@ private List extractBids(BidRequest bidRequest, BidResponse bidRespon private List bidsFromResponse(BidRequest bidRequest, BidResponse bidResponse, List errors) { return bidResponse.getSeatbid().stream() - .map(SeatBid::getBid) - .flatMap(Collection::stream) - .map(bid -> toBidderBid(bid, bidRequest.getImp(), bidResponse.getCur(), errors)) + .filter(Objects::nonNull) + .flatMap(seatBid -> CollectionUtils.emptyIfNull(seatBid.getBid()).stream() + .filter(Objects::nonNull) + .map(bid -> BidderBid.of(seatBid.getSeat(), + toBidderBid(bid, bidRequest.getImp(), bidResponse.getCur(), errors)))) .filter(Objects::nonNull) .toList(); } diff --git a/src/main/java/org/prebid/server/bidder/ogury/OguryBidder.java b/src/main/java/org/prebid/server/bidder/ogury/OguryBidder.java index 4d14198e230..72648299ca2 100644 --- a/src/main/java/org/prebid/server/bidder/ogury/OguryBidder.java +++ b/src/main/java/org/prebid/server/bidder/ogury/OguryBidder.java @@ -9,7 +9,6 @@ import com.iab.openrtb.request.Site; import com.iab.openrtb.response.Bid; import com.iab.openrtb.response.BidResponse; -import com.iab.openrtb.response.SeatBid; import io.vertx.core.MultiMap; import org.apache.commons.collections4.CollectionUtils; import org.prebid.server.bidder.Bidder; @@ -194,18 +193,17 @@ private List extractBids(BidResponse bidResponse, List e .stream() .flatMap(Collection::stream) .filter(Objects::nonNull) - .map(SeatBid::getBid) - .filter(Objects::nonNull) - .flatMap(Collection::stream) - .filter(Objects::nonNull) - .map(bid -> createBidderBid(bid, bidResponse, errors)) + .filter(seatBid -> seatBid.getBid() != null) + .flatMap(seatBid -> seatBid.getBid().stream() + .filter(Objects::nonNull) + .map(bid -> createBidderBid(bid, bidResponse.getCur(), errors, seatBid.getSeat()))) .filter(Objects::nonNull) .toList(); } - private BidderBid createBidderBid(Bid bid, BidResponse bidResponse, List errors) { + private BidderBid createBidderBid(Bid bid, String currency, List errors, String originalSeat) { try { - return BidderBid.of(bid, getBidType(bid), bidResponse.getCur()); + return BidderBid.of(originalSeat, bid, getBidType(bid), currency); } catch (PreBidException e) { errors.add(BidderError.badServerResponse(e.getMessage())); return null; diff --git a/src/main/java/org/prebid/server/bidder/oms/OmsBidder.java b/src/main/java/org/prebid/server/bidder/oms/OmsBidder.java index 46b47fee40a..364494fd8bd 100644 --- a/src/main/java/org/prebid/server/bidder/oms/OmsBidder.java +++ b/src/main/java/org/prebid/server/bidder/oms/OmsBidder.java @@ -5,7 +5,6 @@ import com.iab.openrtb.request.Imp; import com.iab.openrtb.response.Bid; import com.iab.openrtb.response.BidResponse; -import com.iab.openrtb.response.SeatBid; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.ObjectUtils; import org.apache.commons.lang3.StringUtils; @@ -25,7 +24,6 @@ import org.prebid.server.util.BidderUtil; import org.prebid.server.util.Uri; -import java.util.Collection; import java.util.Collections; import java.util.List; import java.util.Objects; @@ -91,10 +89,10 @@ private static List extractBids(BidResponse bidResponse) { private static List bidsFromResponse(BidResponse bidResponse) { return bidResponse.getSeatbid().stream() .filter(Objects::nonNull) - .map(SeatBid::getBid) - .filter(Objects::nonNull) - .flatMap(Collection::stream) - .map(bid -> createBidderBid(bid, bidResponse.getCur())) + .flatMap(seatBid -> CollectionUtils.emptyIfNull(seatBid.getBid()).stream() + .filter(Objects::nonNull) + .map(bid -> BidderBid.of(seatBid.getSeat(), + createBidderBid(bid, bidResponse.getCur())))) .toList(); } diff --git a/src/main/java/org/prebid/server/bidder/onetag/OnetagBidder.java b/src/main/java/org/prebid/server/bidder/onetag/OnetagBidder.java index 467cd7c416a..f352d8c738a 100644 --- a/src/main/java/org/prebid/server/bidder/onetag/OnetagBidder.java +++ b/src/main/java/org/prebid/server/bidder/onetag/OnetagBidder.java @@ -4,7 +4,6 @@ import com.iab.openrtb.request.BidRequest; import com.iab.openrtb.request.Imp; import com.iab.openrtb.response.BidResponse; -import com.iab.openrtb.response.SeatBid; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.StringUtils; import org.prebid.server.bidder.Bidder; @@ -22,7 +21,6 @@ import org.prebid.server.util.BidderUtil; import org.prebid.server.util.Uri; -import java.util.Collection; import java.util.Collections; import java.util.List; import java.util.Objects; @@ -98,10 +96,11 @@ private static List extractBids(BidRequest bidRequest, BidResponse bi private static List bidsFromResponse(BidRequest bidRequest, BidResponse bidResponse) { return bidResponse.getSeatbid().stream() .filter(Objects::nonNull) - .map(SeatBid::getBid) - .filter(Objects::nonNull) - .flatMap(Collection::stream) - .map(bid -> BidderBid.of(bid, getBidType(bid.getImpid(), bidRequest.getImp()), bidResponse.getCur())) + .filter(seatBid -> seatBid.getBid() != null) + .flatMap(seatBid -> seatBid.getBid().stream() + .filter(Objects::nonNull) + .map(bid -> BidderBid.of(seatBid.getSeat(), + bid, getBidType(bid.getImpid(), bidRequest.getImp()), bidResponse.getCur()))) .toList(); } diff --git a/src/main/java/org/prebid/server/bidder/openweb/OpenWebBidder.java b/src/main/java/org/prebid/server/bidder/openweb/OpenWebBidder.java index 12cb1684d35..0c83dadf129 100644 --- a/src/main/java/org/prebid/server/bidder/openweb/OpenWebBidder.java +++ b/src/main/java/org/prebid/server/bidder/openweb/OpenWebBidder.java @@ -5,7 +5,6 @@ import com.iab.openrtb.request.Imp; import com.iab.openrtb.response.Bid; import com.iab.openrtb.response.BidResponse; -import com.iab.openrtb.response.SeatBid; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.StringUtils; import org.prebid.server.bidder.Bidder; @@ -24,7 +23,6 @@ import org.prebid.server.util.Uri; import java.util.ArrayList; -import java.util.Collection; import java.util.Collections; import java.util.List; import java.util.Objects; @@ -116,11 +114,10 @@ private List extractBids(BidResponse bidResponse, List e return bidResponse.getSeatbid().stream() .filter(Objects::nonNull) - .map(SeatBid::getBid) - .filter(Objects::nonNull) - .flatMap(Collection::stream) - .filter(Objects::nonNull) - .map(bid -> toBidderBid(bid, bidResponse.getCur(), errors)) + .flatMap(seatBid -> CollectionUtils.emptyIfNull(seatBid.getBid()).stream() + .filter(Objects::nonNull) + .map(bid -> BidderBid.of(seatBid.getSeat(), + toBidderBid(bid, bidResponse.getCur(), errors)))) .filter(Objects::nonNull) .toList(); } diff --git a/src/main/java/org/prebid/server/bidder/openx/OpenxBidder.java b/src/main/java/org/prebid/server/bidder/openx/OpenxBidder.java index ab856f280d3..66dd7427134 100644 --- a/src/main/java/org/prebid/server/bidder/openx/OpenxBidder.java +++ b/src/main/java/org/prebid/server/bidder/openx/OpenxBidder.java @@ -6,7 +6,6 @@ import com.iab.openrtb.request.Imp; import com.iab.openrtb.response.Bid; import com.iab.openrtb.response.BidResponse; -import com.iab.openrtb.response.SeatBid; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.collections4.MapUtils; import org.apache.commons.lang3.StringUtils; @@ -35,7 +34,6 @@ import java.math.BigDecimal; import java.util.ArrayList; -import java.util.Collection; import java.util.Collections; import java.util.List; import java.util.Map; @@ -185,11 +183,10 @@ private List extractBids(BidRequest bidRequest, BidResponse bidRespon return bidResponse.getSeatbid().stream() .filter(Objects::nonNull) - .map(SeatBid::getBid) - .filter(Objects::nonNull) - .flatMap(Collection::stream) - .filter(Objects::nonNull) - .map(bid -> toBidderBid(bid, impIdToBidType, bidCurrency)) + .filter(seatBid -> CollectionUtils.isNotEmpty(seatBid.getBid())) + .flatMap(seatBid -> seatBid.getBid().stream() + .filter(Objects::nonNull) + .map(bid -> toBidderBid(bid, impIdToBidType, bidCurrency, seatBid.getSeat()))) .toList(); } @@ -211,13 +208,16 @@ private static BidType resolveBidType(Imp imp) { return BidType.banner; } - private BidderBid toBidderBid(Bid bid, Map impIdToBidType, String bidCurrency) { + private BidderBid toBidderBid( + Bid bid, Map impIdToBidType, String bidCurrency, String originalSeat) { + final BidType bidType = getBidType(bid, impIdToBidType); final ExtBidPrebidVideo videoInfo = bidType == BidType.video ? getVideoInfo(bid) : null; return BidderBid.builder() .bid(bid.toBuilder().ext(getBidExt(bid)).build()) .type(bidType) + .originalSeat(originalSeat) .bidCurrency(bidCurrency) .videoInfo(videoInfo) .build(); diff --git a/src/main/java/org/prebid/server/bidder/operaads/OperaadsBidder.java b/src/main/java/org/prebid/server/bidder/operaads/OperaadsBidder.java index 76764281af1..b21202f4d6e 100644 --- a/src/main/java/org/prebid/server/bidder/operaads/OperaadsBidder.java +++ b/src/main/java/org/prebid/server/bidder/operaads/OperaadsBidder.java @@ -12,7 +12,6 @@ import com.iab.openrtb.request.Native; import com.iab.openrtb.response.Bid; import com.iab.openrtb.response.BidResponse; -import com.iab.openrtb.response.SeatBid; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.StringUtils; import org.prebid.server.bidder.Bidder; @@ -33,7 +32,6 @@ import java.util.ArrayList; import java.util.Arrays; -import java.util.Collection; import java.util.Collections; import java.util.List; import java.util.Objects; @@ -201,11 +199,11 @@ private List extractBids(BidResponse bidResponse) { return bidResponse.getSeatbid().stream() .filter(Objects::nonNull) - .map(SeatBid::getBid) - .filter(Objects::nonNull) - .flatMap(Collection::stream) - .filter(OperaadsBidder::isValidBid) - .map(this::createBidderBid) + .flatMap(seatBid -> CollectionUtils.emptyIfNull(seatBid.getBid()).stream() + .filter(Objects::nonNull) + .filter(OperaadsBidder::isValidBid) + .map(bid -> BidderBid.of(seatBid.getSeat(), + createBidderBid(bid)))) .toList(); } diff --git a/src/main/java/org/prebid/server/bidder/optidigital/OptidigitalBidder.java b/src/main/java/org/prebid/server/bidder/optidigital/OptidigitalBidder.java index ec2bc265336..55273ce2436 100644 --- a/src/main/java/org/prebid/server/bidder/optidigital/OptidigitalBidder.java +++ b/src/main/java/org/prebid/server/bidder/optidigital/OptidigitalBidder.java @@ -2,7 +2,6 @@ import com.iab.openrtb.request.BidRequest; import com.iab.openrtb.response.BidResponse; -import com.iab.openrtb.response.SeatBid; import org.apache.commons.collections4.CollectionUtils; import org.prebid.server.bidder.Bidder; import org.prebid.server.bidder.model.BidderBid; @@ -16,7 +15,6 @@ import org.prebid.server.util.BidderUtil; import org.prebid.server.util.HttpUtil; -import java.util.Collection; import java.util.Collections; import java.util.List; import java.util.Objects; @@ -56,10 +54,9 @@ private static List extractBids(BidResponse bidResponse) { private static List bidsFromResponse(BidResponse bidResponse) { return bidResponse.getSeatbid().stream() .filter(Objects::nonNull) - .map(SeatBid::getBid) - .filter(Objects::nonNull) - .flatMap(Collection::stream) - .map(bid -> BidderBid.of(bid, BidType.banner, bidResponse.getCur())) + .flatMap(seatBid -> CollectionUtils.emptyIfNull(seatBid.getBid()).stream() + .filter(Objects::nonNull) + .map(bid -> BidderBid.of(seatBid.getSeat(), bid, BidType.banner, bidResponse.getCur()))) .toList(); } } diff --git a/src/main/java/org/prebid/server/bidder/oraki/OrakiBidder.java b/src/main/java/org/prebid/server/bidder/oraki/OrakiBidder.java index 26bfecbe1a1..ed63e148b64 100644 --- a/src/main/java/org/prebid/server/bidder/oraki/OrakiBidder.java +++ b/src/main/java/org/prebid/server/bidder/oraki/OrakiBidder.java @@ -6,7 +6,6 @@ import com.iab.openrtb.request.Imp; import com.iab.openrtb.response.Bid; import com.iab.openrtb.response.BidResponse; -import com.iab.openrtb.response.SeatBid; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.StringUtils; import org.prebid.server.bidder.Bidder; @@ -26,7 +25,6 @@ import org.prebid.server.util.HttpUtil; import java.util.ArrayList; -import java.util.Collection; import java.util.Collections; import java.util.List; import java.util.Objects; @@ -113,10 +111,10 @@ private static List extractBids(BidResponse bidResponse) { return bidResponse.getSeatbid().stream() .filter(Objects::nonNull) - .map(SeatBid::getBid).filter(Objects::nonNull) - .flatMap(Collection::stream) - .filter(Objects::nonNull) - .map(bid -> BidderBid.of(bid, getBidType(bid), bidResponse.getCur())) + .flatMap(seatBid -> CollectionUtils.emptyIfNull(seatBid.getBid()).stream() + .filter(Objects::nonNull) + .map(bid -> BidderBid.of(seatBid.getSeat(), + bid, getBidType(bid), bidResponse.getCur()))) .toList(); } diff --git a/src/main/java/org/prebid/server/bidder/orbidder/OrbidderBidder.java b/src/main/java/org/prebid/server/bidder/orbidder/OrbidderBidder.java index 7b0c099aefc..52ca0c0d922 100644 --- a/src/main/java/org/prebid/server/bidder/orbidder/OrbidderBidder.java +++ b/src/main/java/org/prebid/server/bidder/orbidder/OrbidderBidder.java @@ -5,7 +5,7 @@ import com.iab.openrtb.request.Imp; import com.iab.openrtb.response.Bid; import com.iab.openrtb.response.BidResponse; -import com.iab.openrtb.response.SeatBid; +import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.Strings; import org.prebid.server.bidder.Bidder; @@ -26,7 +26,6 @@ import java.math.BigDecimal; import java.util.ArrayList; -import java.util.Collection; import java.util.Collections; import java.util.List; import java.util.Objects; @@ -108,11 +107,10 @@ public Result> makeBids(BidderCall httpCall, BidRequ final List errors = new ArrayList<>(); final List bidderBids = bidResponse.getSeatbid().stream() .filter(Objects::nonNull) - .map(SeatBid::getBid) - .filter(Objects::nonNull) - .flatMap(Collection::stream) - .map(bid -> toBidderBid(bid, bidResponse.getCur(), errors)) - .filter(Objects::nonNull) + .flatMap(seatBid -> CollectionUtils.emptyIfNull(seatBid.getBid()).stream() + .filter(Objects::nonNull) + .map(bid -> BidderBid.of(seatBid.getSeat(), + toBidderBid(bid, bidResponse.getCur(), errors)))) .toList(); return Result.of(bidderBids, errors); } diff --git a/src/main/java/org/prebid/server/bidder/outbrain/OutbrainBidder.java b/src/main/java/org/prebid/server/bidder/outbrain/OutbrainBidder.java index f1493d48d84..3b99d6bcbc4 100644 --- a/src/main/java/org/prebid/server/bidder/outbrain/OutbrainBidder.java +++ b/src/main/java/org/prebid/server/bidder/outbrain/OutbrainBidder.java @@ -10,7 +10,6 @@ import com.iab.openrtb.response.BidResponse; import com.iab.openrtb.response.EventTracker; import com.iab.openrtb.response.Response; -import com.iab.openrtb.response.SeatBid; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.collections4.ListUtils; import org.apache.commons.lang3.StringUtils; @@ -31,7 +30,6 @@ import org.prebid.server.util.HttpUtil; import java.util.ArrayList; -import java.util.Collection; import java.util.Collections; import java.util.List; import java.util.Objects; @@ -156,10 +154,10 @@ private List extractBids(BidRequest bidRequest, BidResponse bidRespon private List bidsFromResponse(BidRequest bidRequest, BidResponse bidResponse, List errors) { return bidResponse.getSeatbid().stream() .filter(Objects::nonNull) - .map(SeatBid::getBid) - .filter(Objects::nonNull) - .flatMap(Collection::stream) - .map(bid -> createBidderBid(bid, bidRequest.getImp(), bidResponse.getCur(), errors)) + .flatMap(seatBid -> CollectionUtils.emptyIfNull(seatBid.getBid()).stream() + .filter(Objects::nonNull) + .map(bid -> BidderBid.of(seatBid.getSeat(), + createBidderBid(bid, bidRequest.getImp(), bidResponse.getCur(), errors)))) .toList(); } diff --git a/src/main/java/org/prebid/server/bidder/ownadx/OwnAdxBidder.java b/src/main/java/org/prebid/server/bidder/ownadx/OwnAdxBidder.java index e184b506ded..8a12d373eec 100644 --- a/src/main/java/org/prebid/server/bidder/ownadx/OwnAdxBidder.java +++ b/src/main/java/org/prebid/server/bidder/ownadx/OwnAdxBidder.java @@ -5,7 +5,6 @@ import com.iab.openrtb.request.Imp; import com.iab.openrtb.response.Bid; import com.iab.openrtb.response.BidResponse; -import com.iab.openrtb.response.SeatBid; import io.vertx.core.MultiMap; import io.vertx.core.http.HttpMethod; import org.apache.commons.collections4.CollectionUtils; @@ -27,7 +26,6 @@ import org.prebid.server.util.Uri; import java.util.ArrayList; -import java.util.Collection; import java.util.Collections; import java.util.List; import java.util.Objects; @@ -117,10 +115,10 @@ private static List extractBids(BidResponse bidResponse) { return bidResponse.getSeatbid().stream() .filter(Objects::nonNull) - .map(SeatBid::getBid) - .filter(Objects::nonNull) - .flatMap(Collection::stream) - .map(bid -> BidderBid.of(bid, getBidMediaType(bid), bidResponse.getCur())) + .flatMap(seatBid -> CollectionUtils.emptyIfNull(seatBid.getBid()).stream() + .filter(Objects::nonNull) + .map(bid -> BidderBid.of(seatBid.getSeat(), + bid, getBidMediaType(bid), bidResponse.getCur()))) .toList(); } diff --git a/src/main/java/org/prebid/server/bidder/pangle/PangleBidder.java b/src/main/java/org/prebid/server/bidder/pangle/PangleBidder.java index c5db425ea44..1a76d5b1743 100644 --- a/src/main/java/org/prebid/server/bidder/pangle/PangleBidder.java +++ b/src/main/java/org/prebid/server/bidder/pangle/PangleBidder.java @@ -5,7 +5,6 @@ import com.iab.openrtb.request.Imp; import com.iab.openrtb.response.Bid; import com.iab.openrtb.response.BidResponse; -import com.iab.openrtb.response.SeatBid; import io.vertx.core.MultiMap; import io.vertx.core.http.HttpMethod; import org.apache.commons.collections4.CollectionUtils; @@ -29,7 +28,6 @@ import org.prebid.server.util.HttpUtil; import java.util.ArrayList; -import java.util.Collection; import java.util.Collections; import java.util.List; import java.util.Objects; @@ -167,9 +165,9 @@ private List extractBids(BidResponse bidResponse, List e private List bidsFromResponse(BidResponse bidResponse, List errors) { return bidResponse.getSeatbid().stream() .filter(Objects::nonNull) - .map(SeatBid::getBid) - .flatMap(Collection::stream) - .map(bid -> createBid(bid, bidResponse.getCur(), errors)) + .flatMap(seatBid -> CollectionUtils.emptyIfNull(seatBid.getBid()).stream() + .map(bid -> BidderBid.of(seatBid.getSeat(), + createBid(bid, bidResponse.getCur(), errors)))) .filter(Objects::nonNull) .toList(); } diff --git a/src/main/java/org/prebid/server/bidder/pgamssp/PgamSspBidder.java b/src/main/java/org/prebid/server/bidder/pgamssp/PgamSspBidder.java index a73438b3ce3..8ecdf468cbc 100644 --- a/src/main/java/org/prebid/server/bidder/pgamssp/PgamSspBidder.java +++ b/src/main/java/org/prebid/server/bidder/pgamssp/PgamSspBidder.java @@ -146,8 +146,11 @@ private List extractBids(BidResponse bidResponse) { } return bidResponse.getSeatbid().stream() - .flatMap(seatBid -> Optional.ofNullable(seatBid.getBid()).orElse(List.of()).stream()) - .map(bid -> BidderBid.of(bid, getBidMediaType(bid), bidResponse.getCur())) + .filter(java.util.Objects::nonNull) + .flatMap(seatBid -> Optional.ofNullable(seatBid.getBid()).orElse(List.of()).stream() + .filter(java.util.Objects::nonNull) + .map(bid -> BidderBid.of(seatBid.getSeat(), + bid, getBidMediaType(bid), bidResponse.getCur()))) .toList(); } diff --git a/src/main/java/org/prebid/server/bidder/playdigo/PlaydigoBidder.java b/src/main/java/org/prebid/server/bidder/playdigo/PlaydigoBidder.java index 997b97ef5b4..77eba53ccdd 100644 --- a/src/main/java/org/prebid/server/bidder/playdigo/PlaydigoBidder.java +++ b/src/main/java/org/prebid/server/bidder/playdigo/PlaydigoBidder.java @@ -6,7 +6,6 @@ import com.iab.openrtb.request.Imp; import com.iab.openrtb.response.Bid; import com.iab.openrtb.response.BidResponse; -import com.iab.openrtb.response.SeatBid; import io.micrometer.common.util.StringUtils; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.ObjectUtils; @@ -27,7 +26,6 @@ import org.prebid.server.util.HttpUtil; import java.util.ArrayList; -import java.util.Collection; import java.util.Collections; import java.util.List; import java.util.Objects; @@ -125,11 +123,10 @@ private List extractBids(BidResponse bidResponse) { return bidResponse.getSeatbid().stream() .filter(Objects::nonNull) - .map(SeatBid::getBid) - .filter(Objects::nonNull) - .flatMap(Collection::stream) - .filter(Objects::nonNull) - .map(bid -> BidderBid.of(bid, getBidType(bid), bidResponse.getCur())) + .flatMap(seatBid -> CollectionUtils.emptyIfNull(seatBid.getBid()).stream() + .filter(Objects::nonNull) + .map(bid -> BidderBid.of(seatBid.getSeat(), + bid, getBidType(bid), bidResponse.getCur()))) .toList(); } diff --git a/src/main/java/org/prebid/server/bidder/preciso/PrecisoBidder.java b/src/main/java/org/prebid/server/bidder/preciso/PrecisoBidder.java index 731275188cc..7bee0ad6b67 100644 --- a/src/main/java/org/prebid/server/bidder/preciso/PrecisoBidder.java +++ b/src/main/java/org/prebid/server/bidder/preciso/PrecisoBidder.java @@ -6,7 +6,6 @@ import com.iab.openrtb.request.Imp; import com.iab.openrtb.response.Bid; import com.iab.openrtb.response.BidResponse; -import com.iab.openrtb.response.SeatBid; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.Strings; import org.prebid.server.bidder.Bidder; @@ -29,7 +28,6 @@ import java.math.BigDecimal; import java.util.ArrayList; -import java.util.Collection; import java.util.Collections; import java.util.List; import java.util.Objects; @@ -113,11 +111,10 @@ private static List extractBids(BidResponse bidResponse) { return bidResponse.getSeatbid().stream() .filter(Objects::nonNull) - .map(SeatBid::getBid) - .filter(Objects::nonNull) - .flatMap(Collection::stream) - .filter(Objects::nonNull) - .map(bid -> BidderBid.of(bid, getBidType(bid), bidResponse.getCur())) + .flatMap(seatBid -> CollectionUtils.emptyIfNull(seatBid.getBid()).stream() + .filter(Objects::nonNull) + .map(bid -> BidderBid.of(seatBid.getSeat(), + bid, getBidType(bid), bidResponse.getCur()))) .toList(); } diff --git a/src/main/java/org/prebid/server/bidder/pubmatic/PubmaticBidder.java b/src/main/java/org/prebid/server/bidder/pubmatic/PubmaticBidder.java index 857f212a209..58108702f10 100644 --- a/src/main/java/org/prebid/server/bidder/pubmatic/PubmaticBidder.java +++ b/src/main/java/org/prebid/server/bidder/pubmatic/PubmaticBidder.java @@ -12,7 +12,6 @@ import com.iab.openrtb.request.Site; import com.iab.openrtb.response.Bid; import com.iab.openrtb.response.BidResponse; -import com.iab.openrtb.response.SeatBid; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.BooleanUtils; import org.apache.commons.lang3.ObjectUtils; @@ -53,7 +52,6 @@ import java.math.BigDecimal; import java.util.ArrayList; import java.util.Arrays; -import java.util.Collection; import java.util.Collections; import java.util.List; import java.util.Map; @@ -549,15 +547,16 @@ private List extractBids(BidResponse bidResponse, List b private List bidsFromResponse(BidResponse bidResponse, List bidderErrors) { return bidResponse.getSeatbid().stream() .filter(Objects::nonNull) - .map(SeatBid::getBid) - .filter(Objects::nonNull) - .flatMap(Collection::stream) - .map(bid -> resolveBidderBid(bid, bidResponse.getCur(), bidderErrors)) + .filter(seatBid -> seatBid.getBid() != null) + .flatMap(seatBid -> seatBid.getBid().stream() + .filter(Objects::nonNull) + .map(bid -> resolveBidderBid( + bid, bidResponse.getCur(), bidderErrors, seatBid.getSeat()))) .filter(Objects::nonNull) .toList(); } - private BidderBid resolveBidderBid(Bid bid, String currency, List bidderErrors) { + private BidderBid resolveBidderBid(Bid bid, String currency, List bidderErrors, String originalSeat) { final List cat = bid.getCat(); final List firstCat = CollectionUtils.isNotEmpty(cat) ? Collections.singletonList(cat.getFirst()) @@ -583,6 +582,7 @@ private BidderBid resolveBidderBid(Bid bid, String currency, List b return BidderBid.builder() .bid(updatedBid) + .originalSeat(originalSeat) .type(bidType) .bidCurrency(currency) .dealPriority(getDealPriority(pubmaticBidExt)) diff --git a/src/main/java/org/prebid/server/bidder/pubnative/PubnativeBidder.java b/src/main/java/org/prebid/server/bidder/pubnative/PubnativeBidder.java index 2fb2768c73b..f40eaa1c333 100644 --- a/src/main/java/org/prebid/server/bidder/pubnative/PubnativeBidder.java +++ b/src/main/java/org/prebid/server/bidder/pubnative/PubnativeBidder.java @@ -32,7 +32,6 @@ import java.math.BigDecimal; import java.util.ArrayList; -import java.util.Collection; import java.util.Collections; import java.util.List; import java.util.Objects; @@ -181,10 +180,10 @@ private static List extractBids(BidResponse bidResponse, BidRequest b private static List bidsFromResponse(List seatbid, List imps, String currency) { return seatbid.stream() .filter(Objects::nonNull) - .map(SeatBid::getBid) - .filter(Objects::nonNull) - .flatMap(Collection::stream) - .map(bid -> createBidderBid(imps, currency, bid)) + .flatMap(seatBid -> CollectionUtils.emptyIfNull(seatBid.getBid()).stream() + .filter(Objects::nonNull) + .map(bid -> BidderBid.of(seatBid.getSeat(), + createBidderBid(imps, currency, bid)))) .toList(); } diff --git a/src/main/java/org/prebid/server/bidder/pubrise/PubriseBidder.java b/src/main/java/org/prebid/server/bidder/pubrise/PubriseBidder.java index f8fe37197b0..bdd518ddd46 100644 --- a/src/main/java/org/prebid/server/bidder/pubrise/PubriseBidder.java +++ b/src/main/java/org/prebid/server/bidder/pubrise/PubriseBidder.java @@ -6,7 +6,6 @@ import com.iab.openrtb.request.Imp; import com.iab.openrtb.response.Bid; import com.iab.openrtb.response.BidResponse; -import com.iab.openrtb.response.SeatBid; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.StringUtils; import org.prebid.server.bidder.Bidder; @@ -26,7 +25,6 @@ import org.prebid.server.util.HttpUtil; import java.util.ArrayList; -import java.util.Collection; import java.util.Collections; import java.util.List; import java.util.Objects; @@ -114,10 +112,10 @@ private static List extractBids(BidResponse bidResponse) { return bidResponse.getSeatbid().stream() .filter(Objects::nonNull) - .map(SeatBid::getBid).filter(Objects::nonNull) - .flatMap(Collection::stream) - .filter(Objects::nonNull) - .map(bid -> BidderBid.of(bid, getBidType(bid), bidResponse.getCur())) + .flatMap(seatBid -> CollectionUtils.emptyIfNull(seatBid.getBid()).stream() + .filter(Objects::nonNull) + .map(bid -> BidderBid.of(seatBid.getSeat(), + bid, getBidType(bid), bidResponse.getCur()))) .toList(); } diff --git a/src/main/java/org/prebid/server/bidder/pulsepoint/PulsepointBidder.java b/src/main/java/org/prebid/server/bidder/pulsepoint/PulsepointBidder.java index 7692dbb7b04..a31121ffe5c 100644 --- a/src/main/java/org/prebid/server/bidder/pulsepoint/PulsepointBidder.java +++ b/src/main/java/org/prebid/server/bidder/pulsepoint/PulsepointBidder.java @@ -8,7 +8,6 @@ import com.iab.openrtb.request.Site; import com.iab.openrtb.response.Bid; import com.iab.openrtb.response.BidResponse; -import com.iab.openrtb.response.SeatBid; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.StringUtils; import org.prebid.server.bidder.Bidder; @@ -27,7 +26,6 @@ import org.prebid.server.util.HttpUtil; import java.util.ArrayList; -import java.util.Collection; import java.util.Collections; import java.util.List; import java.util.Objects; @@ -137,11 +135,10 @@ private static List extractBids(BidRequest bidRequest, BidResponse bi return bidResponse.getSeatbid().stream() .filter(Objects::nonNull) - .map(SeatBid::getBid) - .filter(Objects::nonNull) - .flatMap(Collection::stream) - .filter(Objects::nonNull) - .map(bid -> makeBidderBid(bid, bidRequest.getImp(), bidResponse.getCur())) + .flatMap(seatBid -> CollectionUtils.emptyIfNull(seatBid.getBid()).stream() + .filter(Objects::nonNull) + .map(bid -> BidderBid.of(seatBid.getSeat(), + makeBidderBid(bid, bidRequest.getImp(), bidResponse.getCur())))) .filter(Objects::nonNull) .toList(); } diff --git a/src/main/java/org/prebid/server/bidder/pwbid/PwbidBidder.java b/src/main/java/org/prebid/server/bidder/pwbid/PwbidBidder.java index be2b243aae8..7f67b001030 100644 --- a/src/main/java/org/prebid/server/bidder/pwbid/PwbidBidder.java +++ b/src/main/java/org/prebid/server/bidder/pwbid/PwbidBidder.java @@ -3,7 +3,6 @@ import com.iab.openrtb.request.BidRequest; import com.iab.openrtb.request.Imp; import com.iab.openrtb.response.BidResponse; -import com.iab.openrtb.response.SeatBid; import org.apache.commons.collections4.CollectionUtils; import org.prebid.server.bidder.Bidder; import org.prebid.server.bidder.model.BidderBid; @@ -18,7 +17,6 @@ import org.prebid.server.util.BidderUtil; import org.prebid.server.util.HttpUtil; -import java.util.Collection; import java.util.Collections; import java.util.List; import java.util.Objects; @@ -58,10 +56,10 @@ private static List extractBids(BidRequest bidRequest, BidResponse bi private static List bidsFromResponse(BidRequest bidRequest, BidResponse bidResponse) { return bidResponse.getSeatbid().stream() .filter(Objects::nonNull) - .map(SeatBid::getBid) - .filter(Objects::nonNull) - .flatMap(Collection::stream) - .map(bid -> BidderBid.of(bid, getBidType(bid.getImpid(), bidRequest.getImp()), bidResponse.getCur())) + .flatMap(seatBid -> CollectionUtils.emptyIfNull(seatBid.getBid()).stream() + .filter(Objects::nonNull) + .map(bid -> BidderBid.of(seatBid.getSeat(), + bid, getBidType(bid.getImpid(), bidRequest.getImp()), bidResponse.getCur()))) .toList(); } diff --git a/src/main/java/org/prebid/server/bidder/qt/QtBidder.java b/src/main/java/org/prebid/server/bidder/qt/QtBidder.java index 4b07ff86e97..72d58b31375 100644 --- a/src/main/java/org/prebid/server/bidder/qt/QtBidder.java +++ b/src/main/java/org/prebid/server/bidder/qt/QtBidder.java @@ -6,7 +6,6 @@ import com.iab.openrtb.request.Imp; import com.iab.openrtb.response.Bid; import com.iab.openrtb.response.BidResponse; -import com.iab.openrtb.response.SeatBid; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.StringUtils; import org.prebid.server.bidder.Bidder; @@ -26,7 +25,6 @@ import org.prebid.server.util.HttpUtil; import java.util.ArrayList; -import java.util.Collection; import java.util.Collections; import java.util.List; import java.util.Objects; @@ -113,10 +111,10 @@ private static List extractBids(BidResponse bidResponse) { return bidResponse.getSeatbid().stream() .filter(Objects::nonNull) - .map(SeatBid::getBid).filter(Objects::nonNull) - .flatMap(Collection::stream) - .filter(Objects::nonNull) - .map(bid -> BidderBid.of(bid, getBidType(bid), bidResponse.getCur())) + .flatMap(seatBid -> CollectionUtils.emptyIfNull(seatBid.getBid()).stream() + .filter(Objects::nonNull) + .map(bid -> BidderBid.of(seatBid.getSeat(), + bid, getBidType(bid), bidResponse.getCur()))) .toList(); } diff --git a/src/main/java/org/prebid/server/bidder/readpeak/ReadPeakBidder.java b/src/main/java/org/prebid/server/bidder/readpeak/ReadPeakBidder.java index 334faa4b5ee..427489bf63a 100644 --- a/src/main/java/org/prebid/server/bidder/readpeak/ReadPeakBidder.java +++ b/src/main/java/org/prebid/server/bidder/readpeak/ReadPeakBidder.java @@ -8,7 +8,6 @@ import com.iab.openrtb.request.Site; import com.iab.openrtb.response.Bid; import com.iab.openrtb.response.BidResponse; -import com.iab.openrtb.response.SeatBid; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.ObjectUtils; import org.apache.commons.lang3.StringUtils; @@ -32,7 +31,6 @@ import java.math.BigDecimal; import java.util.ArrayList; -import java.util.Collection; import java.util.Collections; import java.util.List; import java.util.Objects; @@ -149,10 +147,10 @@ private List extractBids(BidResponse bidResponse, List e private List bidsFromResponse(BidResponse bidResponse, List errors) { return bidResponse.getSeatbid().stream() .filter(Objects::nonNull) - .map(SeatBid::getBid) - .filter(Objects::nonNull) - .flatMap(Collection::stream) - .map(bid -> makeBid(bid, bidResponse.getCur(), errors)) + .flatMap(seatBid -> CollectionUtils.emptyIfNull(seatBid.getBid()).stream() + .filter(Objects::nonNull) + .map(bid -> BidderBid.of(seatBid.getSeat(), + makeBid(bid, bidResponse.getCur(), errors)))) .filter(Objects::nonNull) .toList(); } diff --git a/src/main/java/org/prebid/server/bidder/rediads/RediadsBidder.java b/src/main/java/org/prebid/server/bidder/rediads/RediadsBidder.java index bc7f5275f7d..474d548564d 100644 --- a/src/main/java/org/prebid/server/bidder/rediads/RediadsBidder.java +++ b/src/main/java/org/prebid/server/bidder/rediads/RediadsBidder.java @@ -9,7 +9,6 @@ import com.iab.openrtb.request.Site; import com.iab.openrtb.response.Bid; import com.iab.openrtb.response.BidResponse; -import com.iab.openrtb.response.SeatBid; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.StringUtils; import org.prebid.server.bidder.Bidder; @@ -28,7 +27,6 @@ import org.prebid.server.util.Uri; import java.util.ArrayList; -import java.util.Collection; import java.util.Collections; import java.util.List; import java.util.Objects; @@ -150,11 +148,10 @@ private static List extractBids(BidResponse bidResponse) { private static List bidsFromResponse(BidResponse bidResponse) { return bidResponse.getSeatbid().stream() .filter(Objects::nonNull) - .map(SeatBid::getBid) - .filter(Objects::nonNull) - .flatMap(Collection::stream) - .filter(Objects::nonNull) - .map(bid -> BidderBid.of(bid, getBidType(bid), bidResponse.getCur())) + .flatMap(seatBid -> CollectionUtils.emptyIfNull(seatBid.getBid()).stream() + .filter(Objects::nonNull) + .map(bid -> BidderBid.of(seatBid.getSeat(), + bid, getBidType(bid), bidResponse.getCur()))) .collect(Collectors.toList()); } diff --git a/src/main/java/org/prebid/server/bidder/resetdigital/ResetDigitalBidder.java b/src/main/java/org/prebid/server/bidder/resetdigital/ResetDigitalBidder.java index 09a5f2af116..95aa51203b2 100644 --- a/src/main/java/org/prebid/server/bidder/resetdigital/ResetDigitalBidder.java +++ b/src/main/java/org/prebid/server/bidder/resetdigital/ResetDigitalBidder.java @@ -137,8 +137,8 @@ private static BidderBid makeBidderBid(Bid bid, String seat, String currency, Im .orElseGet(() -> getBidType(bid, imp)); return StringUtils.isNotBlank(seat) - ? BidderBid.of(bid, bidType, seat, currency) - : BidderBid.of(bid, bidType, currency); + ? BidderBid.of(seat, bid, bidType, seat, currency) + : BidderBid.of(seat, bid, bidType, currency); } private static BidType getBidType(Bid bid) { diff --git a/src/main/java/org/prebid/server/bidder/revcontent/RevcontentBidder.java b/src/main/java/org/prebid/server/bidder/revcontent/RevcontentBidder.java index 789ceb99681..0ff56498e23 100644 --- a/src/main/java/org/prebid/server/bidder/revcontent/RevcontentBidder.java +++ b/src/main/java/org/prebid/server/bidder/revcontent/RevcontentBidder.java @@ -5,7 +5,6 @@ import com.iab.openrtb.request.Site; import com.iab.openrtb.response.Bid; import com.iab.openrtb.response.BidResponse; -import com.iab.openrtb.response.SeatBid; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.StringUtils; import org.prebid.server.bidder.Bidder; @@ -22,7 +21,6 @@ import org.prebid.server.util.HttpUtil; import org.prebid.server.util.ObjectUtil; -import java.util.Collection; import java.util.Collections; import java.util.List; import java.util.Objects; @@ -73,11 +71,10 @@ private static List extractBids(BidResponse bidResponse) { final String currency = bidResponse.getCur(); return bidResponse.getSeatbid().stream() .filter(Objects::nonNull) - .map(SeatBid::getBid) - .filter(Objects::nonNull) - .flatMap(Collection::stream) - .filter(Objects::nonNull) - .map(bid -> BidderBid.of(bid, resolveBidType(bid), currency)) + .flatMap(seatBid -> CollectionUtils.emptyIfNull(seatBid.getBid()).stream() + .filter(Objects::nonNull) + .map(bid -> BidderBid.of(seatBid.getSeat(), + bid, resolveBidType(bid), currency))) .toList(); } diff --git a/src/main/java/org/prebid/server/bidder/richaudience/RichaudienceBidder.java b/src/main/java/org/prebid/server/bidder/richaudience/RichaudienceBidder.java index b23848e7813..22835e311e7 100644 --- a/src/main/java/org/prebid/server/bidder/richaudience/RichaudienceBidder.java +++ b/src/main/java/org/prebid/server/bidder/richaudience/RichaudienceBidder.java @@ -226,10 +226,11 @@ private List extractBids(BidResponse bidResponse, BidRequest bidReque return bidResponse.getSeatbid().stream() .filter(Objects::nonNull) - .flatMap(seatBid -> seatBid.getBid().stream()) - .filter(Objects::nonNull) - .filter(bid -> impMap.containsKey(bid.getImpid())) - .map(bid -> makeBid(bidResponse, impMap, bid)) + .flatMap(seatBid -> CollectionUtils.emptyIfNull(seatBid.getBid()).stream() + .filter(Objects::nonNull) + .filter(bid -> impMap.containsKey(bid.getImpid())) + .map(bid -> BidderBid.of(seatBid.getSeat(), + makeBid(bidResponse, impMap, bid)))) .toList(); } diff --git a/src/main/java/org/prebid/server/bidder/rise/RiseBidder.java b/src/main/java/org/prebid/server/bidder/rise/RiseBidder.java index 8b513e2196c..22f46867122 100644 --- a/src/main/java/org/prebid/server/bidder/rise/RiseBidder.java +++ b/src/main/java/org/prebid/server/bidder/rise/RiseBidder.java @@ -5,7 +5,6 @@ import com.iab.openrtb.request.Imp; import com.iab.openrtb.response.Bid; import com.iab.openrtb.response.BidResponse; -import com.iab.openrtb.response.SeatBid; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.StringUtils; import org.prebid.server.bidder.Bidder; @@ -24,7 +23,6 @@ import org.prebid.server.util.Uri; import java.util.ArrayList; -import java.util.Collection; import java.util.Collections; import java.util.List; import java.util.Objects; @@ -94,28 +92,28 @@ public Result> makeBids(BidderCall httpCall, BidRequ final List errors = new ArrayList<>(); final List bids = extractBids(bidResponse, errors); - return Result.of(bids, errors); + return Result.of( + bids, errors); } private static List extractBids(BidResponse bidResponse, List errors) { if (bidResponse == null || CollectionUtils.isEmpty(bidResponse.getSeatbid())) { return Collections.emptyList(); } - return bidResponse.getSeatbid().stream() .filter(Objects::nonNull) - .map(SeatBid::getBid) - .filter(Objects::nonNull) - .flatMap(Collection::stream) - .filter(Objects::nonNull) - .map(bid -> makeBidderBid(bid, bidResponse.getCur(), errors)) + .filter(seatBid -> seatBid.getBid() != null) + .flatMap(seatBid -> seatBid.getBid().stream() + .filter(Objects::nonNull) + .map(bid -> makeBidderBid(bid, bidResponse.getCur(), errors, seatBid.getSeat()))) .filter(Objects::nonNull) .toList(); } - private static BidderBid makeBidderBid(Bid bid, String currency, List errors) { + private static BidderBid makeBidderBid(Bid bid, String currency, List errors, + String originalSeat) { try { - return BidderBid.of(bid, resolveBidType(bid), currency); + return BidderBid.of(originalSeat, bid, resolveBidType(bid), currency); } catch (PreBidException e) { errors.add(BidderError.badServerResponse(e.getMessage())); return null; diff --git a/src/main/java/org/prebid/server/bidder/roulax/RoulaxBidder.java b/src/main/java/org/prebid/server/bidder/roulax/RoulaxBidder.java index 30234036841..744708676f8 100644 --- a/src/main/java/org/prebid/server/bidder/roulax/RoulaxBidder.java +++ b/src/main/java/org/prebid/server/bidder/roulax/RoulaxBidder.java @@ -5,7 +5,6 @@ import com.iab.openrtb.request.Imp; import com.iab.openrtb.response.Bid; import com.iab.openrtb.response.BidResponse; -import com.iab.openrtb.response.SeatBid; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.StringUtils; import org.prebid.server.bidder.Bidder; @@ -24,7 +23,6 @@ import org.prebid.server.util.Uri; import java.util.ArrayList; -import java.util.Collection; import java.util.Collections; import java.util.List; import java.util.Objects; @@ -89,11 +87,10 @@ private static List extractBids(BidResponse bidResponse, List makeBid(bid, bidResponse.getCur(), errors)) + .flatMap(seatBid -> CollectionUtils.emptyIfNull(seatBid.getBid()).stream() + .filter(Objects::nonNull) + .map(bid -> BidderBid.of(seatBid.getSeat(), + makeBid(bid, bidResponse.getCur(), errors)))) .filter(Objects::nonNull) .toList(); } diff --git a/src/main/java/org/prebid/server/bidder/rtbhouse/RtbhouseBidder.java b/src/main/java/org/prebid/server/bidder/rtbhouse/RtbhouseBidder.java index be9f76a155c..6ad9d42746d 100644 --- a/src/main/java/org/prebid/server/bidder/rtbhouse/RtbhouseBidder.java +++ b/src/main/java/org/prebid/server/bidder/rtbhouse/RtbhouseBidder.java @@ -11,7 +11,6 @@ import com.iab.openrtb.request.Site; import com.iab.openrtb.response.Bid; import com.iab.openrtb.response.BidResponse; -import com.iab.openrtb.response.SeatBid; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.Strings; @@ -36,7 +35,6 @@ import java.math.BigDecimal; import java.util.ArrayList; -import java.util.Collection; import java.util.Collections; import java.util.List; import java.util.Objects; @@ -231,11 +229,10 @@ private List extractBids(BidRequest bidRequest, return bidResponse.getSeatbid().stream() .filter(Objects::nonNull) - .map(SeatBid::getBid) - .filter(Objects::nonNull) - .flatMap(Collection::stream) - .filter(Objects::nonNull) - .map(bid -> resolveBidderBid(bid, bidRequest, bidResponse, bidderErrors)) + .flatMap(seatBid -> CollectionUtils.emptyIfNull(seatBid.getBid()).stream() + .filter(Objects::nonNull) + .map(bid -> BidderBid.of(seatBid.getSeat(), + resolveBidderBid(bid, bidRequest, bidResponse, bidderErrors)))) .toList(); } diff --git a/src/main/java/org/prebid/server/bidder/salunamedia/SaLunamediaBidder.java b/src/main/java/org/prebid/server/bidder/salunamedia/SaLunamediaBidder.java index 0dcdd206050..25b95f7a8d0 100644 --- a/src/main/java/org/prebid/server/bidder/salunamedia/SaLunamediaBidder.java +++ b/src/main/java/org/prebid/server/bidder/salunamedia/SaLunamediaBidder.java @@ -66,7 +66,8 @@ private List extractBids(BidResponse bidResponse) { throw new PreBidException("Missing BidExt"); } - return Collections.singletonList(BidderBid.of(firstBid, getBidType(firstBidExt), bidResponse.getCur())); + return Collections.singletonList(BidderBid.of(firstSeatBid.getSeat(), firstBid, getBidType(firstBidExt), + bidResponse.getCur())); } private BidType getBidType(ObjectNode bidExt) { diff --git a/src/main/java/org/prebid/server/bidder/screencore/ScreencoreBidder.java b/src/main/java/org/prebid/server/bidder/screencore/ScreencoreBidder.java index 1e2a9c3d19d..5cdf52dc509 100644 --- a/src/main/java/org/prebid/server/bidder/screencore/ScreencoreBidder.java +++ b/src/main/java/org/prebid/server/bidder/screencore/ScreencoreBidder.java @@ -137,8 +137,11 @@ private static List extractBids(BidResponse bidResponse) { return bidResponse.getSeatbid() .stream() - .flatMap(seatBid -> Optional.ofNullable(seatBid.getBid()).orElse(List.of()).stream()) - .map(bid -> BidderBid.of(bid, getBidMediaType(bid), bidResponse.getCur())) + .filter(java.util.Objects::nonNull) + .flatMap(seatBid -> Optional.ofNullable(seatBid.getBid()).orElse(List.of()).stream() + .filter(java.util.Objects::nonNull) + .map(bid -> BidderBid.of(seatBid.getSeat(), + bid, getBidMediaType(bid), bidResponse.getCur()))) .toList(); } diff --git a/src/main/java/org/prebid/server/bidder/seedingAlliance/SeedingAllianceBidder.java b/src/main/java/org/prebid/server/bidder/seedingAlliance/SeedingAllianceBidder.java index 9d261845ec0..5ad82ae4784 100644 --- a/src/main/java/org/prebid/server/bidder/seedingAlliance/SeedingAllianceBidder.java +++ b/src/main/java/org/prebid/server/bidder/seedingAlliance/SeedingAllianceBidder.java @@ -6,7 +6,6 @@ import com.iab.openrtb.request.Imp; import com.iab.openrtb.response.Bid; import com.iab.openrtb.response.BidResponse; -import com.iab.openrtb.response.SeatBid; import io.vertx.core.http.HttpMethod; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.StringUtils; @@ -28,7 +27,6 @@ import java.math.BigDecimal; import java.util.ArrayList; -import java.util.Collection; import java.util.Collections; import java.util.List; import java.util.Objects; @@ -137,11 +135,10 @@ private List extractBids(BidResponse bidResponse, List e return bidResponse.getSeatbid().stream() .filter(Objects::nonNull) - .map(SeatBid::getBid) - .filter(Objects::nonNull) - .flatMap(Collection::stream) - .filter(Objects::nonNull) - .map(bid -> makeBidderBid(bid, bidResponse.getCur(), errors)) + .flatMap(seatBid -> CollectionUtils.emptyIfNull(seatBid.getBid()).stream() + .filter(Objects::nonNull) + .map(bid -> BidderBid.of(seatBid.getSeat(), + makeBidderBid(bid, bidResponse.getCur(), errors)))) .filter(Objects::nonNull) .toList(); } diff --git a/src/main/java/org/prebid/server/bidder/seedtag/SeedtagBidder.java b/src/main/java/org/prebid/server/bidder/seedtag/SeedtagBidder.java index 97b02a18976..9f8d4847395 100644 --- a/src/main/java/org/prebid/server/bidder/seedtag/SeedtagBidder.java +++ b/src/main/java/org/prebid/server/bidder/seedtag/SeedtagBidder.java @@ -5,7 +5,6 @@ import com.iab.openrtb.request.Imp; import com.iab.openrtb.response.Bid; import com.iab.openrtb.response.BidResponse; -import com.iab.openrtb.response.SeatBid; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.StringUtils; import org.prebid.server.bidder.Bidder; @@ -27,7 +26,6 @@ import java.math.BigDecimal; import java.util.ArrayList; -import java.util.Collection; import java.util.Collections; import java.util.List; import java.util.Objects; @@ -144,19 +142,17 @@ private static List extractBids(BidResponse bidResponse, List makeBidderBid(bid, errors)) + .filter(seatBid -> seatBid.getBid() != null) + .flatMap(seatBid -> seatBid.getBid().stream() + .filter(Objects::nonNull) + .map(bid -> makeBidderBid(bid, errors, seatBid.getSeat()))) .filter(Objects::nonNull) .toList(); } - private static BidderBid makeBidderBid(Bid bid, List errors) { + private static BidderBid makeBidderBid(Bid bid, List errors, String originalSeat) { final BidType bidType; try { bidType = getBidType(bid); @@ -165,7 +161,7 @@ private static BidderBid makeBidderBid(Bid bid, List errors) { return null; } - return BidderBid.of(bid, bidType, BIDDER_CURRENCY); + return BidderBid.of(originalSeat, bid, bidType, BIDDER_CURRENCY); } private static BidType getBidType(Bid bid) { diff --git a/src/main/java/org/prebid/server/bidder/sharethrough/SharethroughBidder.java b/src/main/java/org/prebid/server/bidder/sharethrough/SharethroughBidder.java index dd9faea2bc9..5843d809a39 100644 --- a/src/main/java/org/prebid/server/bidder/sharethrough/SharethroughBidder.java +++ b/src/main/java/org/prebid/server/bidder/sharethrough/SharethroughBidder.java @@ -12,7 +12,6 @@ import com.iab.openrtb.request.Video; import com.iab.openrtb.response.Bid; import com.iab.openrtb.response.BidResponse; -import com.iab.openrtb.response.SeatBid; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.collections4.ListUtils; import org.apache.commons.lang3.ObjectUtils; @@ -38,7 +37,6 @@ import java.math.BigDecimal; import java.util.ArrayList; -import java.util.Collection; import java.util.Collections; import java.util.List; import java.util.Objects; @@ -222,19 +220,17 @@ private List extractBids(BidResponse bidResponse, List e if (bidResponse == null || CollectionUtils.isEmpty(bidResponse.getSeatbid())) { return Collections.emptyList(); } - return bidResponse.getSeatbid().stream() .filter(Objects::nonNull) - .map(SeatBid::getBid) - .filter(Objects::nonNull) - .flatMap(Collection::stream) - .filter(Objects::nonNull) - .map(bid -> constructBidderBid(bid, errors)) + .filter(seatBid -> seatBid.getBid() != null) + .flatMap(seatBid -> seatBid.getBid().stream() + .filter(Objects::nonNull) + .map(bid -> constructBidderBid(bid, errors, seatBid.getSeat()))) .filter(Objects::nonNull) .toList(); } - private BidderBid constructBidderBid(Bid bid, List errors) { + private BidderBid constructBidderBid(Bid bid, List errors, String originalSeat) { final JsonNode extNode = bid.getExt(); final JsonNode bidTypeNode = extNode != null ? extNode.at(BID_TYPE_POINTER) : null; @@ -246,7 +242,7 @@ private BidderBid constructBidderBid(Bid bid, List errors) { final BidType bidType = parseBidType(bidTypeNode, errors); return bidType != null - ? BidderBid.of(bid, bidType, BID_CURRENCY) + ? BidderBid.of(originalSeat, bid, bidType, BID_CURRENCY) : null; } diff --git a/src/main/java/org/prebid/server/bidder/showheroes/ShowheroesBidder.java b/src/main/java/org/prebid/server/bidder/showheroes/ShowheroesBidder.java index ab484a5d3ec..fe0efd84c65 100644 --- a/src/main/java/org/prebid/server/bidder/showheroes/ShowheroesBidder.java +++ b/src/main/java/org/prebid/server/bidder/showheroes/ShowheroesBidder.java @@ -10,7 +10,6 @@ import com.iab.openrtb.request.Source; import com.iab.openrtb.response.Bid; import com.iab.openrtb.response.BidResponse; -import com.iab.openrtb.response.SeatBid; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.Strings; import org.prebid.server.bidder.Bidder; @@ -36,7 +35,6 @@ import java.math.BigDecimal; import java.util.ArrayList; -import java.util.Collection; import java.util.Collections; import java.util.List; import java.util.Objects; @@ -199,11 +197,10 @@ private List extractBids(BidResponse bidResponse) { return bidResponse.getSeatbid().stream() .filter(Objects::nonNull) - .map(SeatBid::getBid) - .filter(Objects::nonNull) - .flatMap(Collection::stream) - .filter(Objects::nonNull) - .map(bid -> BidderBid.of(bid, getBidType(bid), bidResponse.getCur())) + .flatMap(seatBid -> CollectionUtils.emptyIfNull(seatBid.getBid()).stream() + .filter(Objects::nonNull) + .map(bid -> BidderBid.of(seatBid.getSeat(), + bid, getBidType(bid), bidResponse.getCur()))) .filter(Objects::nonNull) .toList(); } diff --git a/src/main/java/org/prebid/server/bidder/silvermob/SilvermobBidder.java b/src/main/java/org/prebid/server/bidder/silvermob/SilvermobBidder.java index 2820319147f..f7b8368b426 100644 --- a/src/main/java/org/prebid/server/bidder/silvermob/SilvermobBidder.java +++ b/src/main/java/org/prebid/server/bidder/silvermob/SilvermobBidder.java @@ -6,7 +6,6 @@ import com.iab.openrtb.request.Imp; import com.iab.openrtb.response.Bid; import com.iab.openrtb.response.BidResponse; -import com.iab.openrtb.response.SeatBid; import io.vertx.core.MultiMap; import io.vertx.core.http.HttpMethod; import org.apache.commons.collections4.CollectionUtils; @@ -28,7 +27,6 @@ import org.prebid.server.util.Uri; import java.util.ArrayList; -import java.util.Collection; import java.util.Collections; import java.util.List; import java.util.Objects; @@ -152,10 +150,10 @@ private List extractBids(BidderCall httpCall) { private static List bidsFromResponse(BidResponse bidResponse) { return bidResponse.getSeatbid().stream() .filter(Objects::nonNull) - .map(SeatBid::getBid) - .filter(Objects::nonNull) - .flatMap(Collection::stream) - .map(bid -> BidderBid.of(bid, getBidType(bid), bidResponse.getCur())) + .flatMap(seatBid -> CollectionUtils.emptyIfNull(seatBid.getBid()).stream() + .filter(Objects::nonNull) + .map(bid -> BidderBid.of(seatBid.getSeat(), + bid, getBidType(bid), bidResponse.getCur()))) .toList(); } diff --git a/src/main/java/org/prebid/server/bidder/silverpush/SilverPushBidder.java b/src/main/java/org/prebid/server/bidder/silverpush/SilverPushBidder.java index 212e1558283..af73c0a2a88 100644 --- a/src/main/java/org/prebid/server/bidder/silverpush/SilverPushBidder.java +++ b/src/main/java/org/prebid/server/bidder/silverpush/SilverPushBidder.java @@ -18,7 +18,6 @@ import com.iab.openrtb.request.Video; import com.iab.openrtb.response.Bid; import com.iab.openrtb.response.BidResponse; -import com.iab.openrtb.response.SeatBid; import io.vertx.core.MultiMap; import io.vertx.core.http.HttpMethod; import org.apache.commons.collections4.CollectionUtils; @@ -43,7 +42,6 @@ import java.io.IOException; import java.math.BigDecimal; import java.util.ArrayList; -import java.util.Collection; import java.util.Collections; import java.util.List; import java.util.Objects; @@ -308,11 +306,10 @@ private static List extractBids(BidResponse bidResponse) { return bidResponse.getSeatbid().stream() .filter(Objects::nonNull) - .map(SeatBid::getBid) - .filter(Objects::nonNull) - .flatMap(Collection::stream) - .filter(Objects::nonNull) - .map(bid -> BidderBid.of(bid, getBidMediaType(bid), bidResponse.getCur())) + .flatMap(seatBid -> CollectionUtils.emptyIfNull(seatBid.getBid()).stream() + .filter(Objects::nonNull) + .map(bid -> BidderBid.of(seatBid.getSeat(), + bid, getBidMediaType(bid), bidResponse.getCur()))) .toList(); } diff --git a/src/main/java/org/prebid/server/bidder/smaato/SmaatoBidder.java b/src/main/java/org/prebid/server/bidder/smaato/SmaatoBidder.java index 034ed6eddcd..3f14c7fd822 100644 --- a/src/main/java/org/prebid/server/bidder/smaato/SmaatoBidder.java +++ b/src/main/java/org/prebid/server/bidder/smaato/SmaatoBidder.java @@ -15,7 +15,6 @@ import com.iab.openrtb.request.Video; import com.iab.openrtb.response.Bid; import com.iab.openrtb.response.BidResponse; -import com.iab.openrtb.response.SeatBid; import io.vertx.core.MultiMap; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.ObjectUtils; @@ -51,7 +50,6 @@ import java.time.Clock; import java.util.ArrayList; -import java.util.Collection; import java.util.Collections; import java.util.List; import java.util.Objects; @@ -343,10 +341,10 @@ private Result> extractBids(BidResponse bidResponse, MultiMap he final List errors = new ArrayList<>(); final List bidderBids = bidResponse.getSeatbid().stream() .filter(Objects::nonNull) - .map(SeatBid::getBid) - .filter(Objects::nonNull) - .flatMap(Collection::stream) - .map(bid -> bidderBid(bid, bidResponse.getCur(), markupType, headers, errors)) + .flatMap(seatBid -> CollectionUtils.emptyIfNull(seatBid.getBid()).stream() + .filter(Objects::nonNull) + .map(bid -> BidderBid.of(seatBid.getSeat(), + bidderBid(bid, bidResponse.getCur(), markupType, headers, errors)))) .filter(Objects::nonNull) .toList(); diff --git a/src/main/java/org/prebid/server/bidder/smartadserver/SmartadserverBidder.java b/src/main/java/org/prebid/server/bidder/smartadserver/SmartadserverBidder.java index 2a27ba28079..d6864079e0c 100644 --- a/src/main/java/org/prebid/server/bidder/smartadserver/SmartadserverBidder.java +++ b/src/main/java/org/prebid/server/bidder/smartadserver/SmartadserverBidder.java @@ -7,7 +7,6 @@ import com.iab.openrtb.request.Publisher; import com.iab.openrtb.request.Site; import com.iab.openrtb.response.BidResponse; -import com.iab.openrtb.response.SeatBid; import org.apache.commons.collections4.CollectionUtils; import org.prebid.server.bidder.Bidder; import org.prebid.server.bidder.model.BidderBid; @@ -26,7 +25,6 @@ import org.prebid.server.util.Uri; import java.util.ArrayList; -import java.util.Collection; import java.util.Collections; import java.util.LinkedHashMap; import java.util.List; @@ -139,10 +137,11 @@ private Result> extractBids(BidResponse bidResponse) { final List errors = new ArrayList<>(); final List bidderBids = bidResponse.getSeatbid().stream() .filter(Objects::nonNull) - .map(SeatBid::getBid) - .filter(Objects::nonNull) - .flatMap(Collection::stream) - .map(bid -> BidderBid.of(bid, getBidTypeFromMarkupType(bid.getMtype()), bidResponse.getCur())) + .filter(seatBid -> seatBid.getBid() != null) + .flatMap(seatBid -> seatBid.getBid().stream() + .filter(Objects::nonNull) + .map(bid -> BidderBid.of(seatBid.getSeat(), + bid, getBidTypeFromMarkupType(bid.getMtype()), bidResponse.getCur()))) .toList(); return Result.of(bidderBids, errors); } diff --git a/src/main/java/org/prebid/server/bidder/smartrtb/SmartrtbBidder.java b/src/main/java/org/prebid/server/bidder/smartrtb/SmartrtbBidder.java index 33e94fc8472..406cb45c00b 100644 --- a/src/main/java/org/prebid/server/bidder/smartrtb/SmartrtbBidder.java +++ b/src/main/java/org/prebid/server/bidder/smartrtb/SmartrtbBidder.java @@ -141,7 +141,7 @@ public Result> makeBids(BidderCall httpCall, BidRequ "Unsupported creative type %s.".formatted(smartrtbResponseExt.getFormat()))); } final Bid updatedBid = bid.toBuilder().ext(null).build(); - final BidderBid bidderBid = BidderBid.of(updatedBid, bidType, bidResponse.getCur()); + final BidderBid bidderBid = BidderBid.of(seatBid.getSeat(), updatedBid, bidType, bidResponse.getCur()); bidderBids.add(bidderBid); } } diff --git a/src/main/java/org/prebid/server/bidder/smartx/SmartxBidder.java b/src/main/java/org/prebid/server/bidder/smartx/SmartxBidder.java index 5841a4e039a..827b0505c90 100644 --- a/src/main/java/org/prebid/server/bidder/smartx/SmartxBidder.java +++ b/src/main/java/org/prebid/server/bidder/smartx/SmartxBidder.java @@ -3,7 +3,6 @@ import com.iab.openrtb.request.BidRequest; import com.iab.openrtb.request.Device; import com.iab.openrtb.response.BidResponse; -import com.iab.openrtb.response.SeatBid; import io.vertx.core.MultiMap; import org.apache.commons.collections4.CollectionUtils; import org.prebid.server.bidder.Bidder; @@ -20,7 +19,6 @@ import org.prebid.server.util.HttpUtil; import org.prebid.server.util.ObjectUtil; -import java.util.Collection; import java.util.List; import java.util.Objects; @@ -82,10 +80,10 @@ private static List extractBids(BidResponse bidResponse) { private static List bidsFromResponse(BidResponse bidResponse) { return bidResponse.getSeatbid().stream() .filter(Objects::nonNull) - .map(SeatBid::getBid) - .filter(Objects::nonNull) - .flatMap(Collection::stream) - .map(bid -> BidderBid.of(bid, BidType.video, bidResponse.getCur())) + .flatMap(seatBid -> CollectionUtils.emptyIfNull(seatBid.getBid()).stream() + .filter(Objects::nonNull) + .map(bid -> BidderBid.of(seatBid.getSeat(), + bid, BidType.video, bidResponse.getCur()))) .toList(); } } diff --git a/src/main/java/org/prebid/server/bidder/smilewanted/SmileWantedBidder.java b/src/main/java/org/prebid/server/bidder/smilewanted/SmileWantedBidder.java index e75601bf389..877cb88a40e 100644 --- a/src/main/java/org/prebid/server/bidder/smilewanted/SmileWantedBidder.java +++ b/src/main/java/org/prebid/server/bidder/smilewanted/SmileWantedBidder.java @@ -99,9 +99,10 @@ private static List extractBids(BidRequest bidRequest, BidResponse bi private static List bidsFromResponse(BidRequest bidRequest, BidResponse bidResponse) { final SeatBid firstSeatBid = bidResponse.getSeatbid().getFirst(); - return CollectionUtils.emptyIfNull(firstSeatBid.getBid()).stream() + return CollectionUtils.emptyIfNull(firstSeatBid == null ? null : firstSeatBid.getBid()).stream() .filter(Objects::nonNull) - .map(bid -> BidderBid.of(bid, getBidType(bid.getImpid(), bidRequest.getImp()), bidResponse.getCur())) + .map(bid -> BidderBid.of(firstSeatBid.getSeat(), bid, + getBidType(bid.getImpid(), bidRequest.getImp()), bidResponse.getCur())) .toList(); } diff --git a/src/main/java/org/prebid/server/bidder/smoot/SmootBidder.java b/src/main/java/org/prebid/server/bidder/smoot/SmootBidder.java index ec054d9982d..67288651198 100644 --- a/src/main/java/org/prebid/server/bidder/smoot/SmootBidder.java +++ b/src/main/java/org/prebid/server/bidder/smoot/SmootBidder.java @@ -5,7 +5,6 @@ import com.iab.openrtb.request.Imp; import com.iab.openrtb.response.Bid; import com.iab.openrtb.response.BidResponse; -import com.iab.openrtb.response.SeatBid; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.StringUtils; import org.prebid.server.bidder.Bidder; @@ -24,7 +23,6 @@ import org.prebid.server.util.HttpUtil; import java.util.ArrayList; -import java.util.Collection; import java.util.Collections; import java.util.List; import java.util.Objects; @@ -97,11 +95,10 @@ private static List extractBids(BidResponse bidResponse) { } return bidResponse.getSeatbid().stream() .filter(Objects::nonNull) - .map(SeatBid::getBid) - .filter(Objects::nonNull) - .flatMap(Collection::stream) - .filter(Objects::nonNull) - .map(bid -> BidderBid.of(bid, getBidType(bid), bidResponse.getCur())) + .flatMap(seatBid -> CollectionUtils.emptyIfNull(seatBid.getBid()).stream() + .filter(Objects::nonNull) + .map(bid -> BidderBid.of(seatBid.getSeat(), + bid, getBidType(bid), bidResponse.getCur()))) .toList(); } diff --git a/src/main/java/org/prebid/server/bidder/smrtconnect/SmrtconnectBidder.java b/src/main/java/org/prebid/server/bidder/smrtconnect/SmrtconnectBidder.java index ce20fbf7cce..b0eb46eb507 100644 --- a/src/main/java/org/prebid/server/bidder/smrtconnect/SmrtconnectBidder.java +++ b/src/main/java/org/prebid/server/bidder/smrtconnect/SmrtconnectBidder.java @@ -4,7 +4,6 @@ import com.iab.openrtb.request.BidRequest; import com.iab.openrtb.request.Imp; import com.iab.openrtb.response.BidResponse; -import com.iab.openrtb.response.SeatBid; import io.vertx.core.http.HttpMethod; import org.apache.commons.collections4.CollectionUtils; import org.prebid.server.bidder.Bidder; @@ -23,7 +22,6 @@ import org.prebid.server.util.HttpUtil; import org.prebid.server.util.Uri; -import java.util.Collection; import java.util.Collections; import java.util.List; import java.util.Objects; @@ -92,10 +90,10 @@ private static List extractBids(BidResponse bidResponse) { private static List bidsFromResponse(BidResponse bidResponse) { return bidResponse.getSeatbid().stream() .filter(Objects::nonNull) - .map(SeatBid::getBid) - .filter(Objects::nonNull) - .flatMap(Collection::stream) - .map(bid -> BidderBid.of(bid, getBidType(bid.getMtype()), bidResponse.getCur())) + .flatMap(seatBid -> CollectionUtils.emptyIfNull(seatBid.getBid()).stream() + .filter(Objects::nonNull) + .map(bid -> BidderBid.of(seatBid.getSeat(), + bid, getBidType(bid.getMtype()), bidResponse.getCur()))) .toList(); } diff --git a/src/main/java/org/prebid/server/bidder/sonobi/SonobiBidder.java b/src/main/java/org/prebid/server/bidder/sonobi/SonobiBidder.java index 51ba794f3f0..d62db0b7bd6 100644 --- a/src/main/java/org/prebid/server/bidder/sonobi/SonobiBidder.java +++ b/src/main/java/org/prebid/server/bidder/sonobi/SonobiBidder.java @@ -4,7 +4,6 @@ import com.iab.openrtb.request.BidRequest; import com.iab.openrtb.request.Imp; import com.iab.openrtb.response.BidResponse; -import com.iab.openrtb.response.SeatBid; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.Strings; @@ -27,7 +26,6 @@ import java.math.BigDecimal; import java.util.ArrayList; -import java.util.Collection; import java.util.Collections; import java.util.List; import java.util.Objects; @@ -131,11 +129,10 @@ private static List extractBids(BidRequest bidRequest, return bidResponse.getSeatbid().stream() .filter(Objects::nonNull) - .map(SeatBid::getBid) - .filter(Objects::nonNull) - .flatMap(Collection::stream) - .filter(Objects::nonNull) - .map(bid -> BidderBid.of(bid, resolveBidType(bid.getImpid(), bidRequest.getImp()), BIDDER_CURRENCY)) + .flatMap(seatBid -> CollectionUtils.emptyIfNull(seatBid.getBid()).stream() + .filter(Objects::nonNull) + .map(bid -> BidderBid.of(seatBid.getSeat(), + bid, resolveBidType(bid.getImpid(), bidRequest.getImp()), BIDDER_CURRENCY))) .toList(); } diff --git a/src/main/java/org/prebid/server/bidder/sovrn/SovrnBidder.java b/src/main/java/org/prebid/server/bidder/sovrn/SovrnBidder.java index 568e52a5c6a..d0a325f8780 100644 --- a/src/main/java/org/prebid/server/bidder/sovrn/SovrnBidder.java +++ b/src/main/java/org/prebid/server/bidder/sovrn/SovrnBidder.java @@ -9,7 +9,6 @@ import com.iab.openrtb.request.Video; import com.iab.openrtb.response.Bid; import com.iab.openrtb.response.BidResponse; -import com.iab.openrtb.response.SeatBid; import io.vertx.core.MultiMap; import io.vertx.core.http.Cookie; import io.vertx.core.http.HttpMethod; @@ -33,7 +32,6 @@ import java.math.BigDecimal; import java.util.ArrayList; -import java.util.Collection; import java.util.Collections; import java.util.List; import java.util.Objects; @@ -176,13 +174,13 @@ private static List bidsFromResponse(BidResponse bidResponse, return bidResponse.getSeatbid().stream() .filter(Objects::nonNull) - .map(SeatBid::getBid) - .filter(Objects::nonNull) - .flatMap(Collection::stream) - .map(bid -> makeBidderBid( - bid, - resolveBidType(bid.getImpid(), bidRequest.getImp(), bidderErrors), - bidResponse.getCur())) + .flatMap(seatBid -> CollectionUtils.emptyIfNull(seatBid.getBid()).stream() + .filter(Objects::nonNull) + .map(bid -> BidderBid.of(seatBid.getSeat(), + makeBidderBid( + bid, + resolveBidType(bid.getImpid(), bidRequest.getImp(), bidderErrors), + bidResponse.getCur())))) .filter(Objects::nonNull) .toList(); } diff --git a/src/main/java/org/prebid/server/bidder/sovrnxsp/SovrnXspBidder.java b/src/main/java/org/prebid/server/bidder/sovrnxsp/SovrnXspBidder.java index 5637be0a2fa..ea5362aeefc 100644 --- a/src/main/java/org/prebid/server/bidder/sovrnxsp/SovrnXspBidder.java +++ b/src/main/java/org/prebid/server/bidder/sovrnxsp/SovrnXspBidder.java @@ -151,8 +151,11 @@ private List extractBids(BidResponse bidResponse, List e } return bidResponse.getSeatbid() .stream() - .flatMap(seatBid -> Optional.ofNullable(seatBid.getBid()).orElse(List.of()).stream()) - .map(bid -> makeBid(bid, bidResponse.getCur(), errors)) + .filter(java.util.Objects::nonNull) + .flatMap(seatBid -> Optional.ofNullable(seatBid.getBid()).orElse(List.of()).stream() + .filter(java.util.Objects::nonNull) + .map(bid -> BidderBid.of(seatBid.getSeat(), + makeBid(bid, bidResponse.getCur(), errors)))) .filter(Objects::nonNull) .toList(); } diff --git a/src/main/java/org/prebid/server/bidder/sparteo/SparteoBidder.java b/src/main/java/org/prebid/server/bidder/sparteo/SparteoBidder.java index a6d79592506..e56e03632ee 100644 --- a/src/main/java/org/prebid/server/bidder/sparteo/SparteoBidder.java +++ b/src/main/java/org/prebid/server/bidder/sparteo/SparteoBidder.java @@ -11,7 +11,6 @@ import com.iab.openrtb.request.Site; import com.iab.openrtb.response.Bid; import com.iab.openrtb.response.BidResponse; -import com.iab.openrtb.response.SeatBid; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.StringUtils; import org.prebid.server.bidder.Bidder; @@ -33,7 +32,6 @@ import org.prebid.server.util.Uri; import java.util.ArrayList; -import java.util.Collection; import java.util.Collections; import java.util.List; import java.util.Objects; @@ -247,11 +245,10 @@ private List extractBids(BidResponse bidResponse, List e return bidResponse.getSeatbid().stream() .filter(Objects::nonNull) - .map(SeatBid::getBid) - .filter(Objects::nonNull) - .flatMap(Collection::stream) - .filter(Objects::nonNull) - .map(bid -> toBidderBid(bid, bidResponse.getCur(), errors)) + .flatMap(seatBid -> CollectionUtils.emptyIfNull(seatBid.getBid()).stream() + .filter(Objects::nonNull) + .map(bid -> BidderBid.of(seatBid.getSeat(), + toBidderBid(bid, bidResponse.getCur(), errors)))) .filter(Objects::nonNull) .toList(); } diff --git a/src/main/java/org/prebid/server/bidder/sspbc/SspbcBidder.java b/src/main/java/org/prebid/server/bidder/sspbc/SspbcBidder.java index 615ba3dbc7c..adae049a655 100644 --- a/src/main/java/org/prebid/server/bidder/sspbc/SspbcBidder.java +++ b/src/main/java/org/prebid/server/bidder/sspbc/SspbcBidder.java @@ -3,7 +3,6 @@ import com.iab.openrtb.request.BidRequest; import com.iab.openrtb.response.Bid; import com.iab.openrtb.response.BidResponse; -import com.iab.openrtb.response.SeatBid; import io.vertx.core.http.HttpMethod; import org.apache.commons.collections4.CollectionUtils; import org.prebid.server.bidder.Bidder; @@ -20,7 +19,6 @@ import org.prebid.server.util.HttpUtil; import org.prebid.server.util.Uri; -import java.util.Collection; import java.util.Collections; import java.util.List; import java.util.Objects; @@ -75,11 +73,10 @@ private List extractBids(BidResponse bidResponse) { return bidResponse.getSeatbid().stream() .filter(Objects::nonNull) - .map(SeatBid::getBid) - .filter(Objects::nonNull) - .flatMap(Collection::stream) - .filter(Objects::nonNull) - .map(bid -> BidderBid.of(bid, getBidType(bid), bidResponse.getCur())) + .flatMap(seatBid -> CollectionUtils.emptyIfNull(seatBid.getBid()).stream() + .filter(Objects::nonNull) + .map(bid -> BidderBid.of(seatBid.getSeat(), + bid, getBidType(bid), bidResponse.getCur()))) .toList(); } diff --git a/src/main/java/org/prebid/server/bidder/startio/StartioBidder.java b/src/main/java/org/prebid/server/bidder/startio/StartioBidder.java index 2086ba7697b..8e2d99ba673 100644 --- a/src/main/java/org/prebid/server/bidder/startio/StartioBidder.java +++ b/src/main/java/org/prebid/server/bidder/startio/StartioBidder.java @@ -8,7 +8,6 @@ import com.iab.openrtb.request.Site; import com.iab.openrtb.response.Bid; import com.iab.openrtb.response.BidResponse; -import com.iab.openrtb.response.SeatBid; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.StringUtils; import org.prebid.server.bidder.Bidder; @@ -24,7 +23,6 @@ import org.prebid.server.util.HttpUtil; import java.util.ArrayList; -import java.util.Collection; import java.util.Collections; import java.util.List; import java.util.Objects; @@ -111,11 +109,10 @@ private static List extractBids(BidResponse bidResponse, List bidsFromResponse(BidResponse bidResponse, List errors) { return bidResponse.getSeatbid().stream() .filter(Objects::nonNull) - .map(SeatBid::getBid) - .filter(Objects::nonNull) - .flatMap(Collection::stream) - .filter(Objects::nonNull) - .map(bid -> constructBidderBid(bid, bidResponse.getCur(), errors)) + .flatMap(seatBid -> CollectionUtils.emptyIfNull(seatBid.getBid()).stream() + .filter(Objects::nonNull) + .map(bid -> BidderBid.of(seatBid.getSeat(), + constructBidderBid(bid, bidResponse.getCur(), errors)))) .filter(Objects::nonNull) .toList(); } diff --git a/src/main/java/org/prebid/server/bidder/taboola/TaboolaBidder.java b/src/main/java/org/prebid/server/bidder/taboola/TaboolaBidder.java index d9589d18744..01ce131d4e7 100644 --- a/src/main/java/org/prebid/server/bidder/taboola/TaboolaBidder.java +++ b/src/main/java/org/prebid/server/bidder/taboola/TaboolaBidder.java @@ -10,7 +10,6 @@ import com.iab.openrtb.request.Site; import com.iab.openrtb.response.Bid; import com.iab.openrtb.response.BidResponse; -import com.iab.openrtb.response.SeatBid; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.Strings; @@ -34,7 +33,6 @@ import java.math.BigDecimal; import java.util.ArrayList; -import java.util.Collection; import java.util.Collections; import java.util.HashMap; import java.util.List; @@ -258,11 +256,10 @@ private List bidsFromResponse(BidRequest bidRequest, return bidResponse.getSeatbid().stream() .filter(Objects::nonNull) - .map(SeatBid::getBid) - .filter(Objects::nonNull) - .flatMap(Collection::stream) - .filter(Objects::nonNull) - .map(bid -> resolveBidderBid(bidResponse.getCur(), bidRequest.getImp(), bid, errors)) + .flatMap(seatBid -> CollectionUtils.emptyIfNull(seatBid.getBid()).stream() + .filter(Objects::nonNull) + .map(bid -> BidderBid.of(seatBid.getSeat(), + resolveBidderBid(bidResponse.getCur(), bidRequest.getImp(), bid, errors)))) .filter(Objects::nonNull) .toList(); } diff --git a/src/main/java/org/prebid/server/bidder/teads/TeadsBidder.java b/src/main/java/org/prebid/server/bidder/teads/TeadsBidder.java index a16c0198e94..b94011e664b 100644 --- a/src/main/java/org/prebid/server/bidder/teads/TeadsBidder.java +++ b/src/main/java/org/prebid/server/bidder/teads/TeadsBidder.java @@ -131,8 +131,11 @@ private List extractBids(BidRequest bidRequest, BidResponse bidRespon return bidResponse.getSeatbid() .stream() - .flatMap(seatBid -> Optional.ofNullable(seatBid.getBid()).orElse(List.of()).stream()) - .map(bid -> makeBid(impMap, bid, bidResponse.getCur())) + .filter(java.util.Objects::nonNull) + .flatMap(seatBid -> Optional.ofNullable(seatBid.getBid()).orElse(List.of()).stream() + .filter(java.util.Objects::nonNull) + .map(bid -> BidderBid.of(seatBid.getSeat(), + makeBid(impMap, bid, bidResponse.getCur())))) .toList(); } diff --git a/src/main/java/org/prebid/server/bidder/teal/TealBidder.java b/src/main/java/org/prebid/server/bidder/teal/TealBidder.java index 56b51a13f31..c677b2feb2e 100644 --- a/src/main/java/org/prebid/server/bidder/teal/TealBidder.java +++ b/src/main/java/org/prebid/server/bidder/teal/TealBidder.java @@ -10,7 +10,6 @@ import com.iab.openrtb.request.Site; import com.iab.openrtb.response.Bid; import com.iab.openrtb.response.BidResponse; -import com.iab.openrtb.response.SeatBid; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.ObjectUtils; import org.apache.commons.lang3.StringUtils; @@ -31,7 +30,6 @@ import org.prebid.server.util.HttpUtil; import java.util.ArrayList; -import java.util.Collection; import java.util.Collections; import java.util.List; import java.util.Objects; @@ -174,11 +172,10 @@ private static List extractBids(BidRequest bidRequest, BidResponse bi private static List bidsFromResponse(BidRequest bidRequest, BidResponse bidResponse) { return bidResponse.getSeatbid().stream() .filter(Objects::nonNull) - .map(SeatBid::getBid) - .filter(Objects::nonNull) - .flatMap(Collection::stream) - .filter(Objects::nonNull) - .map(bid -> BidderBid.of(bid, getBidType(bid, bidRequest.getImp()), bidResponse.getCur())) + .flatMap(seatBid -> CollectionUtils.emptyIfNull(seatBid.getBid()).stream() + .filter(Objects::nonNull) + .map(bid -> BidderBid.of( + seatBid.getSeat(), bid, getBidType(bid, bidRequest.getImp()), bidResponse.getCur()))) .toList(); } diff --git a/src/main/java/org/prebid/server/bidder/teqblaze/TeqblazeBidder.java b/src/main/java/org/prebid/server/bidder/teqblaze/TeqblazeBidder.java index 67401fecf12..c9b83168688 100644 --- a/src/main/java/org/prebid/server/bidder/teqblaze/TeqblazeBidder.java +++ b/src/main/java/org/prebid/server/bidder/teqblaze/TeqblazeBidder.java @@ -6,7 +6,6 @@ import com.iab.openrtb.request.Imp; import com.iab.openrtb.response.Bid; import com.iab.openrtb.response.BidResponse; -import com.iab.openrtb.response.SeatBid; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.StringUtils; import org.prebid.server.bidder.Bidder; @@ -26,7 +25,6 @@ import org.prebid.server.util.HttpUtil; import java.util.ArrayList; -import java.util.Collection; import java.util.Collections; import java.util.List; import java.util.Objects; @@ -120,11 +118,10 @@ private List extractBids(BidResponse bidResponse) { return bidResponse.getSeatbid().stream() .filter(Objects::nonNull) - .map(SeatBid::getBid) - .filter(Objects::nonNull) - .flatMap(Collection::stream) - .filter(Objects::nonNull) - .map(bid -> BidderBid.of(bid, getBidType(bid), bidResponse.getCur())) + .flatMap(seatBid -> CollectionUtils.emptyIfNull(seatBid.getBid()).stream() + .filter(Objects::nonNull) + .map(bid -> BidderBid.of(seatBid.getSeat(), + bid, getBidType(bid), bidResponse.getCur()))) .toList(); } diff --git a/src/main/java/org/prebid/server/bidder/theadx/TheadxBidder.java b/src/main/java/org/prebid/server/bidder/theadx/TheadxBidder.java index d144eeca773..82392214123 100644 --- a/src/main/java/org/prebid/server/bidder/theadx/TheadxBidder.java +++ b/src/main/java/org/prebid/server/bidder/theadx/TheadxBidder.java @@ -7,9 +7,9 @@ import com.iab.openrtb.request.Imp; import com.iab.openrtb.response.Bid; import com.iab.openrtb.response.BidResponse; -import com.iab.openrtb.response.SeatBid; import io.vertx.core.MultiMap; import io.vertx.core.http.HttpMethod; +import org.apache.commons.collections4.CollectionUtils; import org.prebid.server.bidder.Bidder; import org.prebid.server.bidder.model.BidderBid; import org.prebid.server.bidder.model.BidderCall; @@ -27,7 +27,6 @@ import org.prebid.server.util.HttpUtil; import java.util.ArrayList; -import java.util.Collection; import java.util.Collections; import java.util.List; import java.util.Objects; @@ -130,10 +129,10 @@ private List extractBids(BidResponse bidResponse, List e private List bidsFromResponse(BidResponse bidResponse, List errors) { return bidResponse.getSeatbid().stream() .filter(Objects::nonNull) - .map(SeatBid::getBid) - .filter(Objects::nonNull) - .flatMap(Collection::stream) - .map(bid -> makeBid(bid, bidResponse.getCur(), errors)) + .flatMap(seatBid -> CollectionUtils.emptyIfNull(seatBid.getBid()).stream() + .filter(Objects::nonNull) + .map(bid -> BidderBid.of(seatBid.getSeat(), + makeBid(bid, bidResponse.getCur(), errors)))) .filter(Objects::nonNull) .toList(); } diff --git a/src/main/java/org/prebid/server/bidder/thetradedesk/TheTradeDeskBidder.java b/src/main/java/org/prebid/server/bidder/thetradedesk/TheTradeDeskBidder.java index 296217fc13b..bfd16aa08a8 100644 --- a/src/main/java/org/prebid/server/bidder/thetradedesk/TheTradeDeskBidder.java +++ b/src/main/java/org/prebid/server/bidder/thetradedesk/TheTradeDeskBidder.java @@ -10,7 +10,6 @@ import com.iab.openrtb.request.Site; import com.iab.openrtb.response.Bid; import com.iab.openrtb.response.BidResponse; -import com.iab.openrtb.response.SeatBid; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.ObjectUtils; import org.apache.commons.lang3.StringUtils; @@ -32,7 +31,6 @@ import java.math.BigDecimal; import java.util.ArrayList; -import java.util.Collection; import java.util.Collections; import java.util.List; import java.util.Objects; @@ -195,21 +193,20 @@ private static List extractBids(BidResponse bidResponse, List makeBid(bid, bidResponse.getCur(), errors)) + .filter(seatBid -> seatBid.getBid() != null) + .flatMap(seatBid -> seatBid.getBid().stream() + .filter(Objects::nonNull) + .map(bid -> makeBid(bid, bidResponse.getCur(), errors, seatBid.getSeat()))) .filter(Objects::nonNull) .toList(); } - private static BidderBid makeBid(Bid bid, String currency, List errors) { + private static BidderBid makeBid(Bid bid, String currency, List errors, String originalSeat) { final BidType bidType = getBidType(bid, errors); - return bidType != null ? BidderBid.of(resolvePriceMacros(bid), bidType, currency) : null; + return bidType != null ? BidderBid.of(originalSeat, + resolvePriceMacros(bid), bidType, currency) : null; } private static BidType getBidType(Bid bid, List errors) { diff --git a/src/main/java/org/prebid/server/bidder/thirtythreeacross/ThirtyThreeAcrossBidder.java b/src/main/java/org/prebid/server/bidder/thirtythreeacross/ThirtyThreeAcrossBidder.java index 76642c100b7..7118ea72220 100644 --- a/src/main/java/org/prebid/server/bidder/thirtythreeacross/ThirtyThreeAcrossBidder.java +++ b/src/main/java/org/prebid/server/bidder/thirtythreeacross/ThirtyThreeAcrossBidder.java @@ -8,7 +8,6 @@ import com.iab.openrtb.request.Video; import com.iab.openrtb.response.Bid; import com.iab.openrtb.response.BidResponse; -import com.iab.openrtb.response.SeatBid; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.collections4.ListUtils; import org.apache.commons.lang3.StringUtils; @@ -34,7 +33,6 @@ import org.prebid.server.util.ObjectUtil; import java.util.ArrayList; -import java.util.Collection; import java.util.Collections; import java.util.HashMap; import java.util.List; @@ -199,14 +197,14 @@ private static List extractBids(BidResponse bidResponse) { if (bidResponse == null || CollectionUtils.isEmpty(bidResponse.getSeatbid())) { return Collections.emptyList(); } - return bidResponse.getSeatbid().stream() .filter(Objects::nonNull) - .map(SeatBid::getBid) - .filter(Objects::nonNull) - .flatMap(Collection::stream) + .filter(seatBid -> seatBid.getBid() != null) + .flatMap(seatBid -> seatBid.getBid().stream() + .filter(Objects::nonNull) + .map(bid -> BidderBid.of( + seatBid.getSeat(), bid, getBidType(bid), bidResponse.getCur()))) .filter(Objects::nonNull) - .map(bid -> BidderBid.of(bid, getBidType(bid), bidResponse.getCur())) .toList(); } diff --git a/src/main/java/org/prebid/server/bidder/tpmn/TpmnBidder.java b/src/main/java/org/prebid/server/bidder/tpmn/TpmnBidder.java index 4544fda8cf4..7eccd12168a 100644 --- a/src/main/java/org/prebid/server/bidder/tpmn/TpmnBidder.java +++ b/src/main/java/org/prebid/server/bidder/tpmn/TpmnBidder.java @@ -4,7 +4,6 @@ import com.iab.openrtb.request.Imp; import com.iab.openrtb.response.Bid; import com.iab.openrtb.response.BidResponse; -import com.iab.openrtb.response.SeatBid; import org.apache.commons.collections4.CollectionUtils; import org.prebid.server.bidder.Bidder; import org.prebid.server.bidder.model.BidderBid; @@ -23,7 +22,6 @@ import java.math.BigDecimal; import java.util.ArrayList; -import java.util.Collection; import java.util.Collections; import java.util.List; import java.util.Objects; @@ -119,11 +117,10 @@ private static List extractBids(BidResponse bidResponse, List makeBidderBid(bid, bidResponse.getCur(), errors)) + .flatMap(seatBid -> CollectionUtils.emptyIfNull(seatBid.getBid()).stream() + .filter(Objects::nonNull) + .map(bid -> BidderBid.of(seatBid.getSeat(), + makeBidderBid(bid, bidResponse.getCur(), errors)))) .filter(Objects::nonNull) .toList(); } diff --git a/src/main/java/org/prebid/server/bidder/triplelift/TripleliftBidder.java b/src/main/java/org/prebid/server/bidder/triplelift/TripleliftBidder.java index e57108b2934..50db7544cf5 100644 --- a/src/main/java/org/prebid/server/bidder/triplelift/TripleliftBidder.java +++ b/src/main/java/org/prebid/server/bidder/triplelift/TripleliftBidder.java @@ -120,7 +120,7 @@ public Result> makeBids(BidderCall httpCall, BidRequ TripleliftResponseExt.class); final BidType bidType = getBidType(tripleliftResponseExt); - bidderBids.add(BidderBid.of(bid, bidType, bidResponse.getCur())); + bidderBids.add(BidderBid.of(seatBid.getSeat(), bid, bidType, bidResponse.getCur())); } catch (JsonProcessingException e) { errors.add(BidderError.badServerResponse(e.getMessage())); } diff --git a/src/main/java/org/prebid/server/bidder/tripleliftnative/TripleliftNativeBidder.java b/src/main/java/org/prebid/server/bidder/tripleliftnative/TripleliftNativeBidder.java index b7ff310a7cf..078c1427c6f 100644 --- a/src/main/java/org/prebid/server/bidder/tripleliftnative/TripleliftNativeBidder.java +++ b/src/main/java/org/prebid/server/bidder/tripleliftnative/TripleliftNativeBidder.java @@ -6,7 +6,6 @@ import com.iab.openrtb.request.Publisher; import com.iab.openrtb.request.Site; import com.iab.openrtb.response.BidResponse; -import com.iab.openrtb.response.SeatBid; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.StringUtils; import org.prebid.server.bidder.Bidder; @@ -27,7 +26,6 @@ import java.math.BigDecimal; import java.util.ArrayList; -import java.util.Collection; import java.util.Collections; import java.util.List; import java.util.Objects; @@ -179,10 +177,11 @@ private static List extractBids(BidResponse bidResponse) { private static List bidsFromResponse(BidResponse bidResponse) { return bidResponse.getSeatbid().stream() .filter(Objects::nonNull) - .map(SeatBid::getBid) - .filter(Objects::nonNull) - .flatMap(Collection::stream) - .map(bid -> BidderBid.of(bid, BidType.xNative, bidResponse.getCur())) + .filter(seatBid -> seatBid.getBid() != null) + .flatMap(seatBid -> seatBid.getBid().stream() + .filter(Objects::nonNull) + .map(bid -> BidderBid.of( + seatBid.getSeat(), bid, BidType.xNative, bidResponse.getCur()))) .toList(); } } diff --git a/src/main/java/org/prebid/server/bidder/trustedstack/TrustedstackBidder.java b/src/main/java/org/prebid/server/bidder/trustedstack/TrustedstackBidder.java index 14d03dfc9a8..9a60917e4c5 100644 --- a/src/main/java/org/prebid/server/bidder/trustedstack/TrustedstackBidder.java +++ b/src/main/java/org/prebid/server/bidder/trustedstack/TrustedstackBidder.java @@ -4,7 +4,6 @@ import com.iab.openrtb.request.Imp; import com.iab.openrtb.response.Bid; import com.iab.openrtb.response.BidResponse; -import com.iab.openrtb.response.SeatBid; import org.apache.commons.collections4.CollectionUtils; import org.prebid.server.bidder.Bidder; import org.prebid.server.bidder.model.BidderBid; @@ -20,7 +19,6 @@ import org.prebid.server.util.Uri; import java.util.ArrayList; -import java.util.Collection; import java.util.Collections; import java.util.List; import java.util.Objects; @@ -66,11 +64,10 @@ private static List extractBids(BidRequest bidRequest, BidResponse bi final String currency = bidResponse.getCur(); return bidResponse.getSeatbid().stream() .filter(Objects::nonNull) - .map(SeatBid::getBid) - .filter(Objects::nonNull) - .flatMap(Collection::stream) - .filter(Objects::nonNull) - .map(bid -> makeBidderBid(bid, bidRequest.getImp(), currency, errors)) + .flatMap(seatBid -> CollectionUtils.emptyIfNull(seatBid.getBid()).stream() + .filter(Objects::nonNull) + .map(bid -> BidderBid.of(seatBid.getSeat(), + makeBidderBid(bid, bidRequest.getImp(), currency, errors)))) .filter(Objects::nonNull) .toList(); } diff --git a/src/main/java/org/prebid/server/bidder/trustx/TrustxBidder.java b/src/main/java/org/prebid/server/bidder/trustx/TrustxBidder.java index a74a88b1e3e..62b6ddf722e 100644 --- a/src/main/java/org/prebid/server/bidder/trustx/TrustxBidder.java +++ b/src/main/java/org/prebid/server/bidder/trustx/TrustxBidder.java @@ -8,7 +8,6 @@ import com.iab.openrtb.request.Site; import com.iab.openrtb.response.Bid; import com.iab.openrtb.response.BidResponse; -import com.iab.openrtb.response.SeatBid; import io.vertx.core.MultiMap; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.StringUtils; @@ -138,11 +137,10 @@ private Result> bidsFromResponse(BidResponse bidResponse) { .filter(Objects::nonNull) .flatMap(Collection::stream) .filter(Objects::nonNull) - .map(SeatBid::getBid) - .filter(Objects::nonNull) - .flatMap(Collection::stream) - .filter(Objects::nonNull) - .map(bid -> makeBidderBid(bid, errors)) + .flatMap(seatBid -> CollectionUtils.emptyIfNull(seatBid.getBid()).stream() + .filter(Objects::nonNull) + .map(bid -> BidderBid.of(seatBid.getSeat(), + makeBidderBid(bid, errors)))) .filter(Objects::nonNull) .toList(); diff --git a/src/main/java/org/prebid/server/bidder/ucfunnel/UcfunnelBidder.java b/src/main/java/org/prebid/server/bidder/ucfunnel/UcfunnelBidder.java index 009a98e1e8a..978a9ae5087 100644 --- a/src/main/java/org/prebid/server/bidder/ucfunnel/UcfunnelBidder.java +++ b/src/main/java/org/prebid/server/bidder/ucfunnel/UcfunnelBidder.java @@ -87,11 +87,14 @@ public Result> makeBids(BidderCall httpCall, BidRequ } final List bidderBids = new ArrayList<>(); - for (SeatBid seatBid : bidResponse.getSeatbid()) { - for (Bid bid : seatBid.getBid()) { + for (SeatBid seatBid : CollectionUtils.emptyIfNull(bidResponse.getSeatbid())) { + for (Bid bid : CollectionUtils.emptyIfNull(seatBid == null ? null : seatBid.getBid())) { + if (seatBid == null || bid == null) { + continue; + } final BidType bidType = getBidType(bid.getImpid(), bidRequest.getImp()); if (bidType == BidType.banner || bidType == BidType.video) { - final BidderBid bidderBid = BidderBid.of(bid, bidType, bidResponse.getCur()); + final BidderBid bidderBid = BidderBid.of(seatBid.getSeat(), bid, bidType, bidResponse.getCur()); bidderBids.add(bidderBid); } } diff --git a/src/main/java/org/prebid/server/bidder/undertone/UndertoneBidder.java b/src/main/java/org/prebid/server/bidder/undertone/UndertoneBidder.java index 7deadcb9eb4..c998efce523 100644 --- a/src/main/java/org/prebid/server/bidder/undertone/UndertoneBidder.java +++ b/src/main/java/org/prebid/server/bidder/undertone/UndertoneBidder.java @@ -10,7 +10,6 @@ import com.iab.openrtb.request.Site; import com.iab.openrtb.response.Bid; import com.iab.openrtb.response.BidResponse; -import com.iab.openrtb.response.SeatBid; import io.vertx.core.http.HttpMethod; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.ObjectUtils; @@ -30,7 +29,6 @@ import org.prebid.server.proto.openrtb.ext.response.BidType; import org.prebid.server.util.HttpUtil; -import java.util.Collection; import java.util.Collections; import java.util.List; import java.util.Map; @@ -192,10 +190,11 @@ private List bidsFromResponse(BidRequest bidRequest, BidResponse bidR return bidResponse.getSeatbid() .stream() .filter(Objects::nonNull) - .map(SeatBid::getBid) - .filter(Objects::nonNull) - .flatMap(Collection::stream) - .map(bid -> BidderBid.of(bid, getBidType(bid, idImpMap), bidResponse.getCur())) + .filter(seatBid -> seatBid.getBid() != null) + .flatMap(seatBid -> seatBid.getBid().stream() + .filter(Objects::nonNull) + .map(bid -> BidderBid.of(seatBid.getSeat(), + bid, getBidType(bid, idImpMap), bidResponse.getCur()))) .toList(); } diff --git a/src/main/java/org/prebid/server/bidder/unicorn/UnicornBidder.java b/src/main/java/org/prebid/server/bidder/unicorn/UnicornBidder.java index db15d3e61e2..39a07eeb29f 100644 --- a/src/main/java/org/prebid/server/bidder/unicorn/UnicornBidder.java +++ b/src/main/java/org/prebid/server/bidder/unicorn/UnicornBidder.java @@ -12,7 +12,6 @@ import com.iab.openrtb.request.Regs; import com.iab.openrtb.request.Source; import com.iab.openrtb.response.BidResponse; -import com.iab.openrtb.response.SeatBid; import io.vertx.core.MultiMap; import io.vertx.core.http.HttpMethod; import org.apache.commons.collections4.CollectionUtils; @@ -35,7 +34,6 @@ import org.prebid.server.proto.openrtb.ext.response.BidType; import org.prebid.server.util.HttpUtil; -import java.util.Collection; import java.util.Collections; import java.util.List; import java.util.Objects; @@ -242,10 +240,10 @@ private static List extractBids(BidResponse bidResponse) { private static List bidsFromResponse(BidResponse bidResponse) { return bidResponse.getSeatbid().stream() .filter(Objects::nonNull) - .map(SeatBid::getBid) - .filter(Objects::nonNull) - .flatMap(Collection::stream) - .map(bid -> BidderBid.of(bid, BidType.banner, bidResponse.getCur())) + .flatMap(seatBid -> CollectionUtils.emptyIfNull(seatBid.getBid()).stream() + .filter(Objects::nonNull) + .map(bid -> BidderBid.of(seatBid.getSeat(), + bid, BidType.banner, bidResponse.getCur()))) .toList(); } } diff --git a/src/main/java/org/prebid/server/bidder/unruly/UnrulyBidder.java b/src/main/java/org/prebid/server/bidder/unruly/UnrulyBidder.java index feac7f16ab0..54b85df6229 100644 --- a/src/main/java/org/prebid/server/bidder/unruly/UnrulyBidder.java +++ b/src/main/java/org/prebid/server/bidder/unruly/UnrulyBidder.java @@ -7,7 +7,6 @@ import com.iab.openrtb.request.Imp; import com.iab.openrtb.response.Bid; import com.iab.openrtb.response.BidResponse; -import com.iab.openrtb.response.SeatBid; import org.apache.commons.collections4.CollectionUtils; import org.prebid.server.bidder.Bidder; import org.prebid.server.bidder.model.BidderBid; @@ -26,7 +25,6 @@ import org.prebid.server.util.HttpUtil; import java.util.ArrayList; -import java.util.Collection; import java.util.Collections; import java.util.List; import java.util.Objects; @@ -105,24 +103,27 @@ private List bidsFromResponse(BidRequest bidRequest, return bidResponse.getSeatbid().stream() .filter(Objects::nonNull) - .map(SeatBid::getBid) + .filter(seatBid -> seatBid.getBid() != null) + .flatMap(seatBid -> seatBid.getBid().stream() + .filter(Objects::nonNull) + .map(bid -> resolveBidderBid( + bid, bidResponse.getCur(), bidRequest.getImp(), errors, seatBid.getSeat()))) .filter(Objects::nonNull) - .flatMap(Collection::stream) - .filter(Objects::nonNull) - .map(bid -> resolveBidderBid(bid, bidResponse.getCur(), bidRequest.getImp(), errors)) .toList(); } - private BidderBid resolveBidderBid(Bid bid, String currency, List imps, List errors) { + private BidderBid resolveBidderBid(Bid bid, String currency, List imps, List errors, + String originalSeat) { try { final BidType bidType = getBidType(bid.getImpid(), imps); return BidderBid.of( + originalSeat, bidType == BidType.video ? resolveBid(bid) : bid, getBidType(bid.getImpid(), imps), currency); } catch (PreBidException e) { errors.add(BidderError.badServerResponse(e.getMessage())); - return BidderBid.of(bid, BidType.banner, currency); + return BidderBid.of(originalSeat, bid, BidType.banner, currency); } } diff --git a/src/main/java/org/prebid/server/bidder/vidazoo/VidazooBidder.java b/src/main/java/org/prebid/server/bidder/vidazoo/VidazooBidder.java index 6f925a731e8..dce10bf6b77 100644 --- a/src/main/java/org/prebid/server/bidder/vidazoo/VidazooBidder.java +++ b/src/main/java/org/prebid/server/bidder/vidazoo/VidazooBidder.java @@ -5,7 +5,6 @@ import com.iab.openrtb.request.Imp; import com.iab.openrtb.response.Bid; import com.iab.openrtb.response.BidResponse; -import com.iab.openrtb.response.SeatBid; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.StringUtils; import org.prebid.server.bidder.Bidder; @@ -24,7 +23,6 @@ import org.prebid.server.util.Uri; import java.util.ArrayList; -import java.util.Collection; import java.util.Collections; import java.util.List; import java.util.Objects; @@ -98,10 +96,10 @@ private static List extractBids(BidResponse bidResponse, List bidsFromResponse(BidResponse bidResponse, List errors) { return bidResponse.getSeatbid().stream() .filter(Objects::nonNull) - .map(SeatBid::getBid) - .filter(Objects::nonNull) - .flatMap(Collection::stream) - .map(bid -> makeBid(bid, bidResponse.getCur(), errors)) + .flatMap(seatBid -> CollectionUtils.emptyIfNull(seatBid.getBid()).stream() + .filter(Objects::nonNull) + .map(bid -> BidderBid.of(seatBid.getSeat(), + makeBid(bid, bidResponse.getCur(), errors)))) .filter(Objects::nonNull) .toList(); } diff --git a/src/main/java/org/prebid/server/bidder/videobyte/VideobyteBidder.java b/src/main/java/org/prebid/server/bidder/videobyte/VideobyteBidder.java index 2d960b9f091..60d45a6ff5d 100644 --- a/src/main/java/org/prebid/server/bidder/videobyte/VideobyteBidder.java +++ b/src/main/java/org/prebid/server/bidder/videobyte/VideobyteBidder.java @@ -5,7 +5,6 @@ import com.iab.openrtb.request.Imp; import com.iab.openrtb.request.Site; import com.iab.openrtb.response.BidResponse; -import com.iab.openrtb.response.SeatBid; import io.vertx.core.MultiMap; import io.vertx.core.http.HttpMethod; import org.apache.commons.collections4.CollectionUtils; @@ -26,7 +25,6 @@ import org.prebid.server.util.Uri; import java.util.ArrayList; -import java.util.Collection; import java.util.Collections; import java.util.List; import java.util.Objects; @@ -125,11 +123,10 @@ private static List extractBids(BidRequest bidRequest, BidResponse bi return bidResponse.getSeatbid().stream() .filter(Objects::nonNull) - .map(SeatBid::getBid) - .filter(Objects::nonNull) - .flatMap(Collection::stream) - .filter(Objects::nonNull) - .map(bid -> BidderBid.of(bid, resolveBidType(bid.getImpid(), bidRequest.getImp()), DEFAULT_CURRENCY)) + .flatMap(seatBid -> CollectionUtils.emptyIfNull(seatBid.getBid()).stream() + .filter(Objects::nonNull) + .map(bid -> BidderBid.of(seatBid.getSeat(), + bid, resolveBidType(bid.getImpid(), bidRequest.getImp()), DEFAULT_CURRENCY))) .toList(); } diff --git a/src/main/java/org/prebid/server/bidder/videoheroes/VideoHeroesBidder.java b/src/main/java/org/prebid/server/bidder/videoheroes/VideoHeroesBidder.java index ed4822007c6..475d367e4ed 100644 --- a/src/main/java/org/prebid/server/bidder/videoheroes/VideoHeroesBidder.java +++ b/src/main/java/org/prebid/server/bidder/videoheroes/VideoHeroesBidder.java @@ -4,7 +4,6 @@ import com.iab.openrtb.request.BidRequest; import com.iab.openrtb.request.Imp; import com.iab.openrtb.response.BidResponse; -import com.iab.openrtb.response.SeatBid; import org.apache.commons.collections4.CollectionUtils; import org.prebid.server.bidder.Bidder; import org.prebid.server.bidder.model.BidderBid; @@ -22,7 +21,6 @@ import org.prebid.server.util.Uri; import java.util.ArrayList; -import java.util.Collection; import java.util.Collections; import java.util.List; import java.util.Objects; @@ -104,11 +102,10 @@ private static List extractBids(BidRequest bidRequest, BidResponse bi return bidResponse.getSeatbid().stream() .filter(Objects::nonNull) - .map(SeatBid::getBid) - .filter(Objects::nonNull) - .flatMap(Collection::stream) - .filter(Objects::nonNull) - .map(bid -> BidderBid.of(bid, getBidType(bid.getImpid(), bidRequest.getImp()), bidResponse.getCur())) + .flatMap(seatBid -> CollectionUtils.emptyIfNull(seatBid.getBid()).stream() + .filter(Objects::nonNull) + .map(bid -> BidderBid.of(seatBid.getSeat(), + bid, getBidType(bid.getImpid(), bidRequest.getImp()), bidResponse.getCur()))) .toList(); } diff --git a/src/main/java/org/prebid/server/bidder/vidoomy/VidoomyBidder.java b/src/main/java/org/prebid/server/bidder/vidoomy/VidoomyBidder.java index 54dc9239b5b..5e130d741be 100644 --- a/src/main/java/org/prebid/server/bidder/vidoomy/VidoomyBidder.java +++ b/src/main/java/org/prebid/server/bidder/vidoomy/VidoomyBidder.java @@ -6,7 +6,6 @@ import com.iab.openrtb.request.Format; import com.iab.openrtb.request.Imp; import com.iab.openrtb.response.BidResponse; -import com.iab.openrtb.response.SeatBid; import io.vertx.core.MultiMap; import io.vertx.core.http.HttpMethod; import org.apache.commons.collections4.CollectionUtils; @@ -25,7 +24,6 @@ import org.prebid.server.util.ObjectUtil; import java.util.ArrayList; -import java.util.Collection; import java.util.Collections; import java.util.List; import java.util.Objects; @@ -140,11 +138,10 @@ private static List extractBids(BidResponse bidResponse, BidRequest b return bidResponse.getSeatbid().stream() .filter(Objects::nonNull) - .map(SeatBid::getBid) - .filter(Objects::nonNull) - .flatMap(Collection::stream) - .filter(Objects::nonNull) - .map(bid -> BidderBid.of(bid, getBidType(bid.getImpid(), bidRequest.getImp()), bidResponse.getCur())) + .flatMap(seatBid -> CollectionUtils.emptyIfNull(seatBid.getBid()).stream() + .filter(Objects::nonNull) + .map(bid -> BidderBid.of(seatBid.getSeat(), + bid, getBidType(bid.getImpid(), bidRequest.getImp()), bidResponse.getCur()))) .toList(); } diff --git a/src/main/java/org/prebid/server/bidder/visiblemeasures/VisibleMeasuresBidder.java b/src/main/java/org/prebid/server/bidder/visiblemeasures/VisibleMeasuresBidder.java index ca6bc173e31..9cb6c5f6826 100644 --- a/src/main/java/org/prebid/server/bidder/visiblemeasures/VisibleMeasuresBidder.java +++ b/src/main/java/org/prebid/server/bidder/visiblemeasures/VisibleMeasuresBidder.java @@ -6,7 +6,6 @@ import com.iab.openrtb.request.Imp; import com.iab.openrtb.response.Bid; import com.iab.openrtb.response.BidResponse; -import com.iab.openrtb.response.SeatBid; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.ObjectUtils; import org.apache.commons.lang3.StringUtils; @@ -27,7 +26,6 @@ import org.prebid.server.util.HttpUtil; import java.util.ArrayList; -import java.util.Collection; import java.util.Collections; import java.util.List; import java.util.Objects; @@ -121,11 +119,10 @@ private static List extractBids(BidResponse bidResponse, BidRequest b return bidResponse.getSeatbid().stream() .filter(Objects::nonNull) - .map(SeatBid::getBid) - .filter(Objects::nonNull) - .flatMap(Collection::stream) - .filter(Objects::nonNull) - .map(bid -> BidderBid.of(bid, getBidType(bid, bidRequest.getImp()), bidResponse.getCur())) + .flatMap(seatBid -> CollectionUtils.emptyIfNull(seatBid.getBid()).stream() + .filter(Objects::nonNull) + .map(bid -> BidderBid.of(seatBid.getSeat(), + bid, getBidType(bid, bidRequest.getImp()), bidResponse.getCur()))) .filter(Objects::nonNull) .toList(); } diff --git a/src/main/java/org/prebid/server/bidder/visx/VisxBidder.java b/src/main/java/org/prebid/server/bidder/visx/VisxBidder.java index 49e64645206..79c478ff1be 100644 --- a/src/main/java/org/prebid/server/bidder/visx/VisxBidder.java +++ b/src/main/java/org/prebid/server/bidder/visx/VisxBidder.java @@ -17,7 +17,6 @@ import org.prebid.server.bidder.model.Result; import org.prebid.server.bidder.visx.model.VisxBid; import org.prebid.server.bidder.visx.model.VisxResponse; -import org.prebid.server.bidder.visx.model.VisxSeatBid; import org.prebid.server.exception.PreBidException; import org.prebid.server.json.DecodeException; import org.prebid.server.json.JacksonMapper; @@ -28,7 +27,6 @@ import org.prebid.server.util.BidderUtil; import org.prebid.server.util.HttpUtil; -import java.util.Collection; import java.util.Collections; import java.util.List; import java.util.Objects; @@ -95,10 +93,10 @@ private List extractBids(BidRequest bidRequest, VisxResponse visxResp private List bidsFromResponse(BidRequest bidRequest, VisxResponse visxResponse) { return visxResponse.getSeatbid().stream() .filter(Objects::nonNull) - .map(VisxSeatBid::getBid) - .filter(Objects::nonNull) - .flatMap(Collection::stream) - .map(visxBid -> toBidderBid(bidRequest, visxBid, visxResponse.getCur())) + .flatMap(seatBid -> CollectionUtils.emptyIfNull(seatBid.getBid()).stream() + .filter(Objects::nonNull) + .map(visxBid -> BidderBid.of(seatBid.getSeat(), + toBidderBid(bidRequest, visxBid, visxResponse.getCur())))) .toList(); } diff --git a/src/main/java/org/prebid/server/bidder/vox/VoxBidder.java b/src/main/java/org/prebid/server/bidder/vox/VoxBidder.java index 99969806c23..abd9601264a 100644 --- a/src/main/java/org/prebid/server/bidder/vox/VoxBidder.java +++ b/src/main/java/org/prebid/server/bidder/vox/VoxBidder.java @@ -54,8 +54,11 @@ private static List extractBids(BidResponse bidResponse) { } return bidResponse.getSeatbid() .stream() - .flatMap(seatBid -> Optional.ofNullable(seatBid.getBid()).orElse(List.of()).stream()) - .map(bid -> BidderBid.of(bid, getBidMediaType(bid), bidResponse.getCur())) + .filter(java.util.Objects::nonNull) + .flatMap(seatBid -> Optional.ofNullable(seatBid.getBid()).orElse(List.of()).stream() + .filter(java.util.Objects::nonNull) + .map(bid -> BidderBid.of(seatBid.getSeat(), + bid, getBidMediaType(bid), bidResponse.getCur()))) .toList(); } diff --git a/src/main/java/org/prebid/server/bidder/vrtcal/VrtcalBidder.java b/src/main/java/org/prebid/server/bidder/vrtcal/VrtcalBidder.java index aa23176ea97..a2d5d2838c7 100644 --- a/src/main/java/org/prebid/server/bidder/vrtcal/VrtcalBidder.java +++ b/src/main/java/org/prebid/server/bidder/vrtcal/VrtcalBidder.java @@ -3,7 +3,6 @@ import com.iab.openrtb.request.BidRequest; import com.iab.openrtb.response.Bid; import com.iab.openrtb.response.BidResponse; -import com.iab.openrtb.response.SeatBid; import org.apache.commons.collections4.CollectionUtils; import org.prebid.server.bidder.Bidder; import org.prebid.server.bidder.model.BidderBid; @@ -19,7 +18,6 @@ import org.prebid.server.util.HttpUtil; import java.util.ArrayList; -import java.util.Collection; import java.util.Collections; import java.util.List; import java.util.Objects; @@ -61,9 +59,10 @@ private List extractBids(BidResponse bidResponse, List e private static List bidsFromResponse(BidResponse bidResponse, List errors) { return bidResponse.getSeatbid().stream() .filter(Objects::nonNull) - .map(SeatBid::getBid) - .flatMap(Collection::stream) - .map(bid -> resolveBidderBid(bid, bidResponse.getCur(), errors)) + .flatMap(seatBid -> CollectionUtils.emptyIfNull(seatBid.getBid()).stream() + .filter(Objects::nonNull) + .map(bid -> BidderBid.of(seatBid.getSeat(), + resolveBidderBid(bid, bidResponse.getCur(), errors)))) .filter(Objects::nonNull) .toList(); } diff --git a/src/main/java/org/prebid/server/bidder/xeworks/XeworksBidder.java b/src/main/java/org/prebid/server/bidder/xeworks/XeworksBidder.java index cf4b5d65e11..4fcefbb1ca1 100644 --- a/src/main/java/org/prebid/server/bidder/xeworks/XeworksBidder.java +++ b/src/main/java/org/prebid/server/bidder/xeworks/XeworksBidder.java @@ -6,7 +6,6 @@ import com.iab.openrtb.request.Imp; import com.iab.openrtb.response.Bid; import com.iab.openrtb.response.BidResponse; -import com.iab.openrtb.response.SeatBid; import org.apache.commons.collections4.CollectionUtils; import org.prebid.server.bidder.Bidder; import org.prebid.server.bidder.model.BidderBid; @@ -25,7 +24,6 @@ import org.prebid.server.util.Uri; import java.util.ArrayList; -import java.util.Collection; import java.util.Collections; import java.util.List; import java.util.Objects; @@ -101,11 +99,10 @@ private List extractBids(BidResponse bidResponse, List e return bidResponse.getSeatbid().stream() .filter(Objects::nonNull) - .map(SeatBid::getBid) - .filter(Objects::nonNull) - .flatMap(Collection::stream) - .filter(Objects::nonNull) - .map(bid -> makeBidderBid(bid, bidResponse.getCur(), errors)) + .flatMap(seatBid -> CollectionUtils.emptyIfNull(seatBid.getBid()).stream() + .filter(Objects::nonNull) + .map(bid -> BidderBid.of(seatBid.getSeat(), + makeBidderBid(bid, bidResponse.getCur(), errors)))) .filter(Objects::nonNull) .toList(); } diff --git a/src/main/java/org/prebid/server/bidder/yahooads/YahooAdsBidder.java b/src/main/java/org/prebid/server/bidder/yahooads/YahooAdsBidder.java index 800f21f2c9c..8c6b5568424 100644 --- a/src/main/java/org/prebid/server/bidder/yahooads/YahooAdsBidder.java +++ b/src/main/java/org/prebid/server/bidder/yahooads/YahooAdsBidder.java @@ -34,7 +34,6 @@ import org.prebid.server.util.HttpUtil; import java.util.ArrayList; -import java.util.Collection; import java.util.Collections; import java.util.List; import java.util.Objects; @@ -265,19 +264,18 @@ private static List extractBids(BidResponse bidResponse, BidRequest b private static List bidsFromResponse(BidResponse bidResponse, List imps) { return bidResponse.getSeatbid().stream() .filter(Objects::nonNull) - .map(SeatBid::getBid) - .filter(Objects::nonNull) - .flatMap(Collection::stream) - .filter(Objects::nonNull) - .map(bid -> makeBidderBid(bid, imps, bidResponse.getCur())) + .filter(seatBid -> seatBid.getBid() != null) + .flatMap(seatBid -> seatBid.getBid().stream() + .filter(Objects::nonNull) + .map(bid -> makeBidderBid(bid, imps, bidResponse.getCur(), seatBid.getSeat()))) .filter(Objects::nonNull) .toList(); } - private static BidderBid makeBidderBid(Bid bid, List imps, String currency) { + private static BidderBid makeBidderBid(Bid bid, List imps, String currency, String originalSeat) { final BidType bidType = getBidType(bid, imps); return bidType != null - ? BidderBid.of(bid, bidType, currency) + ? BidderBid.of(originalSeat, bid, bidType, currency) : null; } diff --git a/src/main/java/org/prebid/server/bidder/yandex/YandexBidder.java b/src/main/java/org/prebid/server/bidder/yandex/YandexBidder.java index d97c2f7e2fd..8a904e53e34 100644 --- a/src/main/java/org/prebid/server/bidder/yandex/YandexBidder.java +++ b/src/main/java/org/prebid/server/bidder/yandex/YandexBidder.java @@ -10,7 +10,6 @@ import com.iab.openrtb.request.Site; import com.iab.openrtb.request.Video; import com.iab.openrtb.response.BidResponse; -import com.iab.openrtb.response.SeatBid; import io.vertx.core.MultiMap; import io.vertx.core.http.HttpMethod; import org.apache.commons.collections4.CollectionUtils; @@ -31,7 +30,6 @@ import org.prebid.server.util.Uri; import java.util.ArrayList; -import java.util.Collection; import java.util.Collections; import java.util.List; import java.util.Objects; @@ -226,10 +224,10 @@ private static List extractBids(BidResponse bidResponse, BidRequest b private static List bidsFromResponse(BidResponse bidResponse, List imps) { return bidResponse.getSeatbid().stream() .filter(Objects::nonNull) - .map(SeatBid::getBid) - .filter(Objects::nonNull) - .flatMap(Collection::stream) - .map(bid -> BidderBid.of(bid, getBidType(bid.getImpid(), imps), bidResponse.getCur())) + .flatMap(seatBid -> CollectionUtils.emptyIfNull(seatBid.getBid()).stream() + .filter(Objects::nonNull) + .map(bid -> BidderBid.of(seatBid.getSeat(), + bid, getBidType(bid.getImpid(), imps), bidResponse.getCur()))) .collect(Collectors.toList()); } diff --git a/src/main/java/org/prebid/server/bidder/yeahmobi/YeahmobiBidder.java b/src/main/java/org/prebid/server/bidder/yeahmobi/YeahmobiBidder.java index 23c811f5f07..a799796e8ea 100644 --- a/src/main/java/org/prebid/server/bidder/yeahmobi/YeahmobiBidder.java +++ b/src/main/java/org/prebid/server/bidder/yeahmobi/YeahmobiBidder.java @@ -8,7 +8,7 @@ import com.iab.openrtb.request.Imp; import com.iab.openrtb.request.Native; import com.iab.openrtb.response.BidResponse; -import com.iab.openrtb.response.SeatBid; +import org.apache.commons.collections4.CollectionUtils; import org.prebid.server.bidder.Bidder; import org.prebid.server.bidder.model.BidderBid; import org.prebid.server.bidder.model.BidderCall; @@ -27,7 +27,6 @@ import org.prebid.server.util.Uri; import java.util.ArrayList; -import java.util.Collection; import java.util.Collections; import java.util.List; import java.util.Map; @@ -143,16 +142,15 @@ private List extractBids(BidRequest bidRequest, BidResponse bidRespon return bidResponse.getSeatbid().stream() .filter(Objects::nonNull) - .map(SeatBid::getBid) - .filter(Objects::nonNull) - .flatMap(Collection::stream) - .filter(Objects::nonNull) - .map(bid -> BidderBid.builder() - .bid(bid) - .type(getBidType(bid.getImpid(), impMap)) - .bidCurrency(bidResponse.getCur()) - .videoInfo(videoInfo(parseBidExt(bid.getExt()))) - .build()) + .flatMap(seatBid -> CollectionUtils.emptyIfNull(seatBid.getBid()).stream() + .filter(Objects::nonNull) + .map(bid -> BidderBid.of(seatBid.getSeat(), + BidderBid.builder() + .bid(bid) + .type(getBidType(bid.getImpid(), impMap)) + .bidCurrency(bidResponse.getCur()) + .videoInfo(videoInfo(parseBidExt(bid.getExt()))) + .build()))) .toList(); } diff --git a/src/main/java/org/prebid/server/bidder/yearxero/YearxeroBidder.java b/src/main/java/org/prebid/server/bidder/yearxero/YearxeroBidder.java index 0b1875d69f1..aa1d19424d0 100644 --- a/src/main/java/org/prebid/server/bidder/yearxero/YearxeroBidder.java +++ b/src/main/java/org/prebid/server/bidder/yearxero/YearxeroBidder.java @@ -4,7 +4,6 @@ import com.iab.openrtb.request.Imp; import com.iab.openrtb.response.Bid; import com.iab.openrtb.response.BidResponse; -import com.iab.openrtb.response.SeatBid; import org.apache.commons.collections4.CollectionUtils; import org.prebid.server.bidder.Bidder; import org.prebid.server.bidder.model.BidderBid; @@ -18,7 +17,6 @@ import org.prebid.server.util.BidderUtil; import org.prebid.server.util.HttpUtil; -import java.util.Collection; import java.util.Collections; import java.util.List; import java.util.Objects; @@ -58,10 +56,10 @@ private static List extractBids(BidRequest bidRequest, BidResponse bi private static List bidsFromResponse(BidRequest bidRequest, BidResponse bidResponse) { return bidResponse.getSeatbid().stream() .filter(Objects::nonNull) - .map(SeatBid::getBid) - .filter(Objects::nonNull) - .flatMap(Collection::stream) - .map(bid -> BidderBid.of(bid, getBidType(bid, bidRequest.getImp()), bidResponse.getCur())) + .flatMap(seatBid -> CollectionUtils.emptyIfNull(seatBid.getBid()).stream() + .filter(Objects::nonNull) + .map(bid -> BidderBid.of(seatBid.getSeat(), + bid, getBidType(bid, bidRequest.getImp()), bidResponse.getCur()))) .toList(); } diff --git a/src/main/java/org/prebid/server/bidder/yieldmo/YieldmoBidder.java b/src/main/java/org/prebid/server/bidder/yieldmo/YieldmoBidder.java index a927bb15f56..05bf3ca28f0 100644 --- a/src/main/java/org/prebid/server/bidder/yieldmo/YieldmoBidder.java +++ b/src/main/java/org/prebid/server/bidder/yieldmo/YieldmoBidder.java @@ -7,7 +7,6 @@ import com.iab.openrtb.request.Imp; import com.iab.openrtb.response.Bid; import com.iab.openrtb.response.BidResponse; -import com.iab.openrtb.response.SeatBid; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.StringUtils; import org.prebid.server.bidder.Bidder; @@ -31,7 +30,6 @@ import java.math.BigDecimal; import java.util.ArrayList; -import java.util.Collection; import java.util.Collections; import java.util.List; import java.util.Objects; @@ -138,17 +136,18 @@ private List extractBids(BidResponse bidResponse) { if (bidResponse == null || CollectionUtils.isEmpty(bidResponse.getSeatbid())) { return Collections.emptyList(); } - return bidResponse.getSeatbid().stream() .filter(Objects::nonNull) - .map(SeatBid::getBid) - .filter(Objects::nonNull) - .flatMap(Collection::stream) - .filter(Objects::nonNull) - .map(bid -> { - final BidType bidType = resolveBidType(bid); - return bidType != null ? BidderBid.of(bid, bidType, bidResponse.getCur()) : null; - }) + .filter(seatBid -> seatBid.getBid() != null) + .flatMap(seatBid -> seatBid.getBid().stream() + .filter(Objects::nonNull) + .map(bid -> { + final BidType bidType = resolveBidType(bid); + return bidType != null + ? BidderBid.of(seatBid.getSeat(), + bid, bidType, bidResponse.getCur()) + : null; + })) .filter(Objects::nonNull) .toList(); } diff --git a/src/main/java/org/prebid/server/bidder/yieldone/YieldoneBidder.java b/src/main/java/org/prebid/server/bidder/yieldone/YieldoneBidder.java index cb5ae6968b5..4124f22a13f 100644 --- a/src/main/java/org/prebid/server/bidder/yieldone/YieldoneBidder.java +++ b/src/main/java/org/prebid/server/bidder/yieldone/YieldoneBidder.java @@ -6,7 +6,6 @@ import com.iab.openrtb.request.Format; import com.iab.openrtb.request.Imp; import com.iab.openrtb.response.BidResponse; -import com.iab.openrtb.response.SeatBid; import org.apache.commons.collections4.CollectionUtils; import org.prebid.server.bidder.Bidder; import org.prebid.server.bidder.model.BidderBid; @@ -24,7 +23,6 @@ import org.prebid.server.util.HttpUtil; import java.util.ArrayList; -import java.util.Collection; import java.util.Collections; import java.util.List; import java.util.Objects; @@ -98,11 +96,10 @@ public Result> makeBids(BidderCall httpCall, BidRequ final List bidderBids = bidResponse.getSeatbid().stream() .filter(Objects::nonNull) - .map(SeatBid::getBid) - .filter(Objects::nonNull) - .flatMap(Collection::stream) - .map(bid -> BidderBid.of(bid, getBidType(bid.getImpid(), bidRequest.getImp()), - bidResponse.getCur())) + .flatMap(seatBid -> CollectionUtils.emptyIfNull(seatBid.getBid()).stream() + .filter(Objects::nonNull) + .map(bid -> BidderBid.of(seatBid.getSeat(), bid, + getBidType(bid.getImpid(), bidRequest.getImp()), bidResponse.getCur()))) .toList(); return Result.withValues(bidderBids); diff --git a/src/main/java/org/prebid/server/bidder/zentotem/ZentotemBidder.java b/src/main/java/org/prebid/server/bidder/zentotem/ZentotemBidder.java index 1aac754f04a..ab2177a903e 100644 --- a/src/main/java/org/prebid/server/bidder/zentotem/ZentotemBidder.java +++ b/src/main/java/org/prebid/server/bidder/zentotem/ZentotemBidder.java @@ -4,7 +4,6 @@ import com.iab.openrtb.request.Imp; import com.iab.openrtb.response.Bid; import com.iab.openrtb.response.BidResponse; -import com.iab.openrtb.response.SeatBid; import org.apache.commons.collections4.CollectionUtils; import org.prebid.server.bidder.Bidder; import org.prebid.server.bidder.model.BidderBid; @@ -20,7 +19,6 @@ import org.prebid.server.util.HttpUtil; import java.util.ArrayList; -import java.util.Collection; import java.util.Collections; import java.util.List; import java.util.Objects; @@ -76,11 +74,10 @@ private static List extractBids(BidResponse bidResponse, List bidsFromResponse(BidResponse bidResponse, List errors) { return bidResponse.getSeatbid().stream() .filter(Objects::nonNull) - .map(SeatBid::getBid) - .filter(Objects::nonNull) - .flatMap(Collection::stream) - .filter(Objects::nonNull) - .map(bid -> makeBidderBid(bid, bidResponse.getCur(), errors)) + .flatMap(seatBid -> CollectionUtils.emptyIfNull(seatBid.getBid()).stream() + .filter(Objects::nonNull) + .map(bid -> BidderBid.of(seatBid.getSeat(), + makeBidderBid(bid, bidResponse.getCur(), errors)))) .filter(Objects::nonNull) .collect(Collectors.toList()); } diff --git a/src/main/java/org/prebid/server/bidder/zmaticoo/ZMaticooBidder.java b/src/main/java/org/prebid/server/bidder/zmaticoo/ZMaticooBidder.java index 07cc81b05c7..a7cc29ec4bf 100644 --- a/src/main/java/org/prebid/server/bidder/zmaticoo/ZMaticooBidder.java +++ b/src/main/java/org/prebid/server/bidder/zmaticoo/ZMaticooBidder.java @@ -8,7 +8,6 @@ import com.iab.openrtb.request.Native; import com.iab.openrtb.response.Bid; import com.iab.openrtb.response.BidResponse; -import com.iab.openrtb.response.SeatBid; import io.vertx.core.http.HttpMethod; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.ObjectUtils; @@ -30,7 +29,6 @@ import org.prebid.server.util.HttpUtil; import java.util.ArrayList; -import java.util.Collection; import java.util.Collections; import java.util.List; import java.util.Objects; @@ -149,11 +147,10 @@ private static List extractBids(BidResponse bidResponse, List makeBidderBid(bid, bidResponse.getCur(), errors)) + .flatMap(seatBid -> CollectionUtils.emptyIfNull(seatBid.getBid()).stream() + .filter(Objects::nonNull) + .map(bid -> BidderBid.of(seatBid.getSeat(), + makeBidderBid(bid, bidResponse.getCur(), errors)))) .filter(Objects::nonNull) .toList(); } diff --git a/src/main/java/org/prebid/server/util/BidderUtil.java b/src/main/java/org/prebid/server/util/BidderUtil.java index b86004f8383..25e2f4e4c8e 100644 --- a/src/main/java/org/prebid/server/util/BidderUtil.java +++ b/src/main/java/org/prebid/server/util/BidderUtil.java @@ -128,4 +128,5 @@ public static BidType getBidType(Bid bid, Map impIdToImpMap) { return BidType.banner; } } + } diff --git a/src/test/groovy/org/prebid/server/functional/model/response/auction/Meta.groovy b/src/test/groovy/org/prebid/server/functional/model/response/auction/Meta.groovy index e8bb869ebae..1607f31cb1d 100644 --- a/src/test/groovy/org/prebid/server/functional/model/response/auction/Meta.groovy +++ b/src/test/groovy/org/prebid/server/functional/model/response/auction/Meta.groovy @@ -27,4 +27,5 @@ class Meta { String rendererUrl RendererData rendererData List secondaryCategoryIdList + String seat } diff --git a/src/test/java/org/prebid/server/auction/BidResponseCreatorTest.java b/src/test/java/org/prebid/server/auction/BidResponseCreatorTest.java index b8365ae867a..0a128883135 100644 --- a/src/test/java/org/prebid/server/auction/BidResponseCreatorTest.java +++ b/src/test/java/org/prebid/server/auction/BidResponseCreatorTest.java @@ -1832,6 +1832,77 @@ public void shouldTolerateMissingExtInSeatBidAndBid() { verify(coreCacheService, never()).cacheBidsOpenrtb(anyList(), any(), any(), any()); } + @Test + public void shouldAddOriginalSeatToBidMetaWhenDifferentFromOutputSeat() { + // given + final Bid bid = Bid.builder().id("bidId").price(BigDecimal.ONE).impid(IMP_ID).build(); + final BidderBid bidderBid = BidderBid.of(bid, banner, "outputSeat", "USD") + .toBuilder().originalSeat("sourceSeat").build(); + final List bidderResponses = singletonList(BidderResponse.of( + "bidder", givenSeatBid(bidderBid), 100)); + final AuctionContext auctionContext = givenAuctionContext( + givenBidRequest(givenImp()), + contextBuilder -> contextBuilder.auctionParticipations(toAuctionParticipant(bidderResponses))); + + // when + final BidResponse bidResponse = target.create(auctionContext, CACHE_INFO, MULTI_BIDS).result(); + + // then + assertThat(bidResponse.getSeatbid()).singleElement() + .satisfies(seatBid -> { + assertThat(seatBid.getSeat()).isEqualTo("outputSeat"); + assertThat(seatBid.getBid()).singleElement() + .satisfies(responseBid -> assertThat(responseBid.getExt() + .path("prebid").path("meta").path("seat").asText()).isEqualTo("sourceSeat")); + }); + } + + @Test + public void shouldPreserveAdapterMetaSeatWhenOriginalSeatIsPresent() { + // given + final ObjectNode bidExt = mapper.createObjectNode(); + bidExt.putObject("prebid").putObject("meta") + .put("seat", "adapterSeat") + .put("advertiserName", "advertiser"); + final Bid bid = Bid.builder().id("bidId").price(BigDecimal.ONE).impid(IMP_ID).ext(bidExt).build(); + final BidderBid bidderBid = BidderBid.of(bid, banner, "outputSeat", "USD") + .toBuilder().originalSeat("sourceSeat").build(); + final List bidderResponses = singletonList(BidderResponse.of( + "bidder", givenSeatBid(bidderBid), 100)); + final AuctionContext auctionContext = givenAuctionContext( + givenBidRequest(givenImp()), + contextBuilder -> contextBuilder.auctionParticipations(toAuctionParticipant(bidderResponses))); + + // when + final BidResponse bidResponse = target.create(auctionContext, CACHE_INFO, MULTI_BIDS).result(); + + // then + final JsonNode meta = bidResponse.getSeatbid().getFirst().getBid().getFirst() + .getExt().path("prebid").path("meta"); + assertThat(meta.path("seat").asText()).isEqualTo("adapterSeat"); + assertThat(meta.path("advertiserName").asText()).isEqualTo("advertiser"); + } + + @Test + public void shouldOmitOriginalSeatMetaWhenItMatchesOutputSeat() { + // given + final Bid bid = Bid.builder().id("bidId").price(BigDecimal.ONE).impid(IMP_ID).build(); + final BidderBid bidderBid = BidderBid.of(bid, banner, "outputSeat", "USD") + .toBuilder().originalSeat("outputSeat").build(); + final List bidderResponses = singletonList(BidderResponse.of( + "bidder", givenSeatBid(bidderBid), 100)); + final AuctionContext auctionContext = givenAuctionContext( + givenBidRequest(givenImp()), + contextBuilder -> contextBuilder.auctionParticipations(toAuctionParticipant(bidderResponses))); + + // when + final BidResponse bidResponse = target.create(auctionContext, CACHE_INFO, MULTI_BIDS).result(); + + // then + assertThat(bidResponse.getSeatbid().getFirst().getBid().getFirst() + .getExt().path("prebid").path("meta").has("seat")).isFalse(); + } + @Test public void shouldPassPreferDealsToWinningComparatorFactoryWhenBidRequestTrue() { // given diff --git a/src/test/java/org/prebid/server/bidder/aax/AaxBidderTest.java b/src/test/java/org/prebid/server/bidder/aax/AaxBidderTest.java index 50c2bcb1781..8d2eb7025b5 100644 --- a/src/test/java/org/prebid/server/bidder/aax/AaxBidderTest.java +++ b/src/test/java/org/prebid/server/bidder/aax/AaxBidderTest.java @@ -255,6 +255,45 @@ public void makeBidsShouldReturnErrorIfRequestContainUnsupportedMediaType() thro BidderError.Type.bad_server_response)); } + @Test + public void makeBidsShouldKeepValidBidAndSeatWhenOtherSeatsHaveNoBids() { + // given + final BidRequest bidRequest = givenBidRequest(imp -> imp.banner(Banner.builder().build())); + final String body = """ + {"cur":"USD","seatbid":[ + {"seat":"missing-bids"}, + {"seat":"buyer","bid":[{"id":"valid-bid","impid":"123","mtype":1}]}, + {"seat":"null-bids","bid":null} + ]} + """; + final BidderCall httpCall = givenHttpCall(bidRequest, body); + + // when + final Result> result = target.makeBids(httpCall, null); + + // then + assertThat(result.getErrors()).isEmpty(); + assertThat(result.getValue()).extracting(BidderBid::getBid) + .containsExactly(Bid.builder().id("valid-bid").impid("123").mtype(1).build()); + assertThat(result.getValue()).extracting(BidderBid::getOriginalSeat).containsExactly("buyer"); + } + + @Test + public void makeBidsShouldReturnNoBidsWhenEverySeatHasNoBids() { + // given + final String body = """ + {"seatbid":[null,{"seat":"missing-bids"},{"bid":null},{"bid":[]}]} + """; + final BidderCall httpCall = givenHttpCall(null, body); + + // when + final Result> result = target.makeBids(httpCall, null); + + // then + assertThat(result.getErrors()).isEmpty(); + assertThat(result.getValue()).isEmpty(); + } + private static BidRequest givenBidRequest(UnaryOperator impCustomizer) { return givenBidRequest(identity(), impCustomizer); } diff --git a/src/test/java/org/prebid/server/bidder/adelement/AdelementBidderTest.java b/src/test/java/org/prebid/server/bidder/adelement/AdelementBidderTest.java index c3a9a89c343..d272f4179de 100644 --- a/src/test/java/org/prebid/server/bidder/adelement/AdelementBidderTest.java +++ b/src/test/java/org/prebid/server/bidder/adelement/AdelementBidderTest.java @@ -3,6 +3,7 @@ import com.iab.openrtb.request.BidRequest; import com.iab.openrtb.request.Device; import com.iab.openrtb.request.Imp; +import com.iab.openrtb.response.Bid; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.prebid.server.VertxTest; @@ -82,6 +83,44 @@ public void makeBidsShouldReturnErrorIfResponseBodyCouldNotBeParsed() { .containsExactly(BidderError.badServerResponse("Bad Server Response")); } + @Test + public void makeBidsShouldKeepValidBidAndSeatWhenOtherSeatsHaveNoBids() { + // given + final String body = """ + {"cur":"USD","seatbid":[ + {"seat":"missing-bids"}, + {"seat":"buyer","bid":[{"id":"valid-bid","impid":"123","mtype":1}]}, + {"seat":"null-bids","bid":null} + ]} + """; + final BidderCall httpCall = givenHttpCall(body); + + // when + final Result> result = adelementBidder.makeBids(httpCall, null); + + // then + assertThat(result.getErrors()).isEmpty(); + assertThat(result.getValue()).extracting(BidderBid::getBid) + .containsExactly(Bid.builder().id("valid-bid").impid("123").mtype(1).build()); + assertThat(result.getValue()).extracting(BidderBid::getOriginalSeat).containsExactly("buyer"); + } + + @Test + public void makeBidsShouldReturnNoBidsWhenEverySeatHasNoBids() { + // given + final String body = """ + {"seatbid":[null,{"seat":"missing-bids"},{"bid":null},{"bid":[]}]} + """; + final BidderCall httpCall = givenHttpCall(body); + + // when + final Result> result = adelementBidder.makeBids(httpCall, null); + + // then + assertThat(result.getErrors()).isEmpty(); + assertThat(result.getValue()).isEmpty(); + } + private static BidRequest givenBidRequest(Function... impCustomizers) { return givenBidRequest(identity(), asList(impCustomizers)); } diff --git a/src/test/java/org/prebid/server/bidder/aja/AjaBidderTest.java b/src/test/java/org/prebid/server/bidder/aja/AjaBidderTest.java index 97d3485b977..d3eccd7e577 100644 --- a/src/test/java/org/prebid/server/bidder/aja/AjaBidderTest.java +++ b/src/test/java/org/prebid/server/bidder/aja/AjaBidderTest.java @@ -154,6 +154,45 @@ public void makeBidsShouldReturnBannerBidIfBannerIsPresentInRequestImp() throws .containsOnly(BidderBid.of(Bid.builder().impid("123").build(), banner, "USD")); } + @Test + public void makeBidsShouldKeepValidBidAndSeatWhenOtherSeatsHaveNoBids() { + // given + final BidRequest bidRequest = givenBidRequest(identity()); + final String body = """ + {"cur":"USD","seatbid":[ + {"seat":"missing-bids"}, + {"seat":"buyer","bid":[{"id":"valid-bid","impid":"123","mtype":1}]}, + {"seat":"null-bids","bid":null} + ]} + """; + final BidderCall httpCall = givenHttpCall(bidRequest, body); + + // when + final Result> result = target.makeBids(httpCall, null); + + // then + assertThat(result.getErrors()).isEmpty(); + assertThat(result.getValue()).extracting(BidderBid::getBid) + .containsExactly(Bid.builder().id("valid-bid").impid("123").mtype(1).build()); + assertThat(result.getValue()).extracting(BidderBid::getOriginalSeat).containsExactly("buyer"); + } + + @Test + public void makeBidsShouldReturnNoBidsWhenEverySeatHasNoBids() { + // given + final String body = """ + {"seatbid":[null,{"seat":"missing-bids"},{"bid":null},{"bid":[]}]} + """; + final BidderCall httpCall = givenHttpCall(null, body); + + // when + final Result> result = target.makeBids(httpCall, null); + + // then + assertThat(result.getErrors()).isEmpty(); + assertThat(result.getValue()).isEmpty(); + } + private static BidRequest givenBidRequest( Function bidRequestCustomizer, Function impCustomizer) { diff --git a/src/test/java/org/prebid/server/bidder/insticator/InsticatorBidderTest.java b/src/test/java/org/prebid/server/bidder/insticator/InsticatorBidderTest.java index 499b4edd8d3..8420ede61a6 100644 --- a/src/test/java/org/prebid/server/bidder/insticator/InsticatorBidderTest.java +++ b/src/test/java/org/prebid/server/bidder/insticator/InsticatorBidderTest.java @@ -578,6 +578,7 @@ public void makeBidsShouldSetSeatInMetaWhenSeatBidHasSeat() throws JsonProcessin expectedExt.set("prebid", expectedPrebid); assertThat(result.getValue()) .containsExactly(BidderBid.of( + "dsp_seat", Bid.builder().mtype(1).impid("1").ext(expectedExt).build(), banner, "USD")); diff --git a/src/test/java/org/prebid/server/bidder/visx/VisxBidderTest.java b/src/test/java/org/prebid/server/bidder/visx/VisxBidderTest.java index d3640d344b7..89a472e67e0 100644 --- a/src/test/java/org/prebid/server/bidder/visx/VisxBidderTest.java +++ b/src/test/java/org/prebid/server/bidder/visx/VisxBidderTest.java @@ -324,6 +324,7 @@ public void makeBidsShouldReturnCorrectBidderBid() throws JsonProcessingExceptio // then final BidderBid expected = BidderBid.of( + "seat", Bid.builder() .id("id") .impid("123") diff --git a/src/test/resources/org/prebid/server/it/cache/update/test-auction-response.json b/src/test/resources/org/prebid/server/it/cache/update/test-auction-response.json index 6b1a866f018..75ece23ec43 100644 --- a/src/test/resources/org/prebid/server/it/cache/update/test-auction-response.json +++ b/src/test/resources/org/prebid/server/it/cache/update/test-auction-response.json @@ -16,7 +16,8 @@ "prebid": { "type": "banner", "meta": { - "adaptercode": "generic" + "adaptercode": "generic", + "seat": "seatId2" }, "targeting": { "hb_pb": "4.20", @@ -49,7 +50,8 @@ "prebid": { "type": "video", "meta": { - "adaptercode": "genericAlias" + "adaptercode": "genericAlias", + "seat": "seatId2" }, "targeting": { "hb_pb": "3.00", diff --git a/src/test/resources/org/prebid/server/it/openrtb2/akcelo/test-auction-akcelo-response.json b/src/test/resources/org/prebid/server/it/openrtb2/akcelo/test-auction-akcelo-response.json index 5268897f633..3f0b8b72af6 100644 --- a/src/test/resources/org/prebid/server/it/openrtb2/akcelo/test-auction-akcelo-response.json +++ b/src/test/resources/org/prebid/server/it/openrtb2/akcelo/test-auction-akcelo-response.json @@ -22,7 +22,8 @@ "prebid": { "type": "banner", "meta": { - "adaptercode": "akcelo" + "adaptercode": "akcelo", + "seat": "adverxo" } } } diff --git a/src/test/resources/org/prebid/server/it/openrtb2/audiencenetwork/test-auction-audiencenetwork-response.json b/src/test/resources/org/prebid/server/it/openrtb2/audiencenetwork/test-auction-audiencenetwork-response.json index 2f513a5ee51..656297e1492 100644 --- a/src/test/resources/org/prebid/server/it/openrtb2/audiencenetwork/test-auction-audiencenetwork-response.json +++ b/src/test/resources/org/prebid/server/it/openrtb2/audiencenetwork/test-auction-audiencenetwork-response.json @@ -17,7 +17,8 @@ "prebid": { "type": "banner", "meta": { - "adaptercode": "audienceNetwork" + "adaptercode": "audienceNetwork", + "seat": "seatId5" } }, "origbidcpm": 9.0 diff --git a/src/test/resources/org/prebid/server/it/openrtb2/cadentaperturemx/test-auction-cadentaperturemx-response.json b/src/test/resources/org/prebid/server/it/openrtb2/cadentaperturemx/test-auction-cadentaperturemx-response.json index f6efa7130f2..918a8a969f7 100644 --- a/src/test/resources/org/prebid/server/it/openrtb2/cadentaperturemx/test-auction-cadentaperturemx-response.json +++ b/src/test/resources/org/prebid/server/it/openrtb2/cadentaperturemx/test-auction-cadentaperturemx-response.json @@ -17,7 +17,8 @@ "prebid": { "type": "banner", "meta": { - "adaptercode": "cadent_aperture_mx" + "adaptercode": "cadent_aperture_mx", + "seat": "12356" } }, "origbidcpm": 2.942808, diff --git a/src/test/resources/org/prebid/server/it/openrtb2/consumable/test-auction-consumable-response.json b/src/test/resources/org/prebid/server/it/openrtb2/consumable/test-auction-consumable-response.json index 08b04afa02b..2a123e244d3 100644 --- a/src/test/resources/org/prebid/server/it/openrtb2/consumable/test-auction-consumable-response.json +++ b/src/test/resources/org/prebid/server/it/openrtb2/consumable/test-auction-consumable-response.json @@ -8,7 +8,7 @@ "id": "8ee514f1-b2b8-4abb-89fd-084437d1e800", "impid": "test-imp-id", "exp": 300, - "price": 0.500000, + "price": 0.5, "adm": "some-test-ad", "crid": "crid_10", "h": 90, @@ -20,7 +20,8 @@ "prebid": { "type": "banner", "meta": { - "adaptercode": "consumable" + "adaptercode": "consumable", + "seat": "bmtm" } } } diff --git a/src/test/resources/org/prebid/server/it/openrtb2/copper6/test-auction-copper6-response.json b/src/test/resources/org/prebid/server/it/openrtb2/copper6/test-auction-copper6-response.json index a0761e1f8f5..d39e9cf9360 100644 --- a/src/test/resources/org/prebid/server/it/openrtb2/copper6/test-auction-copper6-response.json +++ b/src/test/resources/org/prebid/server/it/openrtb2/copper6/test-auction-copper6-response.json @@ -16,7 +16,8 @@ "prebid": { "type": "banner", "meta": { - "adaptercode": "copper6" + "adaptercode": "copper6", + "seat": "adtelligent" } }, "origbidcpm": 8.43 diff --git a/src/test/resources/org/prebid/server/it/openrtb2/easybid/test-auction-easybid-response.json b/src/test/resources/org/prebid/server/it/openrtb2/easybid/test-auction-easybid-response.json index 41a9fc23d1c..48e6545189e 100644 --- a/src/test/resources/org/prebid/server/it/openrtb2/easybid/test-auction-easybid-response.json +++ b/src/test/resources/org/prebid/server/it/openrtb2/easybid/test-auction-easybid-response.json @@ -18,7 +18,8 @@ "prebid": { "type": "banner", "meta": { - "adaptercode": "easybid" + "adaptercode": "easybid", + "seat": "seatId00" } }, "bidType": "banner" diff --git a/src/test/resources/org/prebid/server/it/openrtb2/emx_digital/test-auction-emx_digital-response.json b/src/test/resources/org/prebid/server/it/openrtb2/emx_digital/test-auction-emx_digital-response.json index 0c7409ad7f1..6d0fd2d362a 100644 --- a/src/test/resources/org/prebid/server/it/openrtb2/emx_digital/test-auction-emx_digital-response.json +++ b/src/test/resources/org/prebid/server/it/openrtb2/emx_digital/test-auction-emx_digital-response.json @@ -17,7 +17,8 @@ "prebid": { "type": "banner", "meta": { - "adaptercode": "emx_digital" + "adaptercode": "emx_digital", + "seat":"12356" } }, "origbidcpm": 2.942808, diff --git a/src/test/resources/org/prebid/server/it/openrtb2/emxdigital/test-auction-emxdigital-response.json b/src/test/resources/org/prebid/server/it/openrtb2/emxdigital/test-auction-emxdigital-response.json index 2286e3be52c..e35b7e51ac9 100644 --- a/src/test/resources/org/prebid/server/it/openrtb2/emxdigital/test-auction-emxdigital-response.json +++ b/src/test/resources/org/prebid/server/it/openrtb2/emxdigital/test-auction-emxdigital-response.json @@ -17,7 +17,8 @@ "prebid": { "type": "banner", "meta": { - "adaptercode": "emxdigital" + "adaptercode": "emxdigital", + "seat":"12356" } }, "origbidcpm": 2.942808, diff --git a/src/test/resources/org/prebid/server/it/openrtb2/epsilon/alias/test-auction-epsilon-response.json b/src/test/resources/org/prebid/server/it/openrtb2/epsilon/alias/test-auction-epsilon-response.json index 99c0ed3bfce..6a5f7abae97 100644 --- a/src/test/resources/org/prebid/server/it/openrtb2/epsilon/alias/test-auction-epsilon-response.json +++ b/src/test/resources/org/prebid/server/it/openrtb2/epsilon/alias/test-auction-epsilon-response.json @@ -16,7 +16,8 @@ "prebid": { "type": "banner", "meta": { - "adaptercode": "conversant" + "adaptercode": "conversant", + "seat": "seatId4" } }, "origbidcpm": 5.0 diff --git a/src/test/resources/org/prebid/server/it/openrtb2/epsilon/test-auction-epsilon-response.json b/src/test/resources/org/prebid/server/it/openrtb2/epsilon/test-auction-epsilon-response.json index 1331eadb2b9..c5dca6bbc9a 100644 --- a/src/test/resources/org/prebid/server/it/openrtb2/epsilon/test-auction-epsilon-response.json +++ b/src/test/resources/org/prebid/server/it/openrtb2/epsilon/test-auction-epsilon-response.json @@ -16,7 +16,8 @@ "prebid": { "type": "banner", "meta": { - "adaptercode": "epsilon" + "adaptercode": "epsilon", + "seat": "seat_id" } }, "origbidcpm": 6.0 diff --git a/src/test/resources/org/prebid/server/it/openrtb2/indicue/test-auction-indicue-response.json b/src/test/resources/org/prebid/server/it/openrtb2/indicue/test-auction-indicue-response.json index f373e228ec5..8019b4bbf78 100644 --- a/src/test/resources/org/prebid/server/it/openrtb2/indicue/test-auction-indicue-response.json +++ b/src/test/resources/org/prebid/server/it/openrtb2/indicue/test-auction-indicue-response.json @@ -16,7 +16,8 @@ "prebid": { "type": "banner", "meta": { - "adaptercode": "indicue" + "adaptercode": "indicue", + "seat": "adtelligent" } }, "origbidcpm": 8.43 diff --git a/src/test/resources/org/prebid/server/it/openrtb2/ix/test-auction-ix-response.json b/src/test/resources/org/prebid/server/it/openrtb2/ix/test-auction-ix-response.json index 85e32f2eb24..25f7167f325 100644 --- a/src/test/resources/org/prebid/server/it/openrtb2/ix/test-auction-ix-response.json +++ b/src/test/resources/org/prebid/server/it/openrtb2/ix/test-auction-ix-response.json @@ -14,7 +14,8 @@ "prebid": { "type": "banner", "meta": { - "adaptercode": "ix" + "adaptercode": "ix", + "seat": "seatId6" } }, "origbidcpm": 4.7 diff --git a/src/test/resources/org/prebid/server/it/openrtb2/minutemedia/test-auction-minutemedia-response.json b/src/test/resources/org/prebid/server/it/openrtb2/minutemedia/test-auction-minutemedia-response.json index 3811d587bd1..21126383594 100644 --- a/src/test/resources/org/prebid/server/it/openrtb2/minutemedia/test-auction-minutemedia-response.json +++ b/src/test/resources/org/prebid/server/it/openrtb2/minutemedia/test-auction-minutemedia-response.json @@ -24,7 +24,8 @@ "prebid": { "type": "banner", "meta": { - "adaptercode": "minutemedia" + "adaptercode": "minutemedia", + "seat": "123" } } } diff --git a/src/test/resources/org/prebid/server/it/openrtb2/multi_bid/test-auction-generic-genericAlias-response.json b/src/test/resources/org/prebid/server/it/openrtb2/multi_bid/test-auction-generic-genericAlias-response.json index 59bcbfb5eac..1c9fd0b5217 100644 --- a/src/test/resources/org/prebid/server/it/openrtb2/multi_bid/test-auction-generic-genericAlias-response.json +++ b/src/test/resources/org/prebid/server/it/openrtb2/multi_bid/test-auction-generic-genericAlias-response.json @@ -16,7 +16,8 @@ "prebid": { "type": "video", "meta": { - "adaptercode": "generic" + "adaptercode": "generic", + "seat": "seatId1" }, "targeting": { "hb_size_generic": "300x250", @@ -76,7 +77,8 @@ "prebid": { "type": "video", "meta": { - "adaptercode": "generic" + "adaptercode": "generic", + "seat": "seatId1" }, "targeting": { "hb_pb_rubN2": "8.40", @@ -139,7 +141,8 @@ "prebid": { "type": "video", "meta": { - "adaptercode": "genericAlias" + "adaptercode": "genericAlias", + "seat": "958" }, "targeting": { "hb_pb_genericAlias": "5.50", @@ -193,7 +196,8 @@ "prebid": { "type": "video", "meta": { - "adaptercode": "genericAlias" + "adaptercode": "genericAlias", + "seat": "958" }, "cache": { "bids": { diff --git a/src/test/resources/org/prebid/server/it/openrtb2/nexx360/test-auction-nexx360-response.json b/src/test/resources/org/prebid/server/it/openrtb2/nexx360/test-auction-nexx360-response.json index 4c22dfd3154..a060b783452 100644 --- a/src/test/resources/org/prebid/server/it/openrtb2/nexx360/test-auction-nexx360-response.json +++ b/src/test/resources/org/prebid/server/it/openrtb2/nexx360/test-auction-nexx360-response.json @@ -18,7 +18,8 @@ "prebid": { "type": "banner", "meta": { - "adaptercode": "nexx360" + "adaptercode": "nexx360", + "seat": "seatId00" } }, "bidType": "banner" diff --git a/src/test/resources/org/prebid/server/it/openrtb2/oneaccord/test-auction-1accord-response.json b/src/test/resources/org/prebid/server/it/openrtb2/oneaccord/test-auction-1accord-response.json index e4ea52c0c85..dc126ee3a54 100644 --- a/src/test/resources/org/prebid/server/it/openrtb2/oneaccord/test-auction-1accord-response.json +++ b/src/test/resources/org/prebid/server/it/openrtb2/oneaccord/test-auction-1accord-response.json @@ -18,7 +18,8 @@ "prebid": { "type": "banner", "meta": { - "adaptercode": "1accord" + "adaptercode": "1accord", + "seat": "seatId00" } }, "bidType": "banner" diff --git a/src/test/resources/org/prebid/server/it/openrtb2/openweb/test-auction-openweb-response.json b/src/test/resources/org/prebid/server/it/openrtb2/openweb/test-auction-openweb-response.json index e67cbb854a7..efa6da4de14 100644 --- a/src/test/resources/org/prebid/server/it/openrtb2/openweb/test-auction-openweb-response.json +++ b/src/test/resources/org/prebid/server/it/openrtb2/openweb/test-auction-openweb-response.json @@ -18,7 +18,8 @@ "prebid": { "type": "banner", "meta": { - "adaptercode": "openweb" + "adaptercode": "openweb", + "seat": "seatId00" } } } diff --git a/src/test/resources/org/prebid/server/it/openrtb2/openx/test-auction-openx-response.json b/src/test/resources/org/prebid/server/it/openrtb2/openx/test-auction-openx-response.json index a575e3573a2..331729c1222 100644 --- a/src/test/resources/org/prebid/server/it/openrtb2/openx/test-auction-openx-response.json +++ b/src/test/resources/org/prebid/server/it/openrtb2/openx/test-auction-openx-response.json @@ -16,7 +16,8 @@ "prebid": { "type": "banner", "meta": { - "adaptercode": "openx" + "adaptercode": "openx", + "seat": "seatId00" } }, "origbidcpm": 5.78, diff --git a/src/test/resources/org/prebid/server/it/openrtb2/pgam/test-auction-pgam-response.json b/src/test/resources/org/prebid/server/it/openrtb2/pgam/test-auction-pgam-response.json index 9ccb517cd0b..1e9c7d85b26 100644 --- a/src/test/resources/org/prebid/server/it/openrtb2/pgam/test-auction-pgam-response.json +++ b/src/test/resources/org/prebid/server/it/openrtb2/pgam/test-auction-pgam-response.json @@ -16,7 +16,8 @@ "prebid": { "type": "banner", "meta": { - "adaptercode": "pgam" + "adaptercode": "pgam", + "seat": "adtelligent" } }, "origbidcpm": 8.43 diff --git a/src/test/resources/org/prebid/server/it/openrtb2/prismassp/test-auction-prismassp-response.json b/src/test/resources/org/prebid/server/it/openrtb2/prismassp/test-auction-prismassp-response.json index 83245ca2001..c2db900308a 100644 --- a/src/test/resources/org/prebid/server/it/openrtb2/prismassp/test-auction-prismassp-response.json +++ b/src/test/resources/org/prebid/server/it/openrtb2/prismassp/test-auction-prismassp-response.json @@ -18,7 +18,8 @@ "prebid": { "type": "banner", "meta": { - "adaptercode": "prismassp" + "adaptercode": "prismassp", + "seat": "seatId00" } }, "bidType": "banner" diff --git a/src/test/resources/org/prebid/server/it/openrtb2/pubmatic/test-auction-pubmatic-response.json b/src/test/resources/org/prebid/server/it/openrtb2/pubmatic/test-auction-pubmatic-response.json index 66a4e966a31..c611df70584 100644 --- a/src/test/resources/org/prebid/server/it/openrtb2/pubmatic/test-auction-pubmatic-response.json +++ b/src/test/resources/org/prebid/server/it/openrtb2/pubmatic/test-auction-pubmatic-response.json @@ -18,6 +18,7 @@ "type": "video", "meta": { "adaptercode": "pubmatic", + "seat": "seatId9", "mediaType": "video" } }, diff --git a/src/test/resources/org/prebid/server/it/openrtb2/pulsepoint/test-auction-pulsepoint-response.json b/src/test/resources/org/prebid/server/it/openrtb2/pulsepoint/test-auction-pulsepoint-response.json index 4562ed7bcbd..7b3c197d89e 100644 --- a/src/test/resources/org/prebid/server/it/openrtb2/pulsepoint/test-auction-pulsepoint-response.json +++ b/src/test/resources/org/prebid/server/it/openrtb2/pulsepoint/test-auction-pulsepoint-response.json @@ -16,7 +16,8 @@ "prebid": { "type": "banner", "meta": { - "adaptercode": "pulsepoint" + "adaptercode": "pulsepoint", + "seat": "seatId8" } }, "origbidcpm": 4.75 diff --git a/src/test/resources/org/prebid/server/it/openrtb2/sovrn/test-auction-sovrn-response.json b/src/test/resources/org/prebid/server/it/openrtb2/sovrn/test-auction-sovrn-response.json index 70c6e55cd08..5b4f3aa236f 100644 --- a/src/test/resources/org/prebid/server/it/openrtb2/sovrn/test-auction-sovrn-response.json +++ b/src/test/resources/org/prebid/server/it/openrtb2/sovrn/test-auction-sovrn-response.json @@ -16,7 +16,8 @@ "prebid": { "type": "video", "meta": { - "adaptercode": "sovrn" + "adaptercode": "sovrn", + "seat": "seatId13" } }, "origbidcpm": 5.78 diff --git a/src/test/resources/org/prebid/server/it/openrtb2/sovrnxsp/test-auction-sovrnxsp-response.json b/src/test/resources/org/prebid/server/it/openrtb2/sovrnxsp/test-auction-sovrnxsp-response.json index 3aa06b3a2b1..ca2ced862f8 100644 --- a/src/test/resources/org/prebid/server/it/openrtb2/sovrnxsp/test-auction-sovrnxsp-response.json +++ b/src/test/resources/org/prebid/server/it/openrtb2/sovrnxsp/test-auction-sovrnxsp-response.json @@ -18,7 +18,8 @@ "prebid": { "type": "video", "meta": { - "adaptercode": "sovrnXsp" + "adaptercode": "sovrnXsp", + "seat": "seatId13" } }, "origbidcpm": 5.78 diff --git a/src/test/resources/org/prebid/server/it/openrtb2/startio/test-auction-startio-response.json b/src/test/resources/org/prebid/server/it/openrtb2/startio/test-auction-startio-response.json index 6d1805379ea..ea89d34df65 100644 --- a/src/test/resources/org/prebid/server/it/openrtb2/startio/test-auction-startio-response.json +++ b/src/test/resources/org/prebid/server/it/openrtb2/startio/test-auction-startio-response.json @@ -28,7 +28,8 @@ "prebid": { "type": "video", "meta": { - "adaptercode": "startio" + "adaptercode": "startio", + "seat": "start.io" } } } diff --git a/src/test/resources/org/prebid/server/it/openrtb2/storedresponse/test-auction-response.json b/src/test/resources/org/prebid/server/it/openrtb2/storedresponse/test-auction-response.json index 0e09537a4c7..d06a0f0cd34 100644 --- a/src/test/resources/org/prebid/server/it/openrtb2/storedresponse/test-auction-response.json +++ b/src/test/resources/org/prebid/server/it/openrtb2/storedresponse/test-auction-response.json @@ -16,7 +16,8 @@ "prebid": { "type": "banner", "meta": { - "adaptercode": "generic" + "adaptercode": "generic", + "seat": "magnite" }, "targeting": { "hb_size_generic": "300x250", diff --git a/src/test/resources/org/prebid/server/it/openrtb2/taboola/test-auction-taboola-response.json b/src/test/resources/org/prebid/server/it/openrtb2/taboola/test-auction-taboola-response.json index a90d55133e1..1a51d214d33 100644 --- a/src/test/resources/org/prebid/server/it/openrtb2/taboola/test-auction-taboola-response.json +++ b/src/test/resources/org/prebid/server/it/openrtb2/taboola/test-auction-taboola-response.json @@ -17,7 +17,8 @@ "prebid": { "type": "banner", "meta": { - "adaptercode": "taboola" + "adaptercode": "taboola", + "seat": "adtelligent" } } } @@ -36,7 +37,8 @@ "prebid": { "type": "native", "meta": { - "adaptercode": "taboola" + "adaptercode": "taboola", + "seat": "adtelligent" } } } diff --git a/src/test/resources/org/prebid/server/it/openrtb2/triplelift/test-auction-triplelift-response.json b/src/test/resources/org/prebid/server/it/openrtb2/triplelift/test-auction-triplelift-response.json index 3a2447d9657..7e68e2476dd 100644 --- a/src/test/resources/org/prebid/server/it/openrtb2/triplelift/test-auction-triplelift-response.json +++ b/src/test/resources/org/prebid/server/it/openrtb2/triplelift/test-auction-triplelift-response.json @@ -22,7 +22,8 @@ "prebid": { "type": "banner", "meta": { - "adaptercode": "triplelift" + "adaptercode": "triplelift", + "seat": "958" } }, "origbidcpm": 0.5, diff --git a/src/test/resources/org/prebid/server/it/openrtb2/tripleliftnative/test-auction-triplelift-native-response.json b/src/test/resources/org/prebid/server/it/openrtb2/tripleliftnative/test-auction-triplelift-native-response.json index 7c6a3dd8f39..6e3dc8f4c13 100644 --- a/src/test/resources/org/prebid/server/it/openrtb2/tripleliftnative/test-auction-triplelift-native-response.json +++ b/src/test/resources/org/prebid/server/it/openrtb2/tripleliftnative/test-auction-triplelift-native-response.json @@ -22,7 +22,8 @@ "prebid": { "type": "native", "meta": { - "adaptercode": "triplelift_native" + "adaptercode": "triplelift_native", + "seat": "958" } }, "origbidcpm": 0.5, diff --git a/src/test/resources/org/prebid/server/it/openrtb2/visx/test-auction-visx-response.json b/src/test/resources/org/prebid/server/it/openrtb2/visx/test-auction-visx-response.json index 3982971cb7f..b41a31169d8 100644 --- a/src/test/resources/org/prebid/server/it/openrtb2/visx/test-auction-visx-response.json +++ b/src/test/resources/org/prebid/server/it/openrtb2/visx/test-auction-visx-response.json @@ -19,7 +19,8 @@ "prebid": { "type": "banner", "meta": { - "adaptercode": "visx" + "adaptercode": "visx", + "seat": "51" } }, "origbidcpm": 0.5 diff --git a/src/test/resources/org/prebid/server/it/openrtb2/ybidder/test-auction-ybidder-response.json b/src/test/resources/org/prebid/server/it/openrtb2/ybidder/test-auction-ybidder-response.json index a581bb2de9a..2c9eb662cb0 100644 --- a/src/test/resources/org/prebid/server/it/openrtb2/ybidder/test-auction-ybidder-response.json +++ b/src/test/resources/org/prebid/server/it/openrtb2/ybidder/test-auction-ybidder-response.json @@ -18,7 +18,8 @@ "prebid": { "type": "banner", "meta": { - "adaptercode": "ybidder" + "adaptercode": "ybidder", + "seat": "seatId00" } }, "bidType": "banner"