import { Request } from "express"; import { BidRequestAdapter } from "../adapters/BidRequestAdapter"; import { AdModel } from "../models/AdModel"; import { KafkaConnector } from "../models/connector/KafkaProducer"; import { bid } from "../beeswax-protos/beeswax"; import { ChoiceRequest } from "../models"; import { config } from "../utils/config"; import logger from "../utils/logger"; /** * This service have 2 roles: * - send kafka message to bidrequest/_bidrequest topic * - register ad object in dynamo db * @class BidRequestService */ export class BidRequestService { constructor( private readonly bidRequestAdapter: BidRequestAdapter, private readonly adModel: AdModel, private readonly bidRequestWorker: KafkaConnector, private readonly bidRequestRawWorker: KafkaConnector ) {} /** * Send kafka message to bidrequest/_bidrequest topic with all information regarding a bid request * * @param {*} data a bid request with all information: normalizedRequest, rtbRequest, * bids, campaign, requestHeader, requestUrl * @memberof BidRequestService */ logBid( request: Request, choiceRequest: ChoiceRequest, rtbRequest: bid.IBidAgentRequest, rtbResponse: bid.IBidAgentResponse ) { const message = this.bidRequestAdapter.adaptToBidRequest( choiceRequest, rtbRequest, rtbResponse ); this.bidRequestWorker.send(message); const rawMsgPct = parseFloat(config.RAW_MESSAGE_PERCENTAGE ?? "0"); if (config.OGURY_ENV === "devc" || Math.random() < rawMsgPct) { try { const rawMessage = this.bidRequestAdapter.adaptToBidRequestRaw( request, choiceRequest, rtbRequest ); this.bidRequestRawWorker.send(rawMessage); } catch (e: any) { logger.error(e, `Could not create bidrequestraw message`); } } } async saveMarketplaceResponse(data: { advert_id: string }) { // register in cappings table try { await this.adModel.save("mkp:" + data.advert_id, data); } catch (err: any) { logger.error(err); } } }