Skip to content

Commit 950b608

Browse files
AntoxaAntoxicmarki1anosulzhenko
authored
Bid adjustments rules matching strategy (#3939)
Co-authored-by: Markiyan Mykush <95693607+marki1an@users.noreply.github.com> Co-authored-by: markiian <mmykush@magnite.com> Co-authored-by: osulzhenko <osulzhenko@magnite.com>
1 parent 6a3ab79 commit 950b608

13 files changed

Lines changed: 691 additions & 47 deletions

File tree

src/main/java/org/prebid/server/bidadjustments/BidAdjustmentsProcessor.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -106,6 +106,7 @@ private BidderBid applyBidAdjustments(BidderBid bidderBid,
106106

107107
final Price priceWithAdjustmentsApplied = applyBidAdjustmentRules(
108108
priceWithFactorsApplied,
109+
bidderBid.getSeat(),
109110
bidder,
110111
bidRequest,
111112
mediaType,
@@ -209,6 +210,7 @@ private static BigDecimal adjustPrice(BigDecimal priceAdjustmentFactor, BigDecim
209210
}
210211

211212
private Price applyBidAdjustmentRules(Price bidPrice,
213+
String seat,
212214
String bidder,
213215
BidRequest bidRequest,
214216
ImpMediaType mediaType,
@@ -218,6 +220,7 @@ private Price applyBidAdjustmentRules(Price bidPrice,
218220
bidPrice,
219221
bidRequest,
220222
mediaType,
223+
seat,
221224
bidder,
222225
dealId);
223226
}

src/main/java/org/prebid/server/bidadjustments/BidAdjustmentsResolver.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,11 +27,12 @@ public BidAdjustmentsResolver(CurrencyConversionService currencyService,
2727
public Price resolve(Price initialPrice,
2828
BidRequest bidRequest,
2929
ImpMediaType targetMediaType,
30+
String targetSeat,
3031
String targetBidder,
3132
String targetDealId) {
3233

3334
final List<BidAdjustmentsRule> rules = bidAdjustmentsRulesResolver.resolve(
34-
bidRequest, targetMediaType, targetBidder, targetDealId);
35+
bidRequest, targetMediaType, targetSeat, targetBidder, targetDealId);
3536

3637
return adjustPrice(initialPrice, rules, bidRequest);
3738
}

src/main/java/org/prebid/server/bidadjustments/BidAdjustmentsRulesResolver.java

Lines changed: 20 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -38,13 +38,18 @@ public BidAdjustmentsRulesResolver(JacksonMapper mapper) {
3838
this.mapper = Objects.requireNonNull(mapper).mapper();
3939
}
4040

41+
public List<BidAdjustmentsRule> resolve(BidRequest bidRequest, ImpMediaType targetMediaType, String targetBidder) {
42+
return resolve(bidRequest, targetMediaType, null, targetBidder, null);
43+
}
44+
4145
public List<BidAdjustmentsRule> resolve(BidRequest bidRequest,
4246
ImpMediaType targetMediaType,
47+
String targetSeat,
4348
String targetBidder,
4449
String targetDealId) {
4550

4651
final BidAdjustmentsRules bidAdjustments = BidAdjustmentsRules.of(extractBidAdjustments(bidRequest));
47-
return findRules(bidAdjustments, targetMediaType, targetBidder, targetDealId);
52+
return findRules(bidAdjustments, targetMediaType, targetSeat, targetBidder, targetDealId);
4853
}
4954

5055
private BidAdjustments extractBidAdjustments(BidRequest bidRequest) {
@@ -57,22 +62,32 @@ private BidAdjustments extractBidAdjustments(BidRequest bidRequest) {
5762

5863
private List<BidAdjustmentsRule> findRules(BidAdjustmentsRules bidAdjustments,
5964
ImpMediaType targetMediaType,
65+
String targetSeat,
6066
String targetBidder,
6167
String targetDealId) {
6268

6369
final Map<String, List<BidAdjustmentsRule>> rules = bidAdjustments.getRules();
6470
final PrebidConfigSource source = SimpleSource.of(WILDCARD, DELIMITER, rules.keySet());
65-
final PrebidConfigParameters parameters = createParameters(targetMediaType, targetBidder, targetDealId);
71+
final PrebidConfigParameters parameters = createParameters(
72+
targetMediaType, targetSeat, targetBidder, targetDealId);
6673

6774
final String rule = matchingStrategy.match(source, parameters);
6875
return rule == null ? Collections.emptyList() : rules.get(rule);
6976
}
7077

71-
private PrebidConfigParameters createParameters(ImpMediaType mediaType, String bidder, String dealId) {
78+
private PrebidConfigParameters createParameters(ImpMediaType mediaType,
79+
String seat,
80+
String bidder,
81+
String dealId) {
82+
7283
final List<PrebidConfigParameter> conditionsMatchers = List.of(
7384
SimpleDirectParameter.of(mediaType.toString()),
74-
SimpleDirectParameter.of(bidder),
75-
StringUtils.isNotBlank(dealId) ? SimpleDirectParameter.of(dealId) : PrebidConfigParameter.wildcard());
85+
StringUtils.isBlank(seat)
86+
? SimpleDirectParameter.of(bidder)
87+
: SimpleDirectParameter.of(List.of(seat, bidder)),
88+
StringUtils.isBlank(dealId)
89+
? PrebidConfigParameter.wildcard()
90+
: SimpleDirectParameter.of(dealId));
7691

7792
return SimpleParameters.of(conditionsMatchers);
7893
}

src/main/java/org/prebid/server/bidadjustments/FloorAdjustmentsResolver.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -56,8 +56,7 @@ public Price resolve(Price initialBidFloorPrice,
5656
String targetBidder) {
5757

5858
final List<BidAdjustmentsRule> rules = bidAdjustmentsRulesResolver.resolve(
59-
bidRequest, targetMediaType, targetBidder, null);
60-
59+
bidRequest, targetMediaType, targetBidder);
6160
return reversePrice(initialBidFloorPrice, rules, bidRequest);
6261
}
6362

src/main/java/org/prebid/server/bidadjustments/model/BidAdjustmentsRules.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,11 @@
22

33
import lombok.Value;
44
import org.apache.commons.collections4.MapUtils;
5+
import org.apache.commons.collections4.map.CaseInsensitiveMap;
56
import org.prebid.server.bidadjustments.BidAdjustmentRulesValidator;
67
import org.prebid.server.bidadjustments.BidAdjustmentsRulesResolver;
78

89
import java.util.Collections;
9-
import java.util.HashMap;
1010
import java.util.List;
1111
import java.util.Map;
1212

@@ -23,7 +23,7 @@ public static BidAdjustmentsRules of(BidAdjustments bidAdjustments) {
2323
return BidAdjustmentsRules.of(Collections.emptyMap());
2424
}
2525

26-
final Map<String, List<BidAdjustmentsRule>> rules = new HashMap<>();
26+
final Map<String, List<BidAdjustmentsRule>> rules = new CaseInsensitiveMap<>();
2727

2828
final Map<String, Map<String, Map<String, List<BidAdjustmentsRule>>>> mediatypes =
2929
bidAdjustments.getRules();

src/main/java/org/prebid/server/util/dsl/config/impl/MostAccurateCombinationStrategy.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,10 +14,10 @@
1414
import java.util.ArrayList;
1515
import java.util.Collection;
1616
import java.util.Collections;
17-
import java.util.HashSet;
1817
import java.util.Iterator;
1918
import java.util.List;
2019
import java.util.Set;
20+
import java.util.TreeSet;
2121

2222
/**
2323
* Priority order for four column rule sets:
@@ -174,7 +174,7 @@ private static List<Integer> generateWildcardsIndices(Iterable<PrebidConfigParam
174174
}
175175

176176
private static Set<String> toSet(Iterable<String> iterable) {
177-
return iterable instanceof Set<String> set ? set : fill(new HashSet<>(), iterable);
177+
return fill(new TreeSet<>(String.CASE_INSENSITIVE_ORDER), iterable);
178178
}
179179

180180
private static <E, C extends Collection<E>> C fill(C destination, Iterable<E> source) {
Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,8 @@
11
package org.prebid.server.functional.model.request.auction
22

33
import com.fasterxml.jackson.annotation.JsonProperty
4-
import com.fasterxml.jackson.databind.PropertyNamingStrategies
5-
import com.fasterxml.jackson.databind.annotation.JsonNaming
64
import groovy.transform.ToString
75

8-
@JsonNaming(PropertyNamingStrategies.LowerCaseStrategy)
96
@ToString(includeNames = true, ignoreNulls = true)
107
class BidAdjustmentRule {
118

@@ -14,4 +11,9 @@ class BidAdjustmentRule {
1411
Map<String, List<AdjustmentRule>> generic
1512
Map<String, List<AdjustmentRule>> openx
1613
Map<String, List<AdjustmentRule>> alias
14+
@JsonProperty("ALIAS")
15+
Map<String, List<AdjustmentRule>> aliasUpperCase
16+
@JsonProperty("AlIaS")
17+
Map<String, List<AdjustmentRule>> aliasCamelCase
18+
Map<String, List<AdjustmentRule>> amx
1719
}

0 commit comments

Comments
 (0)