import { ChoiceRequest, RequestInventorySource } from "../models"; import { fromAppContract } from "./app.mapper"; import { fromUserContract } from "./user.mapper"; import { fromContextContract } from "./context.mapper"; import { fromDeviceContract } from "./device.mapper"; import { fromSiteContract } from "./site.mapper"; import { fromCampaignsContract } from "./campaign.mapper"; import { RequestContract } from "../data-contract/request.contract"; import { getEnvironmentTypeFromSourceType, initCampaigns, initPromLabels, isWeb, getHeaderBiddingTypeFromRequest, } from "../utils/RequestUtils"; import { CampaignModel } from "../models/CampaignModel"; export async function fromRequestContract( requestContract: RequestContract, requestInventorySource: RequestInventorySource, campaignModel: CampaignModel ): Promise { const request: ChoiceRequest = { id: requestContract.id, request_id: requestContract.request_id, type: requestContract.type, app: fromAppContract(requestContract.app), site: fromSiteContract(requestContract.site), user: fromUserContract(requestContract.user), context: fromContextContract(requestContract.context), device: fromDeviceContract(requestContract.device), campaigns: fromCampaignsContract(requestContract.campaigns), inventory_source: requestInventorySource, environment_type: getEnvironmentTypeFromSourceType(requestContract.source_type), size: requestContract.size, bidfloor: requestContract.bidFloor, // init temp fields isWeb: false, stepsStatuses: [], metadata: {}, metadataTmp: {}, campaignData: {}, allMetricsLabels: {}, globalRequestLabels: {}, groupedCampaignIds: { managed: new Set(), programmatic: new Set(), marketplace: new Set(), fallback: new Set(), }, }; if (isWeb(request)) { request.app = { ...request.app, bundle_id: request.site?.domain, name: request.site?.name, }; request.isWeb = true; } if (request.inventory_source === RequestInventorySource.HEADER_BIDDING) { request.tMax = requestContract.tmax; request.headerBiddingType = getHeaderBiddingTypeFromRequest( requestContract.header_bidding_type ); } await initCampaigns(request, campaignModel); await initPromLabels(request); return request; }