Skip to content

Commit

Permalink
Alkimi: Resolve AUCTION_PRICE macro
Browse files Browse the repository at this point in the history
  • Loading branch information
kalidas-alkimi authored Sep 13, 2023
1 parent eefe82b commit 507fdf5
Show file tree
Hide file tree
Showing 2 changed files with 46 additions and 1 deletion.
24 changes: 23 additions & 1 deletion src/main/java/org/prebid/server/bidder/alkimi/AlkimiBidder.java
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,11 @@
import com.fasterxml.jackson.databind.node.ObjectNode;
import com.iab.openrtb.request.BidRequest;
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;
import org.prebid.server.bidder.model.BidderCall;
Expand All @@ -23,6 +25,7 @@
import org.prebid.server.util.BidderUtil;
import org.prebid.server.util.HttpUtil;

import java.math.BigDecimal;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
Expand All @@ -35,6 +38,7 @@ public class AlkimiBidder implements Bidder<BidRequest> {

private static final String TYPE_BANNER = "Banner";
private static final String TYPE_VIDEO = "Video";
private static final String PRICE_MACRO = "${AUCTION_PRICE}";

private static final TypeReference<ExtPrebid<?, ExtImpAlkimi>> ALKIMI_EXT_TYPE_REFERENCE = new TypeReference<>() {
};
Expand Down Expand Up @@ -106,7 +110,7 @@ private static List<BidderBid> bidsFromResponse(BidRequest bidRequest, BidRespon
.map(SeatBid::getBid)
.filter(Objects::nonNull)
.flatMap(Collection::stream)
.map(bid -> BidderBid.of(bid, getBidType(bid.getImpid(), bidRequest.getImp()), bidResponse.getCur()))
.map(bid -> resolveBidderBid(bidResponse.getCur(), bidRequest.getImp(), bid))
.toList();
}

Expand All @@ -127,4 +131,22 @@ private static BidType getBidType(String impId, List<Imp> imps) {
}
return bidType;
}

private static Bid resolveMacros(Bid bid) {
final BigDecimal price = bid.getPrice();
final String priceAsString = price != null ? price.toPlainString() : "0";

return bid.toBuilder()
.nurl(StringUtils.replace(bid.getNurl(), PRICE_MACRO, priceAsString))
.adm(StringUtils.replace(bid.getAdm(), PRICE_MACRO, priceAsString))
.build();
}

private static BidderBid resolveBidderBid(String currency, List<Imp> imps, Bid bid) {
try {
return BidderBid.of(resolveMacros(bid), getBidType(bid.getImpid(), imps), currency);
} catch (PreBidException e) {
return null;
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@
import static java.util.function.Function.identity;
import static org.assertj.core.api.Assertions.assertThat;
import static org.assertj.core.api.Assertions.assertThatIllegalArgumentException;
import static org.assertj.core.api.Assertions.tuple;
import static org.prebid.server.proto.openrtb.ext.response.BidType.audio;
import static org.prebid.server.proto.openrtb.ext.response.BidType.banner;
import static org.prebid.server.proto.openrtb.ext.response.BidType.video;
Expand Down Expand Up @@ -203,6 +204,28 @@ public void makeBidsShouldReturnBidsForBannerAndVideoImps() throws JsonProcessin
assertThat(result.getValue()).contains(BidderBid.of(givenAudioBid(identity()), audio, null));
}

@Test
public void makeBidsShouldReturnBidWithResolvedMacros() throws JsonProcessingException {
final BidderCall<BidRequest> httpCall = givenHttpCall(
givenBidRequest(),
mapper.writeValueAsString(givenBidResponse(
bidBuilder -> bidBuilder
.nurl("nurl:${AUCTION_PRICE}")
.adm("adm:${AUCTION_PRICE}")
.price(BigDecimal.TEN))));

final Result<List<BidderBid>> result = target.makeBids(httpCall, null);

assertThat(result.getErrors()).isEmpty();
assertThat(result.getValue())
.extracting(BidderBid::getBid)
.extracting(Bid::getNurl, Bid::getAdm)
.containsExactly(
tuple("nurl:10", "adm:10"),
tuple("nurl:10", "adm:10"),
tuple("nurl:10", "adm:10"));
}

private static BidRequest givenBidRequest() {
return givenBidRequest(identity());
}
Expand Down

0 comments on commit 507fdf5

Please sign in to comment.