Skip to content

Commit 434e137

Browse files
committed
Move logic
1 parent 845c336 commit 434e137

1 file changed

Lines changed: 80 additions & 52 deletions

File tree

src/main/java/org/prebid/server/auction/requestfactory/GetInterfaceRequestFactory.java

Lines changed: 80 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11
package org.prebid.server.auction.requestfactory;
22

3+
import com.fasterxml.jackson.databind.JsonNode;
4+
import com.fasterxml.jackson.databind.node.ArrayNode;
5+
import com.fasterxml.jackson.databind.node.ObjectNode;
36
import com.iab.openrtb.request.App;
47
import com.iab.openrtb.request.Audio;
58
import com.iab.openrtb.request.Banner;
@@ -17,6 +20,8 @@
1720
import io.vertx.core.Future;
1821
import io.vertx.ext.web.RoutingContext;
1922
import lombok.Value;
23+
import org.apache.commons.collections4.CollectionUtils;
24+
import org.apache.commons.lang3.ObjectUtils;
2025
import org.apache.commons.lang3.StringUtils;
2126
import org.prebid.server.auction.DebugResolver;
2227
import org.prebid.server.auction.GeoLocationServiceWrapper;
@@ -27,7 +32,6 @@
2732
import org.prebid.server.auction.externalortb.StoredRequestProcessor;
2833
import org.prebid.server.auction.gpp.AuctionGppService;
2934
import org.prebid.server.auction.model.AuctionContext;
30-
import org.prebid.server.auction.model.AuctionStoredResult;
3135
import org.prebid.server.auction.model.ConsentType;
3236
import org.prebid.server.auction.model.IpAddress;
3337
import org.prebid.server.auction.privacy.contextfactory.AuctionPrivacyContextFactory;
@@ -41,7 +45,6 @@
4145
import org.prebid.server.model.HttpRequestContext;
4246
import org.prebid.server.proto.openrtb.ext.request.ConsentedProvidersSettings;
4347
import org.prebid.server.proto.openrtb.ext.request.ExtDevice;
44-
import org.prebid.server.proto.openrtb.ext.request.ExtImpPrebid;
4548
import org.prebid.server.proto.openrtb.ext.request.ExtRegs;
4649
import org.prebid.server.proto.openrtb.ext.request.ExtRequest;
4750
import org.prebid.server.proto.openrtb.ext.request.ExtRequestPrebid;
@@ -125,37 +128,35 @@ public Future<AuctionContext> fromRequest(RoutingContext routingContext, long st
125128
initialBidRequest(httpRequest),
126129
startTime))
127130

131+
.recover(ortb2RequestFactory::restoreResultFromRejection);
132+
}
133+
134+
public Future<AuctionContext> enrichAuctionContext(AuctionContext initialContext) {
135+
if (initialContext.isRequestRejected()) {
136+
return Future.succeededFuture(initialContext);
137+
}
138+
139+
return Future.succeededFuture(addTmpPublisher(initialContext))
140+
128141
.compose(auctionContext -> ortb2RequestFactory.fetchAccount(auctionContext)
129142
.map(auctionContext::with))
130143

131144
.map(auctionContext -> auctionContext.with(removeTmpPublisher(auctionContext.getBidRequest())))
132145

133146
.map(auctionContext -> auctionContext.with(debugResolver.debugContextFrom(auctionContext)))
134147

135-
.compose(auctionContext -> storedRequestProcessor.processAuctionRequest(
136-
auctionContext.getAccount().getId(), auctionContext.getBidRequest())
137-
.map(AuctionStoredResult::bidRequest)
138-
.map(auctionContext::with))
139-
140-
.compose(auctionContext -> profilesProcessor.process(auctionContext, auctionContext.getBidRequest())
148+
.compose(auctionContext -> storedRequestProcessor.processAmpRequest(
149+
auctionContext.getAccount().getId(),
150+
storedRequestId(auctionContext.getBidRequest()),
151+
auctionContext.getBidRequest())
141152
.map(auctionContext::with))
142153

143-
.map(auctionContext -> auctionContext.with(completeBidRequest(
144-
auctionContext.getBidRequest(),
145-
auctionContext.getHttpRequest(),
146-
auctionContext.getAccount())))
154+
.map(auctionContext -> auctionContext.with(completeBidRequest(auctionContext)))
147155

148156
.map(auctionContext -> auctionContext.with(requestTypeMetric(auctionContext.getBidRequest())))
149157

150-
.recover(ortb2RequestFactory::restoreResultFromRejection);
151-
}
152-
153-
public Future<AuctionContext> enrichAuctionContext(AuctionContext initialContext) {
154-
if (initialContext.isRequestRejected()) {
155-
return Future.succeededFuture(initialContext);
156-
}
157-
158-
return Future.succeededFuture(initialContext)
158+
.compose(auctionContext -> profilesProcessor.process(auctionContext, auctionContext.getBidRequest())
159+
.map(auctionContext::with))
159160

160161
.compose(auctionContext -> geoLocationServiceWrapper.lookup(auctionContext)
161162
.map(auctionContext::with))
@@ -193,8 +194,6 @@ private BidRequest initialBidRequest(HttpRequestContext httpRequest) {
193194
final Consent consent = params.consent();
194195

195196
return BidRequest.builder()
196-
.imp(Collections.singletonList(initialImp(params)))
197-
.site(tmpSite(params)) // Temporarily add to fetch account
198197
.device(initialDevice(params))
199198
.user(initialUser(params, consent))
200199
.tmax(params.tmax())
@@ -205,21 +204,6 @@ private BidRequest initialBidRequest(HttpRequestContext httpRequest) {
205204
.build();
206205
}
207206

208-
private Imp initialImp(GetInterfaceParams params) {
209-
return Imp.builder()
210-
.tagid(params.tagId())
211-
.ext(mapper.mapper().valueToTree(ExtImpPrebid.builder()
212-
.profiles(params.impProfiles())
213-
.build()))
214-
.build();
215-
}
216-
217-
private static Site tmpSite(GetInterfaceParams params) {
218-
return Site.builder()
219-
.publisher(Publisher.builder().id(params.accountId()).build())
220-
.build();
221-
}
222-
223207
private static Device initialDevice(GetInterfaceParams params) {
224208
final IpAddress ipAddress = params.ip();
225209
return Device.builder()
@@ -259,37 +243,80 @@ private static ExtRequest initialExtRequest(GetInterfaceParams params) {
259243
.debug(params.debug())
260244
.storedrequest(ExtStoredRequest.of(params.storedRequestId()))
261245
.profiles(params.requestProfiles())
262-
.storedAuctionResponse(ExtStoredAuctionResponse.of(
263-
params.storedAuctionResponseId(), null, null))
246+
.storedAuctionResponse(ExtStoredAuctionResponse.of(params.storedAuctionResponseId(), null, null))
264247
.outputFormat(params.outputFormat())
265248
.outputModule(params.outputModule())
266249
.build());
267250
}
268251

252+
private AuctionContext addTmpPublisher(AuctionContext auctionContext) {
253+
final GetInterfaceParams params = new GetInterfaceParams(auctionContext.getHttpRequest());
254+
final BidRequest bidRequestWithTmpPublisher = auctionContext.getBidRequest().toBuilder()
255+
.site(Site.builder()
256+
.publisher(Publisher.builder().id(params.accountId()).build())
257+
.build())
258+
.build();
259+
260+
return auctionContext.with(bidRequestWithTmpPublisher);
261+
}
262+
269263
private static BidRequest removeTmpPublisher(BidRequest bidRequest) {
270264
return bidRequest.toBuilder().site(null).build();
271265
}
272266

273-
private BidRequest completeBidRequest(BidRequest bidRequest,
274-
HttpRequestContext httpRequest,
275-
Account account) {
267+
private static String storedRequestId(BidRequest bidRequest) {
268+
return bidRequest.getExt().getPrebid().getStoredrequest().getId();
269+
}
276270

277-
final GetInterfaceParams params = new GetInterfaceParams(httpRequest);
271+
private BidRequest completeBidRequest(AuctionContext auctionContext) {
272+
final Account account = auctionContext.getAccount();
273+
final GetInterfaceParams params = new GetInterfaceParams(auctionContext.getHttpRequest());
278274

279-
final Imp imp = bidRequest.getImp().getFirst();
275+
final BidRequest bidRequest = auctionContext.getBidRequest();
276+
final Imp imp = Optional.ofNullable(bidRequest.getImp())
277+
.filter(CollectionUtils::isNotEmpty)
278+
.map(List::getFirst)
279+
.orElse(null);
280280

281281
return bidRequest.toBuilder()
282-
.imp(Collections.singletonList(imp.toBuilder()
283-
.banner(completeBanner(imp.getBanner(), params))
284-
.video(completeVideo(imp.getVideo(), params))
285-
.audio(completeAudio(imp.getAudio(), params))
286-
.build()))
282+
.imp(Collections.singletonList(completeImp(imp, params)))
287283
.site(completeSite(bidRequest.getSite(), params, account))
288284
.app(completeApp(bidRequest.getApp(), params, account))
289285
.dooh(completeDooh(bidRequest.getDooh(), params, account))
290286
.build();
291287
}
292288

289+
private Imp completeImp(Imp imp, GetInterfaceParams params) {
290+
if (imp == null) {
291+
return null;
292+
}
293+
294+
return imp.toBuilder()
295+
.banner(completeBanner(imp.getBanner(), params))
296+
.video(completeVideo(imp.getVideo(), params))
297+
.audio(completeAudio(imp.getAudio(), params))
298+
.tagid(ObjectUtils.defaultIfNull(params.tagId(), imp.getTagid()))
299+
.ext(completeImpExt(imp.getExt(), params))
300+
.build();
301+
}
302+
303+
private ObjectNode completeImpExt(ObjectNode ext, GetInterfaceParams params) {
304+
final List<String> impProfiles = params.impProfiles();
305+
if (CollectionUtils.isEmpty(impProfiles)) {
306+
return ext;
307+
}
308+
309+
final ObjectNode modifiedExt = ext != null ? ext : mapper.mapper().createObjectNode();
310+
final ObjectNode extPrebid = Optional.ofNullable(modifiedExt.get("prebid"))
311+
.filter(JsonNode::isObject)
312+
.map(ObjectNode.class::cast)
313+
.orElseGet(() -> modifiedExt.putObject("prebid"));
314+
final ArrayNode profiles = extPrebid.putArray("profiles");
315+
impProfiles.forEach(profiles::add);
316+
317+
return modifiedExt;
318+
}
319+
293320
private static Banner completeBanner(Banner banner, GetInterfaceParams params) {
294321
if (banner == null) {
295322
return null;
@@ -482,7 +509,8 @@ private class GetInterfaceParams {
482509

483510
public String storedRequestId() {
484511
return Optional.ofNullable(getString("srid"))
485-
.orElseGet(() -> getString("tag_id"));
512+
.or(() -> Optional.ofNullable(getString("tag_id")))
513+
.orElseThrow(() -> new InvalidRequestException("Request require the stored request id."));
486514
}
487515

488516
public String accountId() {
@@ -846,7 +874,7 @@ public Integer liveStream() {
846874
public IpAddress ip() {
847875
return Optional.ofNullable(getString("ip"))
848876
.map(ipAddressHelper::toIpAddress)
849-
.orElse(null);
877+
.orElse(IpAddress.of(null, null));
850878
}
851879

852880
public String ua() {

0 commit comments

Comments
 (0)