import { Campaign, ChoiceRequest, CampaignGroup } from "../../models"; import { StepResult } from "../stepResult"; import logger from "../../utils/logger"; import { AbstractStep } from "../abstractStep"; import { CampaignModel } from "../../models/CampaignModel"; class PriorityStep extends AbstractStep { constructor(private readonly campaignModel: CampaignModel) { super("priority"); this.autoPassCampaignGroup = CampaignGroup.Marketplace | CampaignGroup.Fallback; } async run(request: ChoiceRequest): Promise { const result: StepResult = new StepResult(); request.campaigns.forEach((campaign) => { campaign.metadata.priority = this.campaignModel.getPriority( request.campaignData[campaign.id] ); }); request.campaigns.sort( (c1: Campaign, c2: Campaign) => (c1.metadata.priority ?? 0) - (c2.metadata.priority ?? 0) ); logger.debug( () => `Sorted campaigns (after priority sorting) : [${request.campaigns .map((c) => c.id) .join(",")}]` ); result.passCampaigns(...request.campaigns); return result; } } export default PriorityStep;