Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
27 changes: 24 additions & 3 deletions src/main/java/org/prebid/server/auction/BidResponseCreator.java
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -436,6 +437,7 @@ private List<BidderResponseInfo> toBidderResponseInfos(CategoryMappingResult cat
bidderBid.getBid(),
bidderBid.getType(),
seat,
bidderBid.getOriginalSeat(),
imps,
bidder,
categoryMappingResult,
Expand Down Expand Up @@ -464,6 +466,7 @@ private List<BidderResponseInfo> toBidderResponseInfos(CategoryMappingResult cat
private BidInfo toBidInfo(Bid bid,
BidType type,
String seat,
String originalSeat,
List<Imp> imps,
String bidder,
CategoryMappingResult categoryMappingResult,
Expand All @@ -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)
Expand Down Expand Up @@ -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)
Expand All @@ -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()
Expand Down
2 changes: 2 additions & 0 deletions src/main/java/org/prebid/server/auction/model/BidInfo.java
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,8 @@ public class BidInfo {

String seat;

String originalSeat;

BidType bidType;

CacheInfo cacheInfo;
Expand Down
9 changes: 4 additions & 5 deletions src/main/java/org/prebid/server/bidder/GenericBidder.java
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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;
Expand Down Expand Up @@ -60,10 +58,11 @@ private static List<BidderBid> 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();
}
}
16 changes: 7 additions & 9 deletions src/main/java/org/prebid/server/bidder/aax/AaxBidder.java
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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;
Expand Down Expand Up @@ -71,24 +69,23 @@ private List<BidderBid> 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<Imp> imps, List<BidderError> errors) {
private BidderBid resolveBidderBid(Bid bid, List<Imp> imps, List<BidderError> errors, String originalSeat) {
final BidType bidType;
try {
bidType = getBidType(bid, imps);
} catch (PreBidException e) {
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<Imp> imps) {
Expand Down Expand Up @@ -138,4 +135,5 @@ private static BidType bidTypeFromImp(String impId, List<Imp> imps) {

return bidType;
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -59,16 +59,17 @@ private List<BidderBid> extractBids(BidResponse bidResponse, List<BidderError> 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<BidderError> errors) {
private BidderBid makeBid(Bid bid, String currency, List<BidderError> 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)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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;
Expand Down Expand Up @@ -91,10 +89,10 @@ private static List<BidderBid> extractBids(BidResponse bidResponse) {
private static List<BidderBid> 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();
}

Expand Down
15 changes: 6 additions & 9 deletions src/main/java/org/prebid/server/bidder/adf/AdfBidder.java
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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;
Expand Down Expand Up @@ -124,16 +122,15 @@ private List<BidderBid> extractBids(BidResponse bidResponse, List<BidderError> 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<BidderError> errors) {
private BidderBid makeBidderBid(Bid bid, String bidCurrency, List<BidderError> 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;
Expand All @@ -149,7 +146,7 @@ private BidderBid makeBidderBid(Bid bid, String bidCurrency, List<BidderError> e
return null;
}

return BidderBid.of(bid, bidType, bidCurrency);
return BidderBid.of(originalSeat, bid, bidType, bidCurrency);
}

private void addMediaTypeParseError(List<BidderError> errors, String impId) {
Expand Down
16 changes: 9 additions & 7 deletions src/main/java/org/prebid/server/bidder/adhese/AdheseBidder.java
Original file line number Diff line number Diff line change
Expand Up @@ -121,34 +121,36 @@ private static Map<String, List<String>> getSlotParameter(ExtImpAdhese extImpAdh
public Result<List<BidderBid>> makeBids(BidderCall<BidRequest> httpCall, BidRequest bidRequest) {
try {
final BidResponse bidResponse = mapper.decodeValue(httpCall.getResponse().getBody(), BidResponse.class);
final Optional<Bid> optionalBid = getBid(bidResponse);
final Optional<SeatBid> 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) {
return Result.withError(BidderError.badServerResponse(e.getMessage()));
}
}

private static Optional<Bid> getBid(BidResponse bidResponse) {
private static Optional<SeatBid> 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();
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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;
Expand Down Expand Up @@ -238,17 +236,18 @@ private static List<BidderBid> extractBids(BidResponse bidResponse) {

private static List<BidderBid> 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<String> 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<String> getMfSuffix(String impId) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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;
Expand Down Expand Up @@ -228,11 +226,13 @@ private static List<BidderBid> extractBids(BidRequest bidRequest, BidResponse bi

private static List<BidderBid> 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();
}

Expand Down
Loading
Loading