1
1
package org .prebid .server .bidder .smilewanted ;
2
2
3
+ import com .fasterxml .jackson .core .type .TypeReference ;
3
4
import com .iab .openrtb .request .BidRequest ;
4
5
import com .iab .openrtb .request .Imp ;
5
6
import com .iab .openrtb .response .BidResponse ;
6
7
import com .iab .openrtb .response .SeatBid ;
7
8
import io .vertx .core .MultiMap ;
8
- import io .vertx .core .http .HttpMethod ;
9
9
import org .apache .commons .collections4 .CollectionUtils ;
10
10
import org .prebid .server .bidder .Bidder ;
11
11
import org .prebid .server .bidder .model .BidderBid ;
12
12
import org .prebid .server .bidder .model .BidderCall ;
13
13
import org .prebid .server .bidder .model .BidderError ;
14
14
import org .prebid .server .bidder .model .HttpRequest ;
15
15
import org .prebid .server .bidder .model .Result ;
16
+ import org .prebid .server .exception .PreBidException ;
16
17
import org .prebid .server .json .DecodeException ;
17
18
import 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 ;
18
21
import org .prebid .server .proto .openrtb .ext .response .BidType ;
22
+ import org .prebid .server .util .BidderUtil ;
19
23
import org .prebid .server .util .HttpUtil ;
20
24
21
25
import java .util .Collections ;
@@ -27,6 +31,11 @@ public class SmileWantedBidder implements Bidder<BidRequest> {
27
31
private static final String SW_INTEGRATION_TYPE = "prebid_server" ;
28
32
private static final String X_OPENRTB_VERSION = "2.5" ;
29
33
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
+ };
30
39
31
40
private final String endpointUrl ;
32
41
private final JacksonMapper mapper ;
@@ -38,15 +47,30 @@ public SmileWantedBidder(String endpointUrl, JacksonMapper mapper) {
38
47
39
48
@ Override
40
49
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
+
41
58
final BidRequest outgoingRequest = request .toBuilder ().at (DEFAULT_AT ).build ();
59
+ final String url = endpointUrl .replace (ZONE_ID_MACRO , extImpSmilewanted .getZoneId ());
42
60
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
+ }
50
74
}
51
75
52
76
private static MultiMap createHeaders () {
0 commit comments