Commit 4e1c013a by Vladislav

#19497 Получение кеша объявлений для шаблона

1 parent d208756f
...@@ -7,6 +7,8 @@ use App\Service\API\API; ...@@ -7,6 +7,8 @@ use App\Service\API\API;
use App\Service\Requests\APIRequest; use App\Service\Requests\APIRequest;
use Illuminate\Console\Command; use Illuminate\Console\Command;
use Illuminate\Database\Eloquent\Relations\HasMany; use Illuminate\Database\Eloquent\Relations\HasMany;
use Illuminate\Database\Eloquent\Relations\HasManyThrough;
use Illuminate\Support\Facades\DB;
class AdvertisementsAdd extends Command class AdvertisementsAdd extends Command
{ {
...@@ -48,19 +50,46 @@ class AdvertisementsAdd extends Command ...@@ -48,19 +50,46 @@ class AdvertisementsAdd extends Command
foreach ($tokens as $token) { foreach ($tokens as $token) {
$token->load([ $token->load([
'dictionaryCampaignsEnabledForExternalSynchronized.goalAdvertisementsForNotExternal' => function (HasMany $query) { 'dictionaryCampaignsEnabledForExternalSynchronized' => function (HasManyThrough $query) {
return $query->has('advertisement'); return $query->has('goalAdvertisementsForNotExternal.advertisement');
}, },
'dictionaryCampaignsEnabledForExternalSynchronized.goalAdvertisementsForNotExternal.advertisement',
]); ]);
$factory = APIRequest::getInstance(API::YANDEX); $factory = APIRequest::getInstance(API::YANDEX);
$factory->setToken($token); $factory->setToken($token);
$goalAds = DB::table('goal_advertisements')
->join('advertisements', 'goal_advertisements.advertisement_id', '=', 'advertisements.id')
->whereNull('advertisements.deleted_at')
->whereNull('goal_advertisements.external_id')
->whereNotNull('goal_advertisements.goal_ad_group_external_id')
->whereNotNull('goal_advertisements.dictionary_campaign_external_id')
->whereIn('goal_advertisements.dictionary_campaign_id', $token->dictionaryCampaignsEnabledForExternalSynchronized->pluck('id'))
->select([
'goal_advertisements.id as id',
'goal_advertisements.dictionary_campaign_id as dictionary_campaign_id',
'goal_advertisements.goal_ad_group_external_id as goal_ad_group_external_id',
'advertisements.title as title',
'advertisements.text as text',
'advertisements.mobile as mobile',
'advertisements.title2 as title2',
'advertisements.href as href',
'advertisements.display_url_path as display_url_path',
'advertisements.v_card_id as v_card_id',
'advertisements.ad_image_hash as ad_image_hash',
'advertisements.site_link_set_id as site_link_set_id',
'advertisements.ad_extensions as ad_extensions',
'advertisements.video_extension as video_extension',
'advertisements.price_extension as price_extension',
'advertisements.turbo_page_id as turbo_page_id',
'advertisements.business_id as business_id',
'advertisements.prefer_v_card_over_business as prefer_v_card_over_business',
])
->get();
$factory->getRequest('Ads', 'add') $factory->getRequest('Ads', 'add')
->call([ ->call([
'goalAds' => $token->dictionaryCampaignsEnabledForExternalSynchronized->pluck('goalAdvertisementsForNotExternal') 'goalAds' => $goalAds,
->collapse(),
]); ]);
} }
......
...@@ -7,6 +7,8 @@ use App\Service\API\API; ...@@ -7,6 +7,8 @@ use App\Service\API\API;
use App\Service\Requests\APIRequest; use App\Service\Requests\APIRequest;
use Illuminate\Console\Command; use Illuminate\Console\Command;
use Illuminate\Database\Eloquent\Relations\HasMany; use Illuminate\Database\Eloquent\Relations\HasMany;
use Illuminate\Database\Eloquent\Relations\HasManyThrough;
use Illuminate\Support\Facades\DB;
class AdvertisementsUpdate extends Command class AdvertisementsUpdate extends Command
{ {
...@@ -48,19 +50,45 @@ class AdvertisementsUpdate extends Command ...@@ -48,19 +50,45 @@ class AdvertisementsUpdate extends Command
foreach ($tokens as $token) { foreach ($tokens as $token) {
$token->load([ $token->load([
'dictionaryCampaignsEnabledForExternalSynchronized.goalAdvertisementsForNeedUpdated' => function (HasMany $query) { 'dictionaryCampaignsEnabledForExternalSynchronized' => function (HasManyThrough $query) {
return $query->has('advertisement'); return $query->has('goalAdvertisementsForNeedUpdated.advertisement');
}, },
'dictionaryCampaignsEnabledForExternalSynchronized.goalAdvertisementsForNeedUpdated.advertisement',
]); ]);
$factory = APIRequest::getInstance(API::YANDEX); $factory = APIRequest::getInstance(API::YANDEX);
$factory->setToken($token); $factory->setToken($token);
$factory->getRequest('Ads', 'add') $goalAds = DB::table('goal_advertisements')
->join('advertisements', 'goal_advertisements.advertisement_id', '=', 'advertisements.id')
->whereNull('advertisements.deleted_at')
->whereNotNull('goal_advertisements.updated_need')
->whereNotNull('goal_advertisements.goal_ad_group_external_id')
->whereNotNull('goal_advertisements.dictionary_campaign_external_id')
->whereIn('goal_advertisements.dictionary_campaign_id', $token->dictionaryCampaignsEnabledForExternalSynchronized->pluck('id'))
->select([
'goal_advertisements.id as id',
'goal_advertisements.dictionary_campaign_id as dictionary_campaign_id',
'advertisements.title as title',
'advertisements.text as text',
'advertisements.mobile as mobile',
'advertisements.title2 as title2',
'advertisements.href as href',
'advertisements.display_url_path as display_url_path',
'advertisements.v_card_id as v_card_id',
'advertisements.ad_image_hash as ad_image_hash',
'advertisements.site_link_set_id as site_link_set_id',
'advertisements.ad_extensions as ad_extensions',
'advertisements.video_extension as video_extension',
'advertisements.price_extension as price_extension',
'advertisements.turbo_page_id as turbo_page_id',
'advertisements.business_id as business_id',
'advertisements.prefer_v_card_over_business as prefer_v_card_over_business',
])
->get();
$factory->getRequest('Ads', 'update')
->call([ ->call([
'goalAds' => $token->dictionaryCampaignsEnabledForExternalSynchronized->pluck('goalAdvertisementsForNeedUpdated') 'goalAds' => $goalAds,
->collapse(),
]); ]);
} }
......
...@@ -7,6 +7,8 @@ use App\Service\API\API; ...@@ -7,6 +7,8 @@ use App\Service\API\API;
use App\Service\Requests\APIRequest; use App\Service\Requests\APIRequest;
use Illuminate\Console\Command; use Illuminate\Console\Command;
use Illuminate\Database\Eloquent\Relations\HasMany; use Illuminate\Database\Eloquent\Relations\HasMany;
use Illuminate\Database\Eloquent\Relations\HasManyThrough;
use Illuminate\Support\Facades\DB;
class KeywordsUpdate extends Command class KeywordsUpdate extends Command
{ {
...@@ -48,19 +50,33 @@ class KeywordsUpdate extends Command ...@@ -48,19 +50,33 @@ class KeywordsUpdate extends Command
foreach ($tokens as $token) { foreach ($tokens as $token) {
$token->load([ $token->load([
'dictionaryCampaignsEnabledForExternalUpdated.goalKeywordsForNeedUpdated' => function (HasMany $query) { 'dictionaryCampaignsEnabledForExternalSynchronized' => function (HasManyThrough $query) {
return $query->has('keyword'); return $query->has('goalKeywordsForNeedUpdated.keyword');
}, },
'dictionaryCampaignsEnabledForExternalUpdated.goalKeywordsForNeedUpdated.keyword',
]); ]);
$factory = APIRequest::getInstance(API::YANDEX); $factory = APIRequest::getInstance(API::YANDEX);
$factory->setToken($token); $factory->setToken($token);
$goalKeywords = DB::table('goal_keywords')
->join('keywords', 'goal_keywords.keyword_id', '=', 'keywords.id')
->whereNull('keywords.deleted_at')
->whereNotNull('goal_advertisements.updated_need')
->whereNotNull('goal_keywords.goal_ad_group_external_id')
->whereNotNull('goal_keywords.dictionary_campaign_external_id')
->whereIn('goal_keywords.dictionary_campaign_id', $token->dictionaryCampaignsEnabledForExternalSynchronized->pluck('id'))
->select([
'goal_keywords.id as id',
'goal_keywords.dictionary_campaign_id as dictionary_campaign_id',
'keywords.keyword as keyword',
'keywords.user_param_1 as user_param_1',
'keywords.user_param_2 as user_param_2',
])
->get();
$factory->getRequest('Keywords', 'update') $factory->getRequest('Keywords', 'update')
->call([ ->call([
'goalKeywords' => $token->dictionaryCampaignsEnabledForExternalUpdated->pluck('goalKeywordsForNeedUpdated') 'goalKeywords' => $goalKeywords,
->collapse(),
]); ]);
} }
......
...@@ -3,6 +3,7 @@ ...@@ -3,6 +3,7 @@
namespace App\Service\Requests\Direct; namespace App\Service\Requests\Direct;
use App\Jobs\ProcessCallLimitedAPI; use App\Jobs\ProcessCallLimitedAPI;
use App\Models\Advertisement;
use App\Models\Pivots\GoalAdvertisement; use App\Models\Pivots\GoalAdvertisement;
use App\Models\Variable; use App\Models\Variable;
use App\Service\Contract\APIRequest; use App\Service\Contract\APIRequest;
...@@ -17,7 +18,7 @@ class AddAds extends DirectRequest ...@@ -17,7 +18,7 @@ class AddAds extends DirectRequest
protected $max_count = 1000; protected $max_count = 1000;
protected $timestamp; protected $timestamp;
/* @var Collection|GoalAdvertisement[] */ /* @var Collection|GoalAdvertisement[]|Advertisement[]|\stdClass[] */
protected $goalAds; protected $goalAds;
public function call($params = null) public function call($params = null)
...@@ -50,10 +51,10 @@ class AddAds extends DirectRequest ...@@ -50,10 +51,10 @@ class AddAds extends DirectRequest
public function handle($response) public function handle($response)
{ {
try { try {
\Log::debug($response);
if (isset($response['result']['Errors'])) { if (isset($response['result']['Errors'])) {
Log::debug($response['Errors']); // Log::debug($response['Errors']);
Log::debug($this->getParams()); // Log::debug($this->getParams());
} }
if (!isset($response['result']['AddResults'])) { if (!isset($response['result']['AddResults'])) {
...@@ -70,9 +71,11 @@ class AddAds extends DirectRequest ...@@ -70,9 +71,11 @@ class AddAds extends DirectRequest
$external_id = (string)$add_result['Id']; $external_id = (string)$add_result['Id'];
/* @var $goalAd GoalAdvertisement|Advertisement|\stdClass */
$goalAd = $this->goalAds->get($key); $goalAd = $this->goalAds->get($key);
$goalAd->update([ GoalAdvertisement::whereId($goalAd->id)
->update([
'external_id' => $external_id, 'external_id' => $external_id,
'external_upload_at' => Carbon::now(), 'external_upload_at' => Carbon::now(),
]); ]);
...@@ -101,7 +104,9 @@ class AddAds extends DirectRequest ...@@ -101,7 +104,9 @@ class AddAds extends DirectRequest
$lists = []; $lists = [];
$this->setParams([ $this->setParams([
'Ads' => $this->goalAds->map(function (GoalAdvertisement $goalAdvertisement) use ($variables, &$lists) { 'Ads' => $this->goalAds->map(function ($goalAdvertisement) use ($variables, &$lists) {
/* @var $goalAdvertisement GoalAdvertisement|Advertisement|\stdClass */
if (!isset($lists[$goalAdvertisement->dictionary_campaign_id])) { if (!isset($lists[$goalAdvertisement->dictionary_campaign_id])) {
$list = Variable::getListVariablesByDictionaryCampaign($goalAdvertisement->dictionary_campaign_id, $variables); $list = Variable::getListVariablesByDictionaryCampaign($goalAdvertisement->dictionary_campaign_id, $variables);
...@@ -110,73 +115,73 @@ class AddAds extends DirectRequest ...@@ -110,73 +115,73 @@ class AddAds extends DirectRequest
$list = $lists[$goalAdvertisement->dictionary_campaign_id]; $list = $lists[$goalAdvertisement->dictionary_campaign_id];
} }
$advertisement = $goalAdvertisement->advertisement;
$data = [ $data = [
'AdGroupId' => $goalAdvertisement->goal_ad_group_external_id, 'AdGroupId' => $goalAdvertisement->goal_ad_group_external_id,
'TextAd' => [ 'TextAd' => [
'Title' => StrReplaceByVariables::getInstance($advertisement->title, $list)->get(), 'Title' => StrReplaceByVariables::getInstance($goalAdvertisement->title, $list)->get(),
'Text' => StrReplaceByVariables::getInstance($advertisement->text, $list)->get(), 'Text' => StrReplaceByVariables::getInstance($goalAdvertisement->text, $list)->get(),
'Mobile' => $advertisement->mobile ? 'YES' : 'NO', 'Mobile' => $goalAdvertisement->mobile ? 'YES' : 'NO',
], ],
]; ];
if ($advertisement->title2) { if ($goalAdvertisement->title2) {
$data['TextAd']['Title2'] = StrReplaceByVariables::getInstance($advertisement->title2, $list)->get(); $data['TextAd']['Title2'] = StrReplaceByVariables::getInstance($goalAdvertisement->title2, $list)->get();
} }
if ($advertisement->href) { if ($goalAdvertisement->href) {
$data['TextAd']['Href'] = $advertisement->href; $data['TextAd']['Href'] = $goalAdvertisement->href;
} }
if ($advertisement->display_url_path) { if ($goalAdvertisement->display_url_path) {
$data['TextAd']['DisplayUrlPath'] = $advertisement->display_url_path; $data['TextAd']['DisplayUrlPath'] = $goalAdvertisement->display_url_path;
} }
if ($advertisement->v_card_id) { if ($goalAdvertisement->v_card_id) {
$data['TextAd']['VCardId'] = $advertisement->v_card_id; $data['TextAd']['VCardId'] = $goalAdvertisement->v_card_id;
} }
if ($advertisement->ad_image_hash) { if ($goalAdvertisement->ad_image_hash) {
$data['TextAd']['AdImageHash'] = $advertisement->ad_image_hash; $data['TextAd']['AdImageHash'] = $goalAdvertisement->ad_image_hash;
} }
if ($advertisement->site_link_set_id) { if ($goalAdvertisement->site_link_set_id) {
$data['TextAd']['SitelinkSetId'] = $advertisement->site_link_set_id; $data['TextAd']['SitelinkSetId'] = $goalAdvertisement->site_link_set_id;
} }
if ($advertisement->ad_extensions) { if ($ad_extensions = @json_decode($goalAdvertisement->ad_extensions, true)) {
$data['TextAd']['AdExtensionIds'] = array_map(function ($ad_extension) { return $ad_extension['AdExtensionId']; }, $advertisement->ad_extensions); $data['TextAd']['AdExtensionIds'] = array_map(function ($ad_extension) {
return $ad_extension['AdExtensionId'];
}, $ad_extensions);
} }
if ($advertisement->video_extension) { if ($video_extension = @json_decode($goalAdvertisement->video_extension, true)) {
$data['TextAd']['VideoExtension'] = [ $data['TextAd']['VideoExtension'] = [
'CreativeId' => $advertisement->video_extension['CreativeId'], 'CreativeId' => $video_extension['CreativeId'],
]; ];
} }
if ($advertisement->price_extension) { if ($price_extension = @json_decode($goalAdvertisement->price_extension, true)) {
$data['TextAd']['PriceExtension'] = [ $data['TextAd']['PriceExtension'] = [
'Price' => $advertisement->price_extension['Price'], 'Price' => $price_extension['Price'],
'PriceQualifier' => $advertisement->price_extension['PriceQualifier'], 'PriceQualifier' => $price_extension['PriceQualifier'],
'PriceCurrency' => $advertisement->price_extension['PriceCurrency'], 'PriceCurrency' => $price_extension['PriceCurrency'],
]; ];
if (isset($advertisement->price_extension['OldPrice']) && !is_null($advertisement->price_extension['OldPrice'])) { if (isset($price_extension['OldPrice']) && !is_null($price_extension['OldPrice'])) {
$data['TextAd']['PriceExtension']['OldPrice'] = $advertisement->price_extension['OldPrice']; $data['TextAd']['PriceExtension']['OldPrice'] = $price_extension['OldPrice'];
} }
} }
if ($advertisement->turbo_page_id) { if ($goalAdvertisement->turbo_page_id) {
$data['TextAd']['TurboPageId'] = $advertisement->turbo_page_id; $data['TextAd']['TurboPageId'] = $goalAdvertisement->turbo_page_id;
} }
if ($advertisement->business_id) { if ($goalAdvertisement->business_id) {
$data['TextAd']['BusinessId'] = $advertisement->business_id; $data['TextAd']['BusinessId'] = $goalAdvertisement->business_id;
} }
if ($advertisement->prefer_v_card_over_business) { if ($goalAdvertisement->prefer_v_card_over_business) {
$data['TextAd']['PreferVCardOverBusiness'] = $advertisement->prefer_v_card_over_business ? 'YES' : 'NO'; $data['TextAd']['PreferVCardOverBusiness'] = $goalAdvertisement->prefer_v_card_over_business ? 'YES' : 'NO';
} }
return $data; return $data;
......
...@@ -3,6 +3,7 @@ ...@@ -3,6 +3,7 @@
namespace App\Service\Requests\Direct; namespace App\Service\Requests\Direct;
use App\Jobs\ProcessCallLimitedAPI; use App\Jobs\ProcessCallLimitedAPI;
use App\Models\Keyword;
use App\Models\Pivots\GoalKeyword; use App\Models\Pivots\GoalKeyword;
use App\Models\Variable; use App\Models\Variable;
use App\Service\Contract\APIRequest; use App\Service\Contract\APIRequest;
...@@ -17,7 +18,7 @@ class AddKeywords extends DirectRequest ...@@ -17,7 +18,7 @@ class AddKeywords extends DirectRequest
protected $max_count = 1000; protected $max_count = 1000;
protected $timestamp; protected $timestamp;
/* @var Collection */ /* @var Collection|GoalKeyword[]|Keyword[]|\stdClass[] */
protected $goalKeywords; protected $goalKeywords;
public function call($params = null) public function call($params = null)
...@@ -72,15 +73,12 @@ class AddKeywords extends DirectRequest ...@@ -72,15 +73,12 @@ class AddKeywords extends DirectRequest
$goalKeyword = $this->goalKeywords[$key]; $goalKeyword = $this->goalKeywords[$key];
$goalKeyword = GoalKeyword::find($goalKeyword->id); GoalKeyword::whereId($goalKeyword->id)
->update([
if ($goalKeyword) {
$goalKeyword->update([
'external_id' => $external_id, 'external_id' => $external_id,
'external_upload_at' => Carbon::now(), 'external_upload_at' => Carbon::now(),
'reserve_create_at' => null, 'reserve_create_at' => null,
]); ]);
}
} }
} catch (\Exception $e) { } catch (\Exception $e) {
...@@ -116,6 +114,8 @@ class AddKeywords extends DirectRequest ...@@ -116,6 +114,8 @@ class AddKeywords extends DirectRequest
$this->setParams([ $this->setParams([
'Keywords' => $this->goalKeywords->map(function ($goalKeyword) use ($variables, &$lists) { 'Keywords' => $this->goalKeywords->map(function ($goalKeyword) use ($variables, &$lists) {
/* @var $goalKeyword GoalKeyword|Keyword|\stdClass */
if (!isset($lists[$goalKeyword->dictionary_campaign_id])) { if (!isset($lists[$goalKeyword->dictionary_campaign_id])) {
$list = Variable::getListVariablesByDictionaryCampaign($goalKeyword->dictionary_campaign_id, $variables); $list = Variable::getListVariablesByDictionaryCampaign($goalKeyword->dictionary_campaign_id, $variables);
$lists[$goalKeyword->dictionary_campaign_id] = $list; $lists[$goalKeyword->dictionary_campaign_id] = $list;
......
...@@ -3,6 +3,7 @@ ...@@ -3,6 +3,7 @@
namespace App\Service\Requests\Direct; namespace App\Service\Requests\Direct;
use App\Jobs\ProcessCallLimitedAPI; use App\Jobs\ProcessCallLimitedAPI;
use App\Models\Advertisement;
use App\Models\Pivots\GoalAdvertisement; use App\Models\Pivots\GoalAdvertisement;
use App\Models\Variable; use App\Models\Variable;
use App\Service\Contract\APIRequest; use App\Service\Contract\APIRequest;
...@@ -17,7 +18,7 @@ class UpdateAds extends DirectRequest ...@@ -17,7 +18,7 @@ class UpdateAds extends DirectRequest
protected $max_count = 1000; protected $max_count = 1000;
protected $timestamp; protected $timestamp;
/* @var Collection|GoalAdvertisement[] */ /* @var Collection|GoalAdvertisement[]|Advertisement[]|\stdClass[] */
protected $goalAds; protected $goalAds;
public function call($params = null) public function call($params = null)
...@@ -100,7 +101,9 @@ class UpdateAds extends DirectRequest ...@@ -100,7 +101,9 @@ class UpdateAds extends DirectRequest
$lists = []; $lists = [];
$this->setParams([ $this->setParams([
'Ads' => $this->goalAds->map(function (GoalAdvertisement $goalAdvertisement) use ($variables, &$lists) { 'Ads' => $this->goalAds->map(function ($goalAdvertisement) use ($variables, &$lists) {
/* @var $goalAdvertisement GoalAdvertisement|Advertisement|\stdClass */
if (!isset($lists[$goalAdvertisement->dictionary_campaign_id])) { if (!isset($lists[$goalAdvertisement->dictionary_campaign_id])) {
$list = Variable::getListVariablesByDictionaryCampaign($goalAdvertisement->dictionary_campaign_id, $variables); $list = Variable::getListVariablesByDictionaryCampaign($goalAdvertisement->dictionary_campaign_id, $variables);
...@@ -109,81 +112,79 @@ class UpdateAds extends DirectRequest ...@@ -109,81 +112,79 @@ class UpdateAds extends DirectRequest
$list = $lists[$goalAdvertisement->dictionary_campaign_id]; $list = $lists[$goalAdvertisement->dictionary_campaign_id];
} }
$advertisement = $goalAdvertisement->advertisement;
$data = [ $data = [
'Id' => $goalAdvertisement->external_id, 'Id' => $goalAdvertisement->external_id,
'TextAd' => [ 'TextAd' => [
'Title' => StrReplaceByVariables::getInstance($advertisement->title, $list)->get(), 'Title' => StrReplaceByVariables::getInstance($goalAdvertisement->title, $list)->get(),
'Text' => StrReplaceByVariables::getInstance($advertisement->text, $list)->get(), 'Text' => StrReplaceByVariables::getInstance($goalAdvertisement->text, $list)->get(),
'Mobile' => $advertisement->mobile ? 'YES' : 'NO', 'Mobile' => $goalAdvertisement->mobile ? 'YES' : 'NO',
'AgeLabel' => $advertisement->age_label, 'AgeLabel' => $goalAdvertisement->age_label,
], ],
]; ];
if ($advertisement->title2) { if ($goalAdvertisement->title2) {
$data['TextAd']['Title2'] = StrReplaceByVariables::getInstance($advertisement->title2, $list)->get(); $data['TextAd']['Title2'] = StrReplaceByVariables::getInstance($goalAdvertisement->title2, $list)->get();
} }
if ($advertisement->href) { if ($goalAdvertisement->href) {
$data['TextAd']['Href'] = $advertisement->href; $data['TextAd']['Href'] = $goalAdvertisement->href;
} }
if ($advertisement->display_url_path) { if ($goalAdvertisement->display_url_path) {
$data['TextAd']['DisplayUrlPath'] = $advertisement->display_url_path; $data['TextAd']['DisplayUrlPath'] = $goalAdvertisement->display_url_path;
} }
if ($advertisement->v_card_id) { if ($goalAdvertisement->v_card_id) {
$data['TextAd']['VCardId'] = $advertisement->v_card_id; $data['TextAd']['VCardId'] = $goalAdvertisement->v_card_id;
} }
if ($advertisement->ad_image_hash) { if ($goalAdvertisement->ad_image_hash) {
$data['TextAd']['AdImageHash'] = $advertisement->ad_image_hash; $data['TextAd']['AdImageHash'] = $goalAdvertisement->ad_image_hash;
} }
if ($advertisement->site_link_set_id) { if ($goalAdvertisement->site_link_set_id) {
$data['TextAd']['SitelinkSetId'] = $advertisement->site_link_set_id; $data['TextAd']['SitelinkSetId'] = $goalAdvertisement->site_link_set_id;
} }
if ($advertisement->ad_extensions) { if ($ad_extensions = @json_decode($goalAdvertisement->ad_extensions, true)) {
$data['TextAd']['CalloutSetting'] = [ $data['TextAd']['CalloutSetting'] = [
'AdExtensions' => array_map(function ($ad_extension) { 'AdExtensions' => array_map(function ($ad_extension) {
return [ return [
'AdExtensionId' => $ad_extension['AdExtensionId'], 'AdExtensionId' => $ad_extension['AdExtensionId'],
'Operation' => 'SET', 'Operation' => 'SET',
]; ];
}, $advertisement->ad_extensions) }, $ad_extensions)
]; ];
} }
if ($advertisement->video_extension) { if ($video_extension = @json_decode($goalAdvertisement->video_extension, true)) {
$data['TextAd']['VideoExtension'] = [ $data['TextAd']['VideoExtension'] = [
'CreativeId' => $advertisement->video_extension['CreativeId'], 'CreativeId' => $video_extension['CreativeId'],
]; ];
} }
if ($advertisement->price_extension) { if ($price_extension = @json_decode($goalAdvertisement->price_extension, true)) {
$data['TextAd']['PriceExtension'] = [ $data['TextAd']['PriceExtension'] = [
'Price' => $advertisement->price_extension['Price'], 'Price' => $price_extension['Price'],
'PriceQualifier' => $advertisement->price_extension['PriceQualifier'], 'PriceQualifier' => $price_extension['PriceQualifier'],
'PriceCurrency' => $advertisement->price_extension['PriceCurrency'], 'PriceCurrency' => $price_extension['PriceCurrency'],
]; ];
if (isset($advertisement->price_extension['OldPrice']) && !is_null($advertisement->price_extension['OldPrice'])) { if (isset($price_extension['OldPrice']) && !is_null($price_extension['OldPrice'])) {
$data['TextAd']['PriceExtension']['OldPrice'] = $advertisement->price_extension['OldPrice']; $data['TextAd']['PriceExtension']['OldPrice'] = $price_extension['OldPrice'];
} }
} }
if ($advertisement->turbo_page_id) { if ($goalAdvertisement->turbo_page_id) {
$data['TextAd']['TurboPageId'] = $advertisement->turbo_page_id; $data['TextAd']['TurboPageId'] = $goalAdvertisement->turbo_page_id;
} }
if ($advertisement->business_id) { if ($goalAdvertisement->business_id) {
$data['TextAd']['BusinessId'] = $advertisement->business_id; $data['TextAd']['BusinessId'] = $goalAdvertisement->business_id;
} }
if ($advertisement->prefer_v_card_over_business) { if ($goalAdvertisement->prefer_v_card_over_business) {
$data['TextAd']['PreferVCardOverBusiness'] = $advertisement->prefer_v_card_over_business ? 'YES' : 'NO'; $data['TextAd']['PreferVCardOverBusiness'] = $goalAdvertisement->prefer_v_card_over_business ? 'YES' : 'NO';
} }
return $data; return $data;
......
...@@ -3,12 +3,13 @@ ...@@ -3,12 +3,13 @@
namespace App\Service\Requests\Direct; namespace App\Service\Requests\Direct;
use App\Jobs\ProcessCallLimitedAPI; use App\Jobs\ProcessCallLimitedAPI;
use App\Models\Keyword;
use App\Models\Pivots\GoalKeyword; use App\Models\Pivots\GoalKeyword;
use App\Models\Variable; use App\Models\Variable;
use App\Service\Contract\APIRequest; use App\Service\Contract\APIRequest;
use App\Service\Requests\DirectRequest; use App\Service\Requests\DirectRequest;
use App\Service\StrReplaceByVariables; use App\Service\StrReplaceByVariables;
use Illuminate\Database\Eloquent\Collection; use Illuminate\Support\Collection;
use Illuminate\Support\Facades\Log; use Illuminate\Support\Facades\Log;
class UpdateKeywords extends DirectRequest class UpdateKeywords extends DirectRequest
...@@ -16,7 +17,7 @@ class UpdateKeywords extends DirectRequest ...@@ -16,7 +17,7 @@ class UpdateKeywords extends DirectRequest
protected $max_count = 1000; protected $max_count = 1000;
protected $timestamp; protected $timestamp;
/* @var Collection|GoalKeyword[] */ /* @var Collection|GoalKeyword[]|Keyword[]|\stdClass[] */
protected $goalKeywords; protected $goalKeywords;
public function call($params = null) public function call($params = null)
...@@ -85,24 +86,31 @@ class UpdateKeywords extends DirectRequest ...@@ -85,24 +86,31 @@ class UpdateKeywords extends DirectRequest
$variables = Variable::all(); $variables = Variable::all();
$lists = [];
$this->setParams([ $this->setParams([
'Keywords' => $this->goalKeywords->map(function (GoalKeyword $goalKeyword) use ($variables) { 'Keywords' => $this->goalKeywords->map(function ($goalKeyword) use ($variables, &$lists) {
$list = Variable::getListVariablesByDictionaryCampaign($goalKeyword->dictionary_campaign_id, $variables); /* @var $goalKeyword GoalKeyword|Keyword|\stdClass */
$keyword = $goalKeyword->keyword; if (!isset($lists[$goalKeyword->dictionary_campaign_id])) {
$list = Variable::getListVariablesByDictionaryCampaign($goalKeyword->dictionary_campaign_id, $variables);
$lists[$goalKeyword->dictionary_campaign_id] = $list;
} else {
$list = $lists[$goalKeyword->dictionary_campaign_id];
}
$data = [ $data = [
'Id' => $goalKeyword->external_id, 'Id' => $goalKeyword->external_id,
'Keyword' => StrReplaceByVariables::getInstance($keyword->keyword, $list)->get(), 'Keyword' => StrReplaceByVariables::getInstance($goalKeyword->keyword, $list)->get(),
]; ];
if ($keyword->user_param_1) { if ($goalKeyword->user_param_1) {
$data['UserParam1'] = $keyword->user_param_1; $data['UserParam1'] = $goalKeyword->user_param_1;
} }
if ($keyword->user_param_2) { if ($goalKeyword->user_param_2) {
$data['UserParam2'] = $keyword->user_param_2; $data['UserParam2'] = $goalKeyword->user_param_2;
} }
return $data; return $data;
......
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!