github.com/prebid/prebid-server@v0.275.0/openrtb_ext/deal_tier.go (about)

     1  package openrtb_ext
     2  
     3  import (
     4  	"encoding/json"
     5  
     6  	"github.com/prebid/openrtb/v19/openrtb2"
     7  )
     8  
     9  // DealTier defines the configuration of a deal tier.
    10  type DealTier struct {
    11  	// Prefix specifies the beginning of the hb_pb_cat_dur targeting key value. Must be non-empty.
    12  	Prefix string `json:"prefix"`
    13  
    14  	// MinDealTier specifies the minimum deal priority value (inclusive) that must be met for the targeting
    15  	// key value to be modified. Must be greater than 0.
    16  	MinDealTier int `json:"minDealTier"`
    17  }
    18  
    19  // DealTierBidderMap defines a correlation between bidders and deal tiers.
    20  type DealTierBidderMap map[BidderName]DealTier
    21  
    22  // ReadDealTiersFromImp returns a map of bidder deal tiers read from the impression of an original request (not split / cleaned).
    23  func ReadDealTiersFromImp(imp openrtb2.Imp) (DealTierBidderMap, error) {
    24  	dealTiers := make(DealTierBidderMap)
    25  
    26  	if len(imp.Ext) == 0 {
    27  		return dealTiers, nil
    28  	}
    29  
    30  	var impPrebidExt struct {
    31  		Prebid struct {
    32  			Bidders map[string]struct {
    33  				DealTier *DealTier `json:"dealTier"`
    34  			} `json:"bidder"`
    35  		} `json:"prebid"`
    36  	}
    37  	if err := json.Unmarshal(imp.Ext, &impPrebidExt); err != nil {
    38  		return nil, err
    39  	}
    40  	for bidder, param := range impPrebidExt.Prebid.Bidders {
    41  		if param.DealTier != nil {
    42  			dealTiers[BidderName(bidder)] = *param.DealTier
    43  		}
    44  	}
    45  
    46  	return dealTiers, nil
    47  }