Commit 83188a98 by Vladislav

Оптимизация

1 parent d95b16f6
......@@ -6,6 +6,7 @@ use App\Models\Tokens;
use App\Service\API\API;
use App\Service\Requests\APIRequest;
use Illuminate\Console\Command;
use Illuminate\Database\Eloquent\Relations\HasMany;
class AdGroupsAdd extends Command
{
......@@ -40,15 +41,19 @@ class AdGroupsAdd extends Command
*/
public function handle()
{
$tokens = Tokens::whereHas('dictionaryCampaignsEnabledForExternalSynchronized.groupsForNotExternal')
->with([
'dictionaryCampaignsEnabledForExternalSynchronized.groupsForNotExternal.dictionaryCampaign',
'dictionaryCampaignsEnabledForExternalSynchronized.groupsForNotExternal.group',
])
$tokens = Tokens::whereHas('dictionaryCampaignsEnabledForExternalSynchronized.groupsForNotExternal.group')
->where('type', '!=', Tokens::MAIN)
->get();
foreach ($tokens as $token) {
$token->load([
'dictionaryCampaignsEnabledForExternalSynchronized.groupsForNotExternal' => function (HasMany $query) {
return $query->has('group');
},
'dictionaryCampaignsEnabledForExternalSynchronized.groupsForNotExternal.group',
]);
$factory = APIRequest::getInstance(API::YANDEX);
$factory->setToken($token);
......
......@@ -6,6 +6,7 @@ use App\Models\Tokens;
use App\Service\API\API;
use App\Service\Requests\APIRequest;
use Illuminate\Console\Command;
use Illuminate\Database\Eloquent\Relations\HasMany;
class AdGroupsUpdate extends Command
{
......@@ -40,15 +41,19 @@ class AdGroupsUpdate extends Command
*/
public function handle()
{
$tokens = Tokens::whereHas('dictionaryCampaignsEnabledForExternalUpdated.groupsForExternalForNeedUpdated')
->with([
'dictionaryCampaignsEnabledForExternalUpdated.groupsForExternalForNeedUpdated.dictionaryCampaign',
'dictionaryCampaignsEnabledForExternalUpdated.groupsForExternalForNeedUpdated.group',
])
$tokens = Tokens::whereHas('dictionaryCampaignsEnabledForExternalUpdated.groupsForExternalForNeedUpdated.group')
->where('type', '!=', Tokens::MAIN)
->get();
foreach ($tokens as $token) {
$token->load([
'dictionaryCampaignsEnabledForExternalUpdated.groupsForExternalForNeedUpdated' => function (HasMany $query) {
return $query->has('group');
},
'dictionaryCampaignsEnabledForExternalUpdated.groupsForExternalForNeedUpdated.group',
]);
$factory = APIRequest::getInstance(API::YANDEX);
$factory->setToken($token);
......
......@@ -3,6 +3,7 @@
namespace App\Console\Commands;
use App\Models\AdGroup;
use App\Models\Campaigns;
use App\Models\Keyword;
use App\Models\Pivots\DictionaryCampaign;
use App\Models\Pivots\GoalAdGroup;
......@@ -42,23 +43,29 @@ class DictionaryCampaignsSyncByCampaign extends Command
*/
public function handle()
{
DictionaryCampaign::with([
'campaign.groups',
])->synced()->needSynced()->get()->each(function (DictionaryCampaign $dictionaryCampaign) {
Campaigns::has('dictionaryCampaignSynchronizedNeedSynced')->forManaged()->get()->each(function (Campaigns $campaign) {
$campaign->load([
'groups.keywords',
'dictionaryCampaignSynchronizedNeedSynced'
]);
$campaign->dictionaryCampaignSynchronizedNeedSynced->each(function (DictionaryCampaign $dictionaryCampaign) use ($campaign) {
$campaign->groups->each(function (AdGroup $adGroup) use ($dictionaryCampaign) {
$dictionaryCampaign->campaign->groups->each(function (AdGroup $adGroup) use ($dictionaryCampaign) {
$goalAdGroup = GoalAdGroup::updateOrCreateByMain($adGroup, $dictionaryCampaign);
$goalAdGroup = GoalAdGroup::updateOrCreateByMain($adGroup, $dictionaryCampaign);
$adGroup->keywords->each(function (Keyword $keyword) use ($goalAdGroup, $dictionaryCampaign) {
GoalKeyword::updateOrCreateByMain($keyword, $goalAdGroup, $dictionaryCampaign);
});
$adGroup->keywords->each(function (Keyword $keyword) use ($goalAdGroup, $dictionaryCampaign) {
GoalKeyword::updateOrCreateByMain($keyword, $goalAdGroup, $dictionaryCampaign);
});
});
$dictionaryCampaign->update([
'synced_need' => null,
]);
$dictionaryCampaign->update([
'synced_need' => null,
]);
});
});
......
......@@ -42,17 +42,18 @@ class KeywordsAdd extends Command
public function handle()
{
$tokens = Tokens::whereHas('dictionaryCampaignsEnabledForExternalSynchronized.goalKeywordsForNotExternal.keyword')
->with([
'dictionaryCampaignsEnabledForExternalSynchronized.goalKeywordsForNotExternal' => function (HasMany $query) {
return $query->has('keyword');
},
'dictionaryCampaignsEnabledForExternalSynchronized.goalKeywordsForNotExternal.keyword'
])
->where('type', '!=', Tokens::MAIN)
->get();
foreach ($tokens as $token) {
$token->load([
'dictionaryCampaignsEnabledForExternalSynchronized.goalKeywordsForNotExternal' => function (HasMany $query) {
return $query->has('keyword');
},
'dictionaryCampaignsEnabledForExternalSynchronized.goalKeywordsForNotExternal.keyword',
]);
$goalKeywords = $token->dictionaryCampaignsEnabledForExternalSynchronized->pluck('goalKeywordsForNotExternal')
->collapse();
......
......@@ -6,6 +6,7 @@ use App\Models\Tokens;
use App\Service\API\API;
use App\Service\Requests\APIRequest;
use Illuminate\Console\Command;
use Illuminate\Database\Eloquent\Relations\HasMany;
class KeywordsUpdate extends Command
{
......@@ -40,14 +41,19 @@ class KeywordsUpdate extends Command
*/
public function handle()
{
$tokens = Tokens::whereHas('dictionaryCampaignsEnabledForExternalUpdated.goalKeywordsForNeedUpdated')
->with([
'dictionaryCampaignsEnabledForExternalUpdated.goalKeywordsForNeedUpdated.keyword',
])
$tokens = Tokens::whereHas('dictionaryCampaignsEnabledForExternalUpdated.goalKeywordsForNeedUpdated.keyword')
->where('type', '!=', Tokens::MAIN)
->get();
foreach ($tokens as $token) {
$token->load([
'dictionaryCampaignsEnabledForExternalUpdated.goalKeywordsForNeedUpdated' => function (HasMany $query) {
return $query->has('keyword');
},
'dictionaryCampaignsEnabledForExternalUpdated.goalKeywordsForNeedUpdated.keyword',
]);
$factory = APIRequest::getInstance(API::YANDEX);
$factory->setToken($token);
......
......@@ -46,6 +46,8 @@ use Illuminate\Support\Collection;
* @property-read \Illuminate\Database\Eloquent\Collection|\App\Models\Variable[] $dictionaryCampaignVariables
* @property-read int|null $dictionary_campaign_variables_count
* @property-read \Illuminate\Database\Eloquent\Collection|\App\Models\Variable[] $dictionaryCampaigns
* @property-read \Illuminate\Database\Eloquent\Collection|\App\Models\Variable[] $dictionaryCampaignSynchronized
* @property-read \Illuminate\Database\Eloquent\Collection|\App\Models\Variable[] $dictionaryCampaignSynchronizedNeedSynced
* @property-read int|null $dictionary_campaigns_count
* @property string|null $keywords_loaded_at
* @method static Builder|Campaigns whereKeywordsLoadedAt($value)
......@@ -351,6 +353,11 @@ class Campaigns extends Model
return $this->dictionaryCampaigns()->synchronized();
}
public function dictionaryCampaignSynchronizedNeedSynced()
{
return $this->dictionaryCampaigns()->synchronized()->needSynced();
}
public function dictionaryCampaignVariables()
{
return $this->hasManyThrough(DictionaryCampaignVariable::class, DictionaryCampaign::class, 'campaign_id', 'dictionary_campaign_id');
......
......@@ -36,7 +36,13 @@ class Variable extends Model
'default_value',
];
public static function getListVariablesByDictionaryCampaign(DictionaryCampaign $dictionaryCampaign, $variables = null)
/**
* @param string|integer|DictionaryCampaign
* @param null|Variable[] $variables
*
* @return array
*/
public static function getListVariablesByDictionaryCampaign($dictionary_campaign_id, $variables = null)
{
$variable_list = [
'vars' => [],
......@@ -48,7 +54,7 @@ class Variable extends Model
}
foreach ($variables as $variable) {
$dictionaryCampaignVariable = $variable->findValue($dictionaryCampaign->getKey());
$dictionaryCampaignVariable = $variable->findValue($dictionary_campaign_id);
$value = (
$dictionaryCampaignVariable
......
......@@ -106,7 +106,7 @@ class AddAdGroups extends DirectRequest
$this->setParams([
'AdGroups' => $this->goalAdGroups->map(function (GoalAdGroup $goalAdGroup) use ($variables) {
$list = Variable::getListVariablesByDictionaryCampaign($goalAdGroup->dictionaryCampaign, $variables);
$list = Variable::getListVariablesByDictionaryCampaign($goalAdGroup->dictionary_campaign_id, $variables);
$data = [
'Name' => StrReplaceByVariables::getInstance($goalAdGroup->name, $list)->get(),
......
......@@ -110,7 +110,7 @@ class AddCampaigns extends DirectRequest
$this->setParams([
'Campaigns' => $this->dictionaryCampaigns->map(function (DictionaryCampaign $dictionaryCampaign) use ($variables) {
$list = Variable::getListVariablesByDictionaryCampaign($dictionaryCampaign, $variables);
$list = Variable::getListVariablesByDictionaryCampaign($dictionaryCampaign->getKey(), $variables);
$data = [
'Name' => StrReplaceByVariables::getInstance($dictionaryCampaign->name, $list)->get(),
......
......@@ -97,10 +97,17 @@ class AddKeywords extends DirectRequest
$variables = Variable::all();
$lists = [];
$this->setParams([
'Keywords' => $this->goalKeywords->map(function (GoalKeyword $goalKeyword) use ($variables) {
'Keywords' => $this->goalKeywords->map(function (GoalKeyword $goalKeyword) use ($variables, $lists) {
$list = Variable::getListVariablesByDictionaryCampaign($goalKeyword->dictionaryCampaign, $variables);
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];
}
$keyword = $goalKeyword->keyword;
......
......@@ -91,7 +91,7 @@ class UpdateAdGroups extends DirectRequest
$this->setParams([
'AdGroups' => $this->goalAdGroups->map(function (GoalAdGroup $goalAdGroup) use ($variables) {
$list = Variable::getListVariablesByDictionaryCampaign($goalAdGroup->dictionaryCampaign, $variables);
$list = Variable::getListVariablesByDictionaryCampaign($goalAdGroup->dictionary_campaign_id, $variables);
$data = [
'Id' => $goalAdGroup->external_id,
......
......@@ -80,7 +80,7 @@ class UpdateCampaigns extends DirectRequest
$this->setParams([
'Campaigns' => $params['dictionaryCampaigns']->map(function (DictionaryCampaign $dictionaryCampaign) use ($variables) {
$list = Variable::getListVariablesByDictionaryCampaign($dictionaryCampaign, $variables);
$list = Variable::getListVariablesByDictionaryCampaign($dictionaryCampaign->getKey(), $variables);
$data = [
'Id' => $dictionaryCampaign->external_id,
......
......@@ -88,7 +88,7 @@ class UpdateKeywords extends DirectRequest
$this->setParams([
'Keywords' => $this->goalKeywords->map(function (GoalKeyword $goalKeyword) use ($variables) {
$list = Variable::getListVariablesByDictionaryCampaign($goalKeyword->dictionaryCampaign, $variables);
$list = Variable::getListVariablesByDictionaryCampaign($goalKeyword->dictionary_campaign_id, $variables);
$keyword = $goalKeyword->keyword;
......
......@@ -19,7 +19,7 @@ class StrReplaceByVariables
{
if ($list instanceof DictionaryCampaign) {
$dictionaryCampaign = $list;
$list = Variable::getListVariablesByDictionaryCampaign($dictionaryCampaign);
$list = Variable::getListVariablesByDictionaryCampaign($dictionaryCampaign->getKey());
}
foreach ($list['vars'] as $key => $var) {
......
......@@ -123,7 +123,7 @@ class ReplaceByVariablesTest extends TestCase
$this->assertEquals(2, Variable::count());
$this->assertEquals(1, $this->campaign->dictionaryCampaignVariables->count());
$list = Variable::getListVariablesByDictionaryCampaign($this->dictionaryCampaign);
$list = Variable::getListVariablesByDictionaryCampaign($this->dictionaryCampaign->getKey());
$this->assertEquals('String "custom var value"', StrReplaceByVariables::getInstance('String "var"', $list)->get());
$this->assertEquals('String "vartwo value"', StrReplaceByVariables::getInstance('String "vartwo"', $list)->get());
......
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!