Skip to content

Commit

Permalink
Mabidder: Add Adapter (#2673)
Browse files Browse the repository at this point in the history
  • Loading branch information
AntoxaAntoxic authored Oct 16, 2023
1 parent c2c4217 commit 9719abc
Show file tree
Hide file tree
Showing 14 changed files with 591 additions and 0 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,76 @@
package org.prebid.server.bidder.mabidder;

import com.iab.openrtb.request.BidRequest;
import com.iab.openrtb.response.Bid;
import org.prebid.server.bidder.Bidder;
import org.prebid.server.bidder.mabidder.response.MabidderBidResponse;
import org.prebid.server.bidder.mabidder.response.MabidderResponse;
import org.prebid.server.bidder.mabidder.response.Meta;
import org.prebid.server.bidder.model.BidderBid;
import org.prebid.server.bidder.model.BidderCall;
import org.prebid.server.bidder.model.BidderError;
import org.prebid.server.bidder.model.HttpRequest;
import org.prebid.server.bidder.model.Result;
import org.prebid.server.exception.PreBidException;
import org.prebid.server.json.DecodeException;
import org.prebid.server.json.JacksonMapper;
import org.prebid.server.proto.openrtb.ext.response.BidType;
import org.prebid.server.util.BidderUtil;
import org.prebid.server.util.HttpUtil;
import org.prebid.server.util.ObjectUtil;

import java.util.List;
import java.util.Objects;

public class MabidderBidder implements Bidder<BidRequest> {

private final String endpointUrl;
private final JacksonMapper mapper;

public MabidderBidder(String endpointUrl, JacksonMapper mapper) {
this.endpointUrl = HttpUtil.validateUrl(Objects.requireNonNull(endpointUrl));
this.mapper = Objects.requireNonNull(mapper);
}

@Override
public Result<List<HttpRequest<BidRequest>>> makeHttpRequests(BidRequest request) {
return Result.withValue(BidderUtil.defaultRequest(request, endpointUrl, mapper));
}

@Override
public Result<List<BidderBid>> makeBids(BidderCall<BidRequest> httpCall, BidRequest bidRequest) {
try {
final List<MabidderBidResponse> bidResponses = mapper.decodeValue(
httpCall.getResponse().getBody(),
MabidderResponse.class)
.getBidResponses();
return Result.withValues(extractBids(bidResponses));
} catch (DecodeException e) {
return Result.withError(BidderError.badServerResponse("Bad Server Response"));
} catch (PreBidException e) {
return Result.withError(BidderError.badServerResponse(e.getMessage()));
}
}

private static List<BidderBid> extractBids(List<MabidderBidResponse> bidResponses) {
return bidResponses
.stream()
.map(bidResponse -> BidderBid.of(makeBid(bidResponse), BidType.banner, bidResponse.getCurrency()))
.toList();
}

private static Bid makeBid(MabidderBidResponse bidResponse) {
return Bid.builder()
.id(bidResponse.getRequestId())
.impid(bidResponse.getRequestId())
.price(bidResponse.getCpm())
.adm(bidResponse.getAd())
.w(bidResponse.getWidth())
.h(bidResponse.getHeight())
.crid(bidResponse.getCreativeId())
.dealid(bidResponse.getDealId())
.adomain(ObjectUtil.getIfNotNull(bidResponse.getMeta(), Meta::getAdDomains))
.build();
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
package org.prebid.server.bidder.mabidder.response;

import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Builder;
import lombok.Value;

import java.math.BigDecimal;

@Value
@Builder(toBuilder = true)
public class MabidderBidResponse {

@JsonProperty("requestId")
String requestId;

String currency;

Integer width;

Integer height;

@JsonProperty("creativeId")
String creativeId;

@JsonProperty("dealId")
String dealId;

@JsonProperty("netRevenue")
Boolean netRevenue;

Integer ttl;

String ad;

@JsonProperty("mediaType")
String mediaType;

Meta meta;

BigDecimal cpm;

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package org.prebid.server.bidder.mabidder.response;

import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Value;

import java.util.List;

@Value(staticConstructor = "of")
public class MabidderResponse {

@JsonProperty("Responses")
List<MabidderBidResponse> bidResponses;

}
15 changes: 15 additions & 0 deletions src/main/java/org/prebid/server/bidder/mabidder/response/Meta.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
package org.prebid.server.bidder.mabidder.response;

import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Value;

import java.util.List;

@Value(staticConstructor = "of")
public class Meta {

@JsonProperty("advertiserDomains")
List<String> adDomains;

}

Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
package org.prebid.server.spring.config.bidder;

import org.prebid.server.bidder.BidderDeps;
import org.prebid.server.bidder.mabidder.MabidderBidder;
import org.prebid.server.json.JacksonMapper;
import org.prebid.server.spring.config.bidder.model.BidderConfigurationProperties;
import org.prebid.server.spring.config.bidder.util.BidderDepsAssembler;
import org.prebid.server.spring.config.bidder.util.UsersyncerCreator;
import org.prebid.server.spring.env.YamlPropertySourceFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;

import javax.validation.constraints.NotBlank;

@Configuration
@PropertySource(value = "classpath:/bidder-config/mabidder.yaml", factory = YamlPropertySourceFactory.class)
public class MabidderConfiguration {

private static final String BIDDER_NAME = "mabidder";

@Bean("mabidderConfigurationProperties")
@ConfigurationProperties("adapters.mabidder")
BidderConfigurationProperties configurationProperties() {
return new BidderConfigurationProperties();
}

@Bean
BidderDeps mabidderDeps(BidderConfigurationProperties mabidderConfigurationProperties,
@NotBlank @Value("${external-url}") String externalUrl,
JacksonMapper mapper) {

return BidderDepsAssembler.forBidder(BIDDER_NAME)
.withConfig(mabidderConfigurationProperties)
.usersyncerCreator(UsersyncerCreator.create(externalUrl))
.bidderCreator(config -> new MabidderBidder(config.getEndpoint(), mapper))
.assemble();
}
}
12 changes: 12 additions & 0 deletions src/main/resources/bidder-config/mabidder.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
adapters:
mabidder:
endpoint: https://prebid.ecdrsvc.com/pbs
endpoint-compression: gzip
meta-info:
maintainer-email: [email protected]
app-media-types:
- banner
site-media-types:
- banner
supported-vendors:
vendor-id: 0
13 changes: 13 additions & 0 deletions src/main/resources/static/bidder-params/mabidder.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
{
"$schema": "http://json-schema.org/draft-04/schema#",
"title": "Mabidder Adapter Params",
"description": "A schema which validates params accepted by the Mabidder adapter",
"type": "object",
"properties": {
"ppid": {
"type": "string",
"description": "Publisher Placement ID"
}
},
"required": ["ppid"]
}
Loading

0 comments on commit 9719abc

Please sign in to comment.