Skip to content

Commit 3d55952

Browse files
przemkaczmarekosulzhenko
authored andcommitted
NextMillennium: Adapter and server version (#3814)
1 parent 2a731d4 commit 3d55952

File tree

6 files changed

+287
-211
lines changed

6 files changed

+287
-211
lines changed

src/main/java/org/prebid/server/bidder/nextmillennium/NextMillenniumBidder.java

Lines changed: 56 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@
1212
import com.iab.openrtb.response.BidResponse;
1313
import com.iab.openrtb.response.SeatBid;
1414
import io.vertx.core.MultiMap;
15-
import io.vertx.core.http.HttpMethod;
1615
import org.apache.commons.collections4.CollectionUtils;
1716
import org.apache.commons.lang3.ObjectUtils;
1817
import org.apache.commons.lang3.StringUtils;
@@ -22,17 +21,22 @@
2221
import org.prebid.server.bidder.model.BidderError;
2322
import org.prebid.server.bidder.model.HttpRequest;
2423
import org.prebid.server.bidder.model.Result;
24+
import org.prebid.server.bidder.nextmillennium.proto.NextMillenniumExt;
25+
import org.prebid.server.bidder.nextmillennium.proto.NextMillenniumExtBidder;
2526
import org.prebid.server.exception.PreBidException;
2627
import org.prebid.server.json.DecodeException;
2728
import org.prebid.server.json.JacksonMapper;
2829
import org.prebid.server.proto.openrtb.ext.ExtPrebid;
2930
import org.prebid.server.proto.openrtb.ext.request.ExtRequest;
3031
import org.prebid.server.proto.openrtb.ext.request.ExtRequestPrebid;
32+
import org.prebid.server.proto.openrtb.ext.request.ExtRequestPrebidServer;
3133
import org.prebid.server.proto.openrtb.ext.request.ExtStoredRequest;
3234
import org.prebid.server.proto.openrtb.ext.request.nextmillennium.ExtImpNextMillennium;
3335
import org.prebid.server.proto.openrtb.ext.response.BidType;
36+
import org.prebid.server.util.BidderUtil;
3437
import org.prebid.server.util.HttpUtil;
3538
import org.prebid.server.util.ObjectUtil;
39+
import org.prebid.server.version.PrebidVersionProvider;
3640

3741
import java.util.ArrayList;
3842
import java.util.Collection;
@@ -46,15 +50,22 @@ public class NextMillenniumBidder implements Bidder<BidRequest> {
4650
new TypeReference<>() {
4751
};
4852

53+
private static final String NM_ADAPTER_VERSION = "v1.0.0";
54+
4955
private final String endpointUrl;
5056
private final JacksonMapper mapper;
5157
private final List<String> nmmFlags;
58+
private final PrebidVersionProvider versionProvider;
59+
60+
public NextMillenniumBidder(String endpointUrl,
61+
JacksonMapper mapper,
62+
List<String> nmmFlags,
63+
PrebidVersionProvider versionProvider) {
5264

53-
public NextMillenniumBidder(String endpointUrl, JacksonMapper mapper, List<String> nmmFlags) {
5465
this.endpointUrl = HttpUtil.validateUrl(Objects.requireNonNull(endpointUrl));
5566
this.mapper = Objects.requireNonNull(mapper);
5667
this.nmmFlags = nmmFlags;
57-
68+
this.versionProvider = Objects.requireNonNull(versionProvider);
5869
}
5970

6071
@Override
@@ -70,7 +81,12 @@ public final Result<List<HttpRequest<BidRequest>>> makeHttpRequests(BidRequest b
7081
errors.add(BidderError.badInput(e.getMessage()));
7182
continue;
7283
}
73-
httpRequests.add(makeHttpRequest(updateBidRequest(bidRequest, extImpNextMillennium)));
84+
final BidRequest updatedRequest = updateBidRequest(bidRequest, extImpNextMillennium);
85+
httpRequests.add(BidderUtil.defaultRequest(
86+
updatedRequest,
87+
headers(),
88+
endpointUrl,
89+
mapper));
7490
}
7591

7692
return errors.isEmpty() ? Result.withValues(httpRequests) : Result.withErrors(errors);
@@ -84,31 +100,19 @@ private ExtImpNextMillennium convertExt(ObjectNode impExt) {
84100
}
85101
}
86102

87-
private BidRequest updateBidRequest(BidRequest bidRequest, ExtImpNextMillennium ext) {
88-
final ExtStoredRequest storedRequest = ExtStoredRequest.of(resolveStoredRequestId(bidRequest, ext));
89-
90-
final ExtRequestPrebid createdExtRequestPrebid = ExtRequestPrebid.builder()
91-
.storedrequest(storedRequest)
92-
.build();
93-
94-
final ExtRequestPrebid extRequestPrebid = Optional.of(bidRequest)
95-
.map(BidRequest::getExt)
103+
private BidRequest updateBidRequest(BidRequest bidRequest, ExtImpNextMillennium extImp) {
104+
final String soredRequestId = resolveStoredRequestId(bidRequest, extImp);
105+
final ExtRequestPrebidServer extRequestPrebidServer = Optional.ofNullable(bidRequest.getExt())
96106
.map(ExtRequest::getPrebid)
97-
.map(prebid -> prebid.toBuilder().storedrequest(storedRequest).build())
98-
.orElse(createdExtRequestPrebid);
107+
.map(ExtRequestPrebid::getServer)
108+
.orElse(null);
99109

100110
return bidRequest.toBuilder()
101-
.imp(updateImps(bidRequest, createdExtRequestPrebid))
102-
.ext(ExtRequest.of(extRequestPrebid))
111+
.imp(modifyFirstImp(bidRequest.getImp(), soredRequestId))
112+
.ext(createExtRequest(soredRequestId, extRequestPrebidServer))
103113
.build();
104114
}
105115

106-
private List<Imp> updateImps(BidRequest bidRequest, ExtRequestPrebid extRequestPrebid) {
107-
return bidRequest.getImp().stream()
108-
.map(imp -> imp.toBuilder().ext(createImpExt(extRequestPrebid)).build())
109-
.toList();
110-
}
111-
112116
private static String resolveStoredRequestId(BidRequest bidRequest, ExtImpNextMillennium extImpNextMillennium) {
113117
final String groupId = extImpNextMillennium.getGroupId();
114118
if (StringUtils.isEmpty(groupId)) {
@@ -146,24 +150,38 @@ private static String formatSize(Integer w, Integer h) {
146150
: null;
147151
}
148152

149-
private ObjectNode createImpExt(ExtRequestPrebid prebid) {
150-
final ObjectNode impExt = mapper.mapper().createObjectNode();
151-
impExt.set("prebid", mapper.mapper().valueToTree(prebid));
152-
if (CollectionUtils.isNotEmpty(nmmFlags)) {
153-
impExt.putObject("nextMillennium")
154-
.set("nmmFlags", mapper.mapper().valueToTree(nmmFlags));
155-
}
156-
return impExt;
153+
private List<Imp> modifyFirstImp(List<Imp> imps, String storedRequestId) {
154+
final ExtRequestPrebid extRequestPrebid = ExtRequestPrebid.builder()
155+
.storedrequest(ExtStoredRequest.of(storedRequestId))
156+
.build();
157+
158+
final NextMillenniumExt nextMillenniumExt = NextMillenniumExt.of(
159+
NextMillenniumExtBidder.of(nmmFlags, null, null));
160+
161+
final ExtRequest extRequest = ExtRequest.of(extRequestPrebid);
162+
mapper.fillExtension(extRequest, nextMillenniumExt);
163+
164+
final ObjectNode impExt = mapper.mapper().valueToTree(extRequest);
165+
166+
final List<Imp> modifiedImps = new ArrayList<>(imps);
167+
modifiedImps.set(0, imps.getFirst().toBuilder().ext(impExt).build());
168+
169+
return modifiedImps;
157170
}
158171

159-
private HttpRequest<BidRequest> makeHttpRequest(BidRequest bidRequest) {
160-
return HttpRequest.<BidRequest>builder()
161-
.method(HttpMethod.POST)
162-
.uri(endpointUrl)
163-
.headers(headers())
164-
.payload(bidRequest)
165-
.body(mapper.encodeToBytes(bidRequest))
172+
private ExtRequest createExtRequest(String storedRequestId, ExtRequestPrebidServer extRequestPrebidServer) {
173+
final ExtRequestPrebid extRequestPrebid = ExtRequestPrebid.builder()
174+
.storedrequest(ExtStoredRequest.of(storedRequestId))
175+
.server(extRequestPrebidServer)
166176
.build();
177+
178+
final NextMillenniumExt nextMillenniumExt = NextMillenniumExt.of(
179+
NextMillenniumExtBidder.of(nmmFlags, NM_ADAPTER_VERSION, versionProvider.getNameVersionRecord()));
180+
181+
final ExtRequest extRequest = ExtRequest.of(extRequestPrebid);
182+
mapper.fillExtension(extRequest, nextMillenniumExt);
183+
184+
return extRequest;
167185
}
168186

169187
private static MultiMap headers() {
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
package org.prebid.server.bidder.nextmillennium.proto;
2+
3+
import com.fasterxml.jackson.annotation.JsonProperty;
4+
import lombok.Value;
5+
6+
@Value(staticConstructor = "of")
7+
public class NextMillenniumExt {
8+
9+
@JsonProperty("nextMillennium")
10+
NextMillenniumExtBidder nextMillennium;
11+
}
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
package org.prebid.server.bidder.nextmillennium.proto;
2+
3+
import com.fasterxml.jackson.annotation.JsonProperty;
4+
import lombok.Value;
5+
6+
import java.util.List;
7+
8+
@Value(staticConstructor = "of")
9+
public class NextMillenniumExtBidder {
10+
11+
@JsonProperty("nmmFlags")
12+
List<String> nmmFlags;
13+
14+
String nmVersion;
15+
16+
String serverVersion;
17+
}

src/main/java/org/prebid/server/spring/config/bidder/NextMillenniumConfiguration.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
import org.prebid.server.spring.config.bidder.util.BidderDepsAssembler;
1111
import org.prebid.server.spring.config.bidder.util.UsersyncerCreator;
1212
import org.prebid.server.spring.env.YamlPropertySourceFactory;
13+
import org.prebid.server.version.PrebidVersionProvider;
1314
import org.springframework.beans.factory.annotation.Value;
1415
import org.springframework.boot.context.properties.ConfigurationProperties;
1516
import org.springframework.context.annotation.Bean;
@@ -34,6 +35,7 @@ NextMillenniumConfigurationProperties configurationProperties() {
3435
@Bean
3536
BidderDeps nextMillenniumBidderDeps(NextMillenniumConfigurationProperties nextMillenniumConfigurationProperties,
3637
@NotBlank @Value("${external-url}") String externalUrl,
38+
PrebidVersionProvider prebidVersionProvider,
3739
JacksonMapper mapper) {
3840

3941
return BidderDepsAssembler.<NextMillenniumConfigurationProperties>forBidder(BIDDER_NAME)
@@ -42,7 +44,8 @@ BidderDeps nextMillenniumBidderDeps(NextMillenniumConfigurationProperties nextMi
4244
.bidderCreator(config -> new NextMillenniumBidder(
4345
config.getEndpoint(),
4446
mapper,
45-
config.getExtraInfo().getNmmFlags())
47+
config.getExtraInfo().getNmmFlags(),
48+
prebidVersionProvider)
4649
).assemble();
4750
}
4851

0 commit comments

Comments
 (0)