Here you go
```
async createCampaign(campaign: resources.ICampaign, options: CampaignCreateOptions): Promise<resources.ICampaign> {
const customer = this.getCustomer(CUSTOMER_ID);
const operations = this.createCampaignMutateOperations(campaign, options);
const mutationRes = await customer.mutateResources(operations);
return mutationRes.mutate_operation_responses[0].campaign_result?.campaign;
}
private createCampaignMutateOperations(
campaign: resources.ICampaign,
options: CampaignCreateOptions
): MutateOperation<CampaignResourcesOps>[] {
const campaignRN = ResourceNames.campaign(CUSTOMER_ID, '-1');
const budgetRN = ResourceNames.campaignBudget(CUSTOMER_ID, '-2');
return [
{ entity: 'campaign_budget', operation: 'create', resource: { ...options.budget, resource_name: budgetRN } },
{
entity: 'campaign',
operation: 'create',
resource: {
...campaign,
resource_name: campaignRN,
campaign_budget: budgetRN,
}
},
];
}
```
PS. suggest splitting mutate operations aggregator and actual call. Later your full campaign hierarchy might be built in 1 mutate transactional request: (just an example)```
async createCampaignFullHierarchy(body: CampaignFullHierarchyCreate) {
const campaignOps = this.createCampaignMutateOperations(body.campaign, body.options);
body.adGroup.campaign = campaignOps.find((e) => e.entity === 'campaign')?.resource?.resource_name;
const adGroupOps = this.createAdGroupMutateOperations(body.adGroup);
body.adGroupAd.ad_group = adGroupOps.find((e) => e.entity === 'ad_group')?.resource?.resource_name;
const adGroupAdOps = this.createAdGroupAdMutateOperations(body.adGroupAd, body.videoIds);
const operations: MutateOperation<CampaignResourcesOps | AdGroupResourcesOps | AdGroupAdResourcesOps>[] = [
...campaignOps,
...adGroupOps,
...adGroupAdOps
];
const customer = this.getCustomer(CUSTOMER_ID);
const mutationRes = await customer.mutateResources(operations);
.....
}
```