Commit ed83aacf by Vladislav

Оптимизация изменения удаления

1 parent b94659bc
......@@ -69,11 +69,13 @@ class BidModifiersAdd extends Command
->groupBy([
'goal_bid_modifiers.dictionary_campaign_external_id',
'goal_bid_modifiers.goal_ad_group_external_id',
'dictionaries.region_id',
'dictionaries.token_id',
'bid_modifiers.mobile_adjustment',
'bid_modifiers.desktop_adjustment',
'bid_modifiers.video_adjustment',
'dictionaries.region_id',
'dictionaries.token_id',
DB::raw('bid_modifiers.demographics_adjustment IS NOT NULL'),
DB::raw('bid_modifiers.retargeting_adjustment IS NOT NULL'),
])
->select([
DB::raw('json_arrayagg(goal_bid_modifiers.id) as ids'),
......
<?php
namespace App\Service;
class DirectResponseHelper
{
static function getExternalIdsChunkByResult($data)
{
return array_chunk(array_column(array_filter($data, function ($result) {
return isset($result['Id']);
}, ARRAY_FILTER_USE_BOTH), 'Id'), 1000);
}
}
......@@ -5,7 +5,9 @@ namespace App\Service\Requests\Direct;
use App\Jobs\ProcessCallLimitedAPI;
use App\Models\Pivots\GoalAdGroup;
use App\Service\Contract\APIRequest;
use App\Service\DirectResponseHelper;
use App\Service\Requests\DirectRequest;
use Carbon\Carbon;
use Illuminate\Support\Facades\Log;
class DeleteAdGroups extends DirectRequest
......@@ -37,9 +39,16 @@ class DeleteAdGroups extends DirectRequest
return;
}
foreach (DirectResponseHelper::getExternalIdsChunkByResult($response['result']['DeleteResults']) as $external_ids) {
GoalAdGroup::whereIn('external_id', $external_ids)
->delete();
}
foreach ($response['result']['DeleteResults'] as $key => $delete_result) {
if (!isset($delete_result['Id'])) {
if (isset($delete_result['Id'])) {
continue;
}
$external_id = $this->getParams()['SelectionCriteria']['Ids'][$key];
......@@ -68,13 +77,6 @@ class DeleteAdGroups extends DirectRequest
'reserve_delete_at' => null,
]);
continue;
}
$external_id = (string)$delete_result['Id'];
GoalAdGroup::where('external_id', $external_id)->delete();
}
}
......
......@@ -6,6 +6,7 @@ use App\Jobs\ProcessCallLimitedAPI;
use App\Models\Advertisement;
use App\Models\Pivots\GoalAdvertisement;
use App\Service\Contract\APIRequest;
use App\Service\DirectResponseHelper;
use App\Service\Requests\DirectRequest;
use Illuminate\Support\Facades\Log;
......@@ -38,11 +39,23 @@ class DeleteAds extends DirectRequest
return;
}
foreach (DirectResponseHelper::getExternalIdsChunkByResult($response['result']['DeleteResults']) as $external_ids) {
if ($this->getToken()->isMain()) {
Advertisement::whereIn('external_id', $external_ids)
->delete();
} else {
GoalAdvertisement::whereIn('external_id', $external_ids)
->delete();
}
}
foreach ($response['result']['DeleteResults'] as $key => $delete_result) {
$external_id = $this->getParams()['SelectionCriteria']['Ids'][$key];
if (isset($delete_result['Id'])) {
continue;
}
if (!isset($delete_result['Id'])) {
$external_id = $this->getParams()['SelectionCriteria']['Ids'][$key];
if (
isset($delete_result['Errors'][0]['Code'])
......@@ -77,11 +90,11 @@ class DeleteAds extends DirectRequest
continue;
}
}
} else {
Log::debug("DeleteAds, empty Id, token_id {$this->getToken()->getKey()}");
Log::debug($delete_result);
Log::debug($external_id);
}
if ($this->getToken()->isMain()) {
Advertisement::whereExternalId($external_id)
......@@ -95,20 +108,6 @@ class DeleteAds extends DirectRequest
]);
}
continue;
}
$external_id = (string)$delete_result['Id'];
if ($this->getToken()->isMain()) {
Advertisement::where('external_id', $external_id)
->delete();
} else {
GoalAdvertisement::where('external_id', $external_id)
->delete();
}
}
}
......
......@@ -6,6 +6,7 @@ use App\Jobs\ProcessCallLimitedAPI;
use App\Models\AudienceTarget;
use App\Models\Pivots\GoalAudienceTarget;
use App\Service\Contract\APIRequest;
use App\Service\DirectResponseHelper;
use App\Service\Requests\DirectRequest;
use Illuminate\Support\Facades\Log;
......@@ -38,13 +39,26 @@ class DeleteAudienceTarget extends DirectRequest
return;
}
foreach (DirectResponseHelper::getExternalIdsChunkByResult($response['result']['DeleteResults']) as $external_ids) {
if ($this->getToken()->isMain()) {
AudienceTarget::whereIn('external_id', $external_ids)
->delete();
} else {
GoalAudienceTarget::whereIn('external_id', $external_ids)
->delete();
}
}
foreach ($response['result']['DeleteResults'] as $key => $delete_result) {
if (!isset($delete_result['Id'])) {
if (isset($delete_result['Id'])) {
continue;
}
$external_id = $this->getParams()['SelectionCriteria']['Ids'][$key];
if (isset($delete_result['Errors']) && count($delete_result['Errors'])) {
if ($this->getToken()->isMain()) {
$model = AudienceTarget::whereExternalId($external_id)->first();
} else {
......@@ -79,20 +93,6 @@ class DeleteAudienceTarget extends DirectRequest
]);
}
continue;
}
$external_id = (string)$delete_result['Id'];
if ($this->getToken()->isMain()) {
AudienceTarget::whereExternalId($external_id)
->delete();
} else {
GoalAudienceTarget::whereExternalId($external_id)
->delete();
}
}
}
......
......@@ -6,6 +6,7 @@ use App\Jobs\ProcessCallLimitedAPI;
use App\Models\Pivots\GoalVCard;
use App\Models\VCard;
use App\Service\Contract\APIRequest;
use App\Service\DirectResponseHelper;
use App\Service\Requests\DirectRequest;
use Illuminate\Support\Facades\Log;
......@@ -38,11 +39,23 @@ class DeleteVCards extends DirectRequest
return;
}
foreach (DirectResponseHelper::getExternalIdsChunkByResult($response['result']['DeleteResults']) as $external_ids) {
if ($this->getToken()->isMain()) {
VCard::whereIn('external_id', $external_ids)
->delete();
} else {
GoalVCard::whereIn('external_id', $external_ids)
->delete();
}
}
foreach ($response['result']['DeleteResults'] as $key => $delete_result) {
$external_id = $this->getParams()['SelectionCriteria']['Ids'][$key];
if (!isset($delete_result['Id'])) {
if (isset($delete_result['Id'])) {
continue;
}
if (
isset($delete_result['Errors'][0]['Code'])
......@@ -92,20 +105,6 @@ class DeleteVCards extends DirectRequest
]);
}
continue;
}
$external_id = (string)$delete_result['Id'];
if ($this->getToken()->isMain()) {
VCard::whereExternalId($external_id)
->delete();
} else {
GoalVCard::whereExternalId($external_id)
->delete();
}
}
}
......
......@@ -5,7 +5,9 @@ namespace App\Service\Requests\Direct;
use App\Jobs\ProcessCallLimitedAPI;
use App\Models\Pivots\GoalBidModifier;
use App\Service\Contract\APIRequest;
use App\Service\DirectResponseHelper;
use App\Service\Requests\DirectRequest;
use Carbon\Carbon;
use Illuminate\Support\Facades\Log;
class SetBidModifiers extends DirectRequest
......@@ -37,16 +39,29 @@ class SetBidModifiers extends DirectRequest
return;
}
foreach (DirectResponseHelper::getExternalIdsChunkByResult($response['result']['SetResults']) as $external_ids) {
GoalBidModifier::whereIn('external_id', $external_ids)
->update([
'updated_need' => null,
'reserve_update_at' => null,
'updated_at' => Carbon::now(),
]);
}
foreach ($response['result']['SetResults'] as $key => $set_result) {
if (!isset($set_result['Id'])) {
if (isset($set_result['Id'])) {
continue;
}
$data = $this->getParams()['BidModifiers'][$key];
$external_id = $data['Id'];
if (isset($set_result['Errors'][0]['Message']) && $set_result['Errors'][0]['Message'] === 'Object not found') {
GoalBidModifier::whereExternalId($external_id)->delete();
} elseif (isset($set_result['Errors']) && count($set_result['Errors'])) {
$model = GoalBidModifier::whereExternalId($external_id)->first();
......@@ -70,16 +85,6 @@ class SetBidModifiers extends DirectRequest
'reserve_update_at' => null,
]);
continue;
}
$external_id = (string)$set_result['Id'];
GoalBidModifier::where('external_id', $external_id)
->update([
'updated_need' => null,
'reserve_update_at' => null,
]);
}
}
......
......@@ -6,6 +6,7 @@ use App\Jobs\ProcessCallLimitedAPI;
use App\Models\Pivots\GoalAdGroup;
use App\Models\Variable;
use App\Service\Contract\APIRequest;
use App\Service\DirectResponseHelper;
use App\Service\Requests\DirectRequest;
use App\Service\StrReplaceByVariables;
use Carbon\Carbon;
......@@ -40,9 +41,20 @@ class UpdateAdGroups extends DirectRequest
return;
}
foreach (DirectResponseHelper::getExternalIdsChunkByResult($response['result']['UpdateResults']) as $external_ids) {
GoalAdGroup::whereIn('external_id', $external_ids)
->update([
'updated_need' => null,
'reserve_update_at' => null,
'updated_at' => Carbon::now(),
]);
}
foreach ($response['result']['UpdateResults'] as $key => $update_result) {
if (!isset($update_result['Id'])) {
if (isset($update_result['Id'])) {
continue;
}
$data = $this->getParams()['AdGroups'][$key];
......@@ -70,17 +82,6 @@ class UpdateAdGroups extends DirectRequest
'reserve_update_at' => null,
]);
continue;
}
$external_id = (string)$update_result['Id'];
GoalAdGroup::where('external_id', $external_id)
->update([
'updated_need' => null,
'reserve_update_at' => null,
]);
}
$this->getToken()->update([
......
......@@ -7,6 +7,7 @@ use App\Models\Advertisement;
use App\Models\Pivots\GoalAdvertisement;
use App\Models\Variable;
use App\Service\Contract\APIRequest;
use App\Service\DirectResponseHelper;
use App\Service\Requests\DirectRequest;
use App\Service\StrReplaceByVariables;
use Carbon\Carbon;
......@@ -41,9 +42,20 @@ class UpdateAds extends DirectRequest
return;
}
foreach (DirectResponseHelper::getExternalIdsChunkByResult($response['result']['UpdateResults']) as $external_ids) {
GoalAdvertisement::whereIn('external_id', $external_ids)
->update([
'updated_need' => null,
'reserve_update_at' => null,
'updated_at' => Carbon::now(),
]);
}
foreach ($response['result']['UpdateResults'] as $key => $update_result) {
if (!isset($update_result['Id'])) {
if (isset($update_result['Id'])) {
continue;
}
$data = $this->getParams()['Ads'][$key];
......@@ -84,17 +96,6 @@ class UpdateAds extends DirectRequest
'reserve_update_at' => null,
]);
continue;
}
$external_id = (string)$update_result['Id'];
GoalAdvertisement::where('external_id', $external_id)
->update([
'updated_need' => null,
'reserve_update_at' => null,
]);
}
$this->getToken()->update([
......
......@@ -8,6 +8,7 @@ use App\Models\Pivots\DictionaryCampaign;
use App\Models\Pivots\GoalAdGroup;
use App\Models\Variable;
use App\Service\Contract\APIRequest;
use App\Service\DirectResponseHelper;
use App\Service\Requests\DirectRequest;
use App\Service\StrReplaceByVariables;
use Carbon\Carbon;
......@@ -42,9 +43,20 @@ class UpdateCampaigns extends DirectRequest
return;
}
foreach (DirectResponseHelper::getExternalIdsChunkByResult($response['result']['UpdateResults']) as $external_ids) {
DictionaryCampaign::whereIn('external_id', $external_ids)
->update([
'updated_need' => null,
'reserve_update_at' => null,
'updated_at' => Carbon::now(),
]);
}
foreach ($response['result']['UpdateResults'] as $key => $update_result) {
if (!isset($update_result['Id'])) {
if (isset($update_result['Id'])) {
continue;
}
$data = $this->getParams()['Campaigns'][$key];
......@@ -74,16 +86,6 @@ class UpdateCampaigns extends DirectRequest
'reserve_update_at' => null,
]);
continue;
}
$external_id = (string)$update_result['Id'];
DictionaryCampaign::where('external_id', $external_id)
->update([
'updated_need' => null,
'reserve_update_at' => null,
]);
}
$this->getToken()->update([
......
......@@ -7,8 +7,10 @@ use App\Models\Keyword;
use App\Models\Pivots\GoalKeyword;
use App\Models\Variable;
use App\Service\Contract\APIRequest;
use App\Service\DirectResponseHelper;
use App\Service\Requests\DirectRequest;
use App\Service\StrReplaceByVariables;
use Carbon\Carbon;
use Illuminate\Support\Facades\Log;
class UpdateKeywords extends DirectRequest
......@@ -40,15 +42,30 @@ class UpdateKeywords extends DirectRequest
return;
}
foreach (DirectResponseHelper::getExternalIdsChunkByResult($response['result']['UpdateResults']) as $external_ids) {
GoalKeyword::whereIn('external_id', $external_ids)
->update([
'updated_need' => null,
'reserve_update_at' => null,
'updated_at' => Carbon::now(),
]);
}
foreach ($response['result']['UpdateResults'] as $key => $update_result) {
if (!isset($update_result['Id'])) {
if (isset($update_result['Id'])) {
continue;
}
$data = $this->getParams()['Keywords'][$key];
$external_id = $data['Id'];
if (isset($update_result['Errors']) && count($update_result['Errors'])) {
if (isset($data['Errors'][0]['Details']) && $data['Errors'][0]['Details'] === 'Keyword not found') {
GoalKeyword::whereExternalId($external_id)->delete();
} elseif (isset($update_result['Errors']) && count($update_result['Errors'])) {
$goalKeyword = GoalKeyword::whereExternalId($external_id)->first();
if ($goalKeyword) {
......@@ -59,10 +76,6 @@ class UpdateKeywords extends DirectRequest
'params' => $data,
'errors' => $update_result['Errors'],
]);
$goalKeyword->update([
'reserve_update_at' => null,
]);
continue;
}
} else {
Log::debug("UpdateKeywords, empty Id, token_id {$this->getToken()->getKey()}");
......@@ -75,17 +88,6 @@ class UpdateKeywords extends DirectRequest
'reserve_update_at' => null,
]);
continue;
}
$external_id =(string) $update_result['Id'];
GoalKeyword::where('external_id', $external_id)
->update([
'updated_need' => null,
'reserve_update_at' => null,
]);
}
}
......
......@@ -7,8 +7,10 @@ use App\Models\NegativeKeywordSharedSet;
use App\Models\Pivots\GoalNegativeKeywordSharedSet;
use App\Models\Variable;
use App\Service\Contract\APIRequest;
use App\Service\DirectResponseHelper;
use App\Service\Requests\DirectRequest;
use App\Service\StrReplaceByVariables;
use Carbon\Carbon;
use Illuminate\Database\Eloquent\Collection;
use Illuminate\Support\Facades\Log;
......@@ -53,11 +55,22 @@ class UpdateNegativeKeywordSharedSets extends DirectRequest
return;
}
foreach (DirectResponseHelper::getExternalIdsChunkByResult($response['result']['UpdateResults']) as $external_ids) {
GoalNegativeKeywordSharedSet::whereIn('external_id', $external_ids)
->update([
'updated_need' => null,
'reserve_update_at' => null,
'updated_at' => Carbon::now(),
]);
}
foreach ($response['result']['UpdateResults'] as $key => $update_result) {
$goalNegativeKeywordSharedSet = $this->goalNegativeKeywordSharedSets->get($key);
if (!isset($update_result['Id'])) {
if (isset($update_result['Id'])) {
continue;
}
$data = $this->getParams()['NegativeKeywordSharedSets'][$key];
......@@ -80,17 +93,6 @@ class UpdateNegativeKeywordSharedSets extends DirectRequest
'reserve_update_at' => null,
]);
continue;
}
$external_id = (string)$update_result['Id'];
GoalNegativeKeywordSharedSet::where('external_id', $external_id)
->update([
'updated_need' => null,
'reserve_update_at' => null,
]);
}
}
......
......@@ -6,8 +6,10 @@ use App\Jobs\ProcessCallLimitedAPI;
use App\Models\Pivots\GoalRetargetinglist;
use App\Models\Variable;
use App\Service\Contract\APIRequest;
use App\Service\DirectResponseHelper;
use App\Service\Requests\DirectRequest;
use App\Service\StrReplaceByVariables;
use Carbon\Carbon;
use Illuminate\Support\Facades\Log;
class UpdateRetargetinglists extends DirectRequest
......@@ -41,9 +43,20 @@ class UpdateRetargetinglists extends DirectRequest
return;
}
foreach (DirectResponseHelper::getExternalIdsChunkByResult($response['result']['UpdateResults']) as $external_ids) {
GoalRetargetinglist::whereIn('external_id', $external_ids)
->update([
'updated_need' => null,
'reserve_update_at' => null,
'updated_at' => Carbon::now(),
]);
}
foreach ($response['result']['UpdateResults'] as $key => $update_result) {
if (!isset($update_result['Id'])) {
if (isset($update_result['Id'])) {
continue;
}
$data = $this->getParams()['RetargetingLists'][$key];
......@@ -58,30 +71,15 @@ class UpdateRetargetinglists extends DirectRequest
'params' => $data,
'errors' => $update_result['Errors'],
]);
$goalRetargetinglist->update([
'reserve_update_at' => null,
]);
continue;
}
}
} else {
Log::debug("AddRetargetinglist, empty Id, token_id {$this->getToken()->getKey()}");
Log::debug($update_result);
Log::debug($data);
GoalRetargetinglist::where('external_id', $data['Id'])
->update([
'reserve_update_at' => null,
]);
continue;
}
$external_id = (string)$update_result['Id'];
GoalRetargetinglist::where('external_id', $external_id)
GoalRetargetinglist::where('external_id', $data['Id'])
->update([
'updated_need' => null,
'reserve_update_at' => null,
]);
......
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!