11package org .prebid .server .bidder .smilewanted ;
22
3+ import com .fasterxml .jackson .core .type .TypeReference ;
34import com .iab .openrtb .request .BidRequest ;
45import com .iab .openrtb .request .Imp ;
56import com .iab .openrtb .response .BidResponse ;
67import com .iab .openrtb .response .SeatBid ;
78import io .vertx .core .MultiMap ;
8- import io .vertx .core .http .HttpMethod ;
99import org .apache .commons .collections4 .CollectionUtils ;
1010import org .prebid .server .bidder .Bidder ;
1111import org .prebid .server .bidder .model .BidderBid ;
1212import org .prebid .server .bidder .model .BidderCall ;
1313import org .prebid .server .bidder .model .BidderError ;
1414import org .prebid .server .bidder .model .HttpRequest ;
1515import org .prebid .server .bidder .model .Result ;
16+ import org .prebid .server .exception .PreBidException ;
1617import org .prebid .server .json .DecodeException ;
1718import org .prebid .server .json .JacksonMapper ;
19+ import org .prebid .server .proto .openrtb .ext .ExtPrebid ;
20+ import org .prebid .server .proto .openrtb .ext .request .smilewanted .ExtImpSmilewanted ;
1821import org .prebid .server .proto .openrtb .ext .response .BidType ;
22+ import org .prebid .server .util .BidderUtil ;
1923import org .prebid .server .util .HttpUtil ;
2024
2125import java .util .Collections ;
@@ -27,6 +31,11 @@ public class SmileWantedBidder implements Bidder<BidRequest> {
2731 private static final String SW_INTEGRATION_TYPE = "prebid_server" ;
2832 private static final String X_OPENRTB_VERSION = "2.5" ;
2933 private static final int DEFAULT_AT = 1 ;
34+ private static final String ZONE_ID_MACRO = "{{ZoneId}}" ;
35+
36+ private static final TypeReference <ExtPrebid <?, ExtImpSmilewanted >> SMILEWANTED_EXT_TYPE_REFERENCE =
37+ new TypeReference <>() {
38+ };
3039
3140 private final String endpointUrl ;
3241 private final JacksonMapper mapper ;
@@ -38,15 +47,30 @@ public SmileWantedBidder(String endpointUrl, JacksonMapper mapper) {
3847
3948 @ Override
4049 public Result <List <HttpRequest <BidRequest >>> makeHttpRequests (BidRequest request ) {
50+ final ExtImpSmilewanted extImpSmilewanted ;
51+
52+ try {
53+ extImpSmilewanted = parseImpExt (request .getImp ().getFirst ());
54+ } catch (PreBidException e ) {
55+ return Result .withError (BidderError .badInput (e .getMessage ()));
56+ }
57+
4158 final BidRequest outgoingRequest = request .toBuilder ().at (DEFAULT_AT ).build ();
59+ final String url = endpointUrl .replace (ZONE_ID_MACRO , extImpSmilewanted .getZoneId ());
4260
43- return Result .withValue (HttpRequest .<BidRequest >builder ()
44- .method (HttpMethod .POST )
45- .uri (endpointUrl )
46- .headers (createHeaders ())
47- .payload (outgoingRequest )
48- .body (mapper .encodeToBytes (outgoingRequest ))
49- .build ());
61+ return Result .withValue (BidderUtil .defaultRequest (
62+ outgoingRequest ,
63+ createHeaders (),
64+ url ,
65+ mapper ));
66+ }
67+
68+ private ExtImpSmilewanted parseImpExt (Imp imp ) {
69+ try {
70+ return mapper .mapper ().convertValue (imp .getExt (), SMILEWANTED_EXT_TYPE_REFERENCE ).getBidder ();
71+ } catch (IllegalArgumentException e ) {
72+ throw new PreBidException ("Missing bidder ext in impression with id: " + imp .getId ());
73+ }
5074 }
5175
5276 private static MultiMap createHeaders () {
0 commit comments