Commit 1f978e1d by Vladislav

#20359 Каждый час обновляются РК

1 parent 285cfa43
Showing with 455 additions and 94 deletions
......@@ -2,9 +2,11 @@
namespace App\Console\Commands;
use App\Models\Pivots\GoalAdGroup;
use App\Models\Tokens;
use App\Service\API\API;
use App\Service\Requests\APIRequest;
use Carbon\Carbon;
use Illuminate\Console\Command;
use Illuminate\Database\Eloquent\Relations\HasMany;
......@@ -41,25 +43,34 @@ class AdGroupsAdd extends Command
*/
public function handle()
{
$tokens = Tokens::whereHas('dictionaryCampaignsEnabledForExternalSynchronized.groupsForNotExternal.group')
$tokens = Tokens::whereHas('dictionaryCampaignsEnabledForExternalSynchronized.groupsForNotExternalForNotReserveCreate.group')
->where('type', '!=', Tokens::MAIN)
->get();
foreach ($tokens as $token) {
$token->load([
'dictionaryCampaignsEnabledForExternalSynchronized.groupsForNotExternal' => function (HasMany $query) {
'dictionaryCampaignsEnabledForExternalSynchronized.groupsForNotExternalForNotReserveCreate' => function (HasMany $query) {
return $query->has('group');
},
'dictionaryCampaignsEnabledForExternalSynchronized.groupsForNotExternal.group',
'dictionaryCampaignsEnabledForExternalSynchronized.groupsForNotExternalForNotReserveCreate.group',
]);
$factory = APIRequest::getInstance(API::YANDEX);
$factory->setToken($token);
$goalAdGroups = $token->dictionaryCampaignsEnabledForExternalSynchronized->pluck('groupsForNotExternalForNotReserveCreate')
->collapse();
foreach (array_chunk($goalAdGroups->pluck('id')->toArray(), 1000) as $items) {
GoalAdGroup::whereIn('id', $items)
->update([
'reserve_create_at' => Carbon::now(),
]);
}
$factory->getRequest('AdGroups', 'add')
->call([
'goalAdGroups' => $token->dictionaryCampaignsEnabledForExternalSynchronized->pluck('groupsForNotExternal')
->collapse(),
'goalAdGroups' => $goalAdGroups,
]);
}
......
......@@ -2,9 +2,11 @@
namespace App\Console\Commands;
use App\Models\Pivots\GoalAdGroup;
use App\Models\Tokens;
use App\Service\API\API;
use App\Service\Requests\APIRequest;
use Carbon\Carbon;
use Illuminate\Console\Command;
use Illuminate\Database\Eloquent\Relations\HasMany;
......@@ -41,27 +43,36 @@ class AdGroupsUpdate extends Command
*/
public function handle()
{
$tokens = Tokens::whereHas('dictionaryCampaignsEnabledForExternalUpdated.groupsForExternalForNeedUpdated.group')
$tokens = Tokens::whereHas('dictionaryCampaignsEnabledForExternalUpdated.groupsForExternalForNeedUpdatedForNotReserveUpdate.group')
->where('type', '!=', Tokens::MAIN)
->get();
foreach ($tokens as $token) {
$token->load([
'dictionaryCampaignsEnabledForExternalUpdated.groupsForExternalForNeedUpdated' => function (HasMany $query) {
'dictionaryCampaignsEnabledForExternalUpdated.groupsForExternalForNeedUpdatedForNotReserveUpdate' => function (HasMany $query) {
return $query->has('group');
},
'dictionaryCampaignsEnabledForExternalUpdated.groupsForExternalForNeedUpdated.group',
'dictionaryCampaignsEnabledForExternalUpdated.groupsForExternalForNeedUpdatedForNotReserveUpdate.group',
]);
$factory = APIRequest::getInstance(API::YANDEX);
$factory->setToken($token);
$goalAdGroups = $token->dictionaryCampaignsEnabledForExternalUpdated->pluck('groupsForExternalForNeedUpdatedForNotReserveUpdate')
->collapse();
foreach (array_chunk($goalAdGroups->pluck('id')->toArray(), 1000) as $items){
GoalAdGroup::whereIn('id', $items)
->update([
'reserve_update_at' => Carbon::now(),
]);
}
$factory->getRequest('AdGroups', 'update')
->call([
'goalAdGroups' => $token->dictionaryCampaignsEnabledForExternalUpdated->pluck('groupsForExternalForNeedUpdated')
->collapse(),
'goalAdGroups' => $goalAdGroups,
]);
}
......
......@@ -2,9 +2,11 @@
namespace App\Console\Commands;
use App\Models\Pivots\GoalAdvertisement;
use App\Models\Tokens;
use App\Service\API\API;
use App\Service\Requests\APIRequest;
use Carbon\Carbon;
use Illuminate\Console\Command;
use Illuminate\Database\Eloquent\Relations\HasMany;
use Illuminate\Database\Eloquent\Relations\HasManyThrough;
......@@ -56,6 +58,7 @@ class AdvertisementsAdd extends Command
->join('advertisements', 'goal_advertisements.advertisement_id', '=', 'advertisements.id')
->whereNull('advertisements.deleted_at')
->whereNull('goal_advertisements.external_id')
->whereNull('goal_advertisements.reserve_create_at')
->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'))
......@@ -81,6 +84,13 @@ class AdvertisementsAdd extends Command
])
->get();
foreach (array_chunk($goalAds->pluck('id')->toArray(), 1000) as $items) {
GoalAdvertisement::whereIn('id', $items)
->update([
'reserve_create_at' => Carbon::now(),
]);
}
$factory->getRequest('Ads', 'add')
->call([
'goalAds' => $goalAds,
......
......@@ -2,9 +2,11 @@
namespace App\Console\Commands;
use App\Models\Pivots\GoalAdvertisement;
use App\Models\Tokens;
use App\Service\API\API;
use App\Service\Requests\APIRequest;
use Carbon\Carbon;
use Illuminate\Console\Command;
use Illuminate\Database\Eloquent\Relations\HasMany;
use Illuminate\Database\Eloquent\Relations\HasManyThrough;
......@@ -61,6 +63,7 @@ class AdvertisementsUpdate extends Command
$goalAds = DB::table('goal_advertisements')
->join('advertisements', 'goal_advertisements.advertisement_id', '=', 'advertisements.id')
->whereNull('advertisements.deleted_at')
->whereNull('advertisements.reserve_update_at')
->whereNotNull('goal_advertisements.updated_need')
->whereNotNull('goal_advertisements.goal_ad_group_external_id')
->whereNotNull('goal_advertisements.dictionary_campaign_external_id')
......@@ -86,6 +89,13 @@ class AdvertisementsUpdate extends Command
])
->get();
foreach (array_chunk($goalAds->pluck('id')->toArray(), 1000) as $items){
GoalAdvertisement::whereIn('id', $items)
->update([
'reserve_update_at' => Carbon::now(),
]);
}
$factory->getRequest('Ads', 'update')
->call([
'goalAds' => $goalAds,
......
......@@ -2,12 +2,12 @@
namespace App\Console\Commands;
use App\Models\Pivots\GoalBidModifier;
use App\Models\Tokens;
use App\Service\API\API;
use App\Service\Requests\APIRequest;
use Carbon\Carbon;
use Illuminate\Console\Command;
use Illuminate\Database\Eloquent\Relations\HasMany;
use Illuminate\Database\Eloquent\Relations\HasManyThrough;
use Illuminate\Database\Query\Builder;
use Illuminate\Support\Facades\DB;
......@@ -57,6 +57,7 @@ class BidModifiersAdd extends Command
->join('bid_modifiers', 'goal_bid_modifiers.bid_modifier_id', '=', 'bid_modifiers.id')
->whereNull('bid_modifiers.deleted_at')
->whereNull('goal_bid_modifiers.external_id')
->whereNull('goal_bid_modifiers.reserve_create_at')
->whereNotNull('goal_bid_modifiers.dictionary_campaign_external_id')
->where(function (Builder $query) {
$query->whereNull('goal_bid_modifiers.goal_ad_group_id')
......@@ -77,6 +78,13 @@ class BidModifiersAdd extends Command
])
->get();
foreach (array_chunk($goalBidModifiers->pluck('id')->toArray(), 1000) as $items) {
GoalBidModifier::whereIn('id', $items)
->update([
'reserve_create_at' => Carbon::now(),
]);
}
$factory->getRequest('BidModifiers', 'add')
->call([
'goalBidModifiers' => $goalBidModifiers,
......
......@@ -2,9 +2,11 @@
namespace App\Console\Commands;
use App\Models\Pivots\DictionaryCampaign;
use App\Models\Tokens;
use App\Service\API\API;
use App\Service\Requests\APIRequest;
use Carbon\Carbon;
use Illuminate\Console\Command;
class CampaignsAdd extends Command
......@@ -40,8 +42,8 @@ class CampaignsAdd extends Command
*/
public function handle()
{
$tokens = Tokens::whereHas('dictionaryCampaignsEnabledForNotExternal')
->with('dictionaryCampaignsEnabledForNotExternal.campaign')
$tokens = Tokens::whereHas('dictionaryCampaignsEnabledForNotExternalForNotReserveCreate')
->with('dictionaryCampaignsEnabledForNotExternalForNotReserveCreate.campaign')
->where('type', '!=', Tokens::MAIN)
->get();
......@@ -50,9 +52,16 @@ class CampaignsAdd extends Command
$factory = APIRequest::getInstance(API::YANDEX);
$factory->setToken($token);
foreach (array_chunk($token->dictionaryCampaignsEnabledForNotExternalForNotReserveCreate->pluck('id')->toArray(), 1000) as $items) {
DictionaryCampaign::whereIn('id', $items)
->update([
'reserve_create_at' => Carbon::now(),
]);
}
$factory->getRequest('Campaigns', 'add')
->call([
'dictionaryCampaigns' => $token->dictionaryCampaignsEnabledForNotExternal,
'dictionaryCampaigns' => $token->dictionaryCampaignsEnabledForNotExternalForNotReserveCreate,
]);
}
......
......@@ -2,9 +2,11 @@
namespace App\Console\Commands;
use App\Models\Pivots\DictionaryCampaign;
use App\Models\Tokens;
use App\Service\API\API;
use App\Service\Requests\APIRequest;
use Carbon\Carbon;
use Illuminate\Console\Command;
class CampaignsResume extends Command
......@@ -56,8 +58,8 @@ class CampaignsResume extends Command
}
*/
$tokens = Tokens::whereHas('dictionaryCampaignsEnabledForExternalDisabled')
->with('dictionaryCampaignsEnabledForExternalDisabled')
$tokens = Tokens::whereHas('dictionaryCampaignsEnabledForExternalDisabledForNotReserveResume')
->with('dictionaryCampaignsEnabledForExternalDisabledForNotReserveResume')
->where('type', '!=', Tokens::MAIN)
->get();
......@@ -65,9 +67,16 @@ class CampaignsResume extends Command
$factory = APIRequest::getInstance(API::YANDEX);
$factory->setToken($token);
foreach (array_chunk($token->dictionaryCampaignsEnabledForExternalDisabledForNotReserveResume->pluck('id')->toArray(), 1000) as $items){
DictionaryCampaign::whereIn('id', $items)
->update([
'reserve_resume_at' => Carbon::now(),
]);
}
$factory->getRequest('Campaigns', 'resume')
->call([
'ids' => $token->dictionaryCampaignsEnabledForExternalDisabled->pluck('external_id')->toArray(),
'ids' => $token->dictionaryCampaignsEnabledForExternalDisabledForNotReserveResume->pluck('external_id')->toArray(),
]);
}
......
......@@ -2,9 +2,11 @@
namespace App\Console\Commands;
use App\Models\Pivots\DictionaryCampaign;
use App\Models\Tokens;
use App\Service\API\API;
use App\Service\Requests\APIRequest;
use Carbon\Carbon;
use Illuminate\Console\Command;
class CampaignsSuspend extends Command
......@@ -56,8 +58,8 @@ class CampaignsSuspend extends Command
}
*/
$tokens = Tokens::whereHas('dictionaryCampaignsNotEnabledForExternalNotDisabled')
->with('dictionaryCampaignsNotEnabledForExternalNotDisabled')
$tokens = Tokens::whereHas('dictionaryCampaignsNotEnabledForExternalNotDisabledForNotReserveSuspend')
->with('dictionaryCampaignsNotEnabledForExternalNotDisabledForNotReserveSuspend')
->where('type', '!=', Tokens::MAIN)
->get();
......@@ -65,9 +67,16 @@ class CampaignsSuspend extends Command
$factory = APIRequest::getInstance(API::YANDEX);
$factory->setToken($token);
foreach (array_chunk($token->dictionaryCampaignsNotEnabledForExternalNotDisabledForNotReserveSuspend->pluck('id')->toArray(), 1000) as $items){
DictionaryCampaign::whereIn('id', $items)
->update([
'reserve_suspend_at' => Carbon::now(),
]);
}
$factory->getRequest('Campaigns', 'suspend')
->call([
'ids' => $token->dictionaryCampaignsNotEnabledForExternalNotDisabled->pluck('external_id')->toArray(),
'ids' => $token->dictionaryCampaignsNotEnabledForExternalNotDisabledForNotReserveSuspend->pluck('external_id')->toArray(),
]);
}
......
......@@ -2,9 +2,11 @@
namespace App\Console\Commands;
use App\Models\Pivots\DictionaryCampaign;
use App\Models\Tokens;
use App\Service\API\API;
use App\Service\Requests\APIRequest;
use Carbon\Carbon;
use Illuminate\Console\Command;
class CampaignsUpdate extends Command
......@@ -40,8 +42,8 @@ class CampaignsUpdate extends Command
*/
public function handle()
{
$tokens = Tokens::whereHas('dictionaryCampaignsEnabledForExternalUpdatedNeedUpdated.campaign')
->with('dictionaryCampaignsEnabledForExternalUpdatedNeedUpdated.campaign')
$tokens = Tokens::whereHas('dictionaryCampaignsEnabledForExternalUpdatedNeedUpdatedForNotReserveUpdate.campaign')
->with('dictionaryCampaignsEnabledForExternalUpdatedNeedUpdatedForNotReserveUpdate.campaign')
->where('type', '!=', Tokens::MAIN)
->get();
......@@ -49,9 +51,16 @@ class CampaignsUpdate extends Command
$factory = APIRequest::getInstance(API::YANDEX);
$factory->setToken($token);
foreach (array_chunk($token->dictionaryCampaignsEnabledForExternalUpdatedNeedUpdatedForNotReserveUpdate->pluck('id')->toArray(), 1000) as $items){
DictionaryCampaign::whereIn('id', $items)
->update([
'reserve_update_at' => Carbon::now(),
]);
}
$factory->getRequest('Campaigns', 'update')
->call([
'dictionaryCampaigns' => $token->dictionaryCampaignsEnabledForExternalUpdatedNeedUpdated,
'dictionaryCampaigns' => $token->dictionaryCampaignsEnabledForExternalUpdatedNeedUpdatedForNotReserveUpdate,
]);
}
......
......@@ -2,9 +2,11 @@
namespace App\Console\Commands;
use App\Models\Pivots\GoalKeyword;
use App\Models\Tokens;
use App\Service\API\API;
use App\Service\Requests\APIRequest;
use Carbon\Carbon;
use Illuminate\Console\Command;
use Illuminate\Database\Eloquent\Relations\HasMany;
use Illuminate\Database\Eloquent\Relations\HasManyThrough;
......@@ -61,6 +63,7 @@ class KeywordsUpdate extends Command
$goalKeywords = DB::table('goal_keywords')
->join('keywords', 'goal_keywords.keyword_id', '=', 'keywords.id')
->whereNull('keywords.deleted_at')
->whereNull('keywords.reserve_update_at')
->whereNotNull('goal_advertisements.updated_need')
->whereNotNull('goal_keywords.goal_ad_group_external_id')
->whereNotNull('goal_keywords.dictionary_campaign_external_id')
......@@ -74,6 +77,13 @@ class KeywordsUpdate extends Command
])
->get();
foreach (array_chunk($goalKeywords->pluck('id')->toArray(), 1000) as $items){
GoalKeyword::whereIn('id', $items)
->update([
'reserve_update_at' => Carbon::now(),
]);
}
$factory->getRequest('Keywords', 'update')
->call([
'goalKeywords' => $goalKeywords,
......
......@@ -201,12 +201,14 @@ class Campaigns extends Model
$campaign->copyInGoalCampaign();
}
if (self::getPropertiesWatch()->first(function ($property_name) use ($campaign) {
return $campaign->{$property_name} !== $campaign->getOriginal($property_name);
})) {
$campaign->dictionaryCampaigns()->forExternal()->update([
'updated_need' => Carbon::now(),
]);
if ($campaign->manage) {
if (self::getPropertiesWatch()->first(function ($property_name) use ($campaign) {
return $campaign->{$property_name} !== $campaign->getOriginal($property_name);
})) {
$campaign->dictionaryCampaigns()->forExternal()->update([
'updated_need' => Carbon::now(),
]);
}
}
});
......
......@@ -20,9 +20,9 @@ use Illuminate\Support\Collection;
* @property-read DictionaryCampaignVariable[] $dictionaryCampaignVariables
* @property-read Variable[] $variables
* @property-read \Illuminate\Database\Eloquent\Collection|GoalAdGroup[] $groups
* @property-read \Illuminate\Database\Eloquent\Collection|GoalAdGroup[] $groupsForNotExternal
* @property-read \Illuminate\Database\Eloquent\Collection|GoalAdGroup[] $groupsForNotExternalForNotReserveCreate
* @property-read \Illuminate\Database\Eloquent\Collection|GoalAdGroup[] $groupsForExternalForUpdatedSelf
* @property-read \Illuminate\Database\Eloquent\Collection|GoalAdGroup[] $groupsForExternalForNeedUpdated
* @property-read \Illuminate\Database\Eloquent\Collection|GoalAdGroup[] $groupsForExternalForNeedUpdatedForNotReserveUpdate
* @mixin \Eloquent
* @property int $id
* @property int|null $external_id
......@@ -44,6 +44,10 @@ use Illuminate\Support\Collection;
* @method static \Illuminate\Database\Eloquent\Builder|DictionaryCampaign notDisabled()
* @method static \Illuminate\Database\Eloquent\Builder|DictionaryCampaign disabled()
* @method static \Illuminate\Database\Eloquent\Builder|DictionaryCampaign forNotExternal()
* @method static \Illuminate\Database\Eloquent\Builder|DictionaryCampaign forNotReserveCreate()
* @method static \Illuminate\Database\Eloquent\Builder|DictionaryCampaign forNotReserveUpdate()
* @method static \Illuminate\Database\Eloquent\Builder|DictionaryCampaign forNotReserveResume()
* @method static \Illuminate\Database\Eloquent\Builder|DictionaryCampaign forNotReserveSuspend()
* @method static \Illuminate\Database\Eloquent\Builder|DictionaryCampaign needUpdated()
* @method static \Illuminate\Database\Eloquent\Builder|DictionaryCampaign enabled($value = true)
* @method static \Illuminate\Database\Eloquent\Builder|DictionaryCampaign forUpdated($value = true)
......@@ -110,6 +114,10 @@ class DictionaryCampaign extends Pivot
'disabled_at',
'deleted_at',
'synced_need',
'reserve_create_at',
'reserve_update_at',
'reserve_resume_at',
'reserve_suspend_at',
];
protected $casts = [
......@@ -125,6 +133,10 @@ class DictionaryCampaign extends Pivot
'synced' => 'boolean',
'disabled_at' => 'datetime',
'synced_need' => 'datetime',
'reserve_create_at' => 'datetime',
'reserve_update_at' => 'datetime',
'reserve_resume_at' => 'datetime',
'reserve_suspend_at' => 'datetime',
];
public $incrementing = true;
......@@ -147,6 +159,10 @@ class DictionaryCampaign extends Pivot
'synced',
'disabled_at',
'synced_need',
'reserve_create_at',
'reserve_update_at',
'reserve_resume_at',
'reserve_suspend_at',
];
}
......@@ -278,6 +294,42 @@ class DictionaryCampaign extends Pivot
/**
* @param Builder $query
* @return Builder
*/
public function scopeForNotReserveCreate($query)
{
return $query->whereNull('reserve_create_at');
}
/**
* @param Builder $query
* @return Builder
*/
public function scopeForNotReserveUpdate($query)
{
return $query->whereNull('reserve_update_at');
}
/**
* @param Builder $query
* @return Builder
*/
public function scopeForNotReserveResume($query)
{
return $query->whereNull('reserve_resume_at');
}
/**
* @param Builder $query
* @return Builder
*/
public function scopeForNotReserveSuspend($query)
{
return $query->whereNull('reserve_suspend_at');
}
/**
* @param Builder $query
* @param bool $enabled
* @return Builder
*/
......@@ -399,9 +451,9 @@ class DictionaryCampaign extends Pivot
return $this->hasMany(GoalAdGroup::class, 'dictionary_campaign_id');
}
public function groupsForNotExternal()
public function groupsForNotExternalForNotReserveCreate()
{
return $this->groups()->forNotExternal();
return $this->groups()->forNotExternal()->forNotReserveCreate();
}
public function groupsForExternalForUpdatedSelf()
......@@ -409,9 +461,9 @@ class DictionaryCampaign extends Pivot
return $this->groups()->forExternal()->forUpdatedSelf();
}
public function groupsForExternalForNeedUpdated()
public function groupsForExternalForNeedUpdatedForNotReserveUpdate()
{
return $this->groups()->forExternal()->needUpdated();
return $this->groups()->forExternal()->needUpdated()->forNotReserveUpdate();
}
public function goalKeywords()
......
......@@ -34,6 +34,8 @@ use Illuminate\Support\Collection;
* @property-read int|null $variables_count
* @method static Builder|GoalAdGroup forExternal()
* @method static Builder|GoalAdGroup forNotExternal()
* @method static Builder|GoalAdGroup forNotReserveCreate()
* @method static Builder|GoalAdGroup forNotReserveUpdate()
* @method static Builder|GoalAdGroup forUpdatedSelf()
* @method static Builder|GoalAdGroup needUpdated()
* @method static Builder|GoalAdGroup newModelQuery()
......@@ -71,6 +73,8 @@ class GoalAdGroup extends Pivot
'external_updated_at',
'updated_need',
'updated_self',
'reserve_create_at',
'reserve_update_at',
];
protected $casts = [
......@@ -79,6 +83,8 @@ class GoalAdGroup extends Pivot
'external_updated_at' => 'datetime',
'updated_need' => 'datetime',
'updated_self' => 'datetime',
'reserve_create_at' => 'datetime',
'reserve_update_at' => 'datetime',
];
public $incrementing = true;
......@@ -95,8 +101,10 @@ class GoalAdGroup extends Pivot
'negative_keywords',
'external_upload_at',
'external_updated_at',
'updated_self',
'updated_need',
'updated_self',
'reserve_create_at',
'reserve_update_at',
];
}
......@@ -169,6 +177,24 @@ class GoalAdGroup extends Pivot
* @param Builder $query
* @return Builder
*/
public function scopeForNotReserveCreate($query)
{
return $query->whereNull('reserve_create_at');
}
/**
* @param Builder $query
* @return Builder
*/
public function scopeForNotReserveUpdate($query)
{
return $query->whereNull('reserve_update_at');
}
/**
* @param Builder $query
* @return Builder
*/
public function scopeNeedUpdated($query)
{
return $query->whereNotNull('updated_need');
......
......@@ -25,6 +25,8 @@ use Illuminate\Database\Eloquent\SoftDeletes;
* @property-read Advertisement $advertisement
* @method static Builder|GoalAdvertisement forExternal()
* @method static Builder|GoalAdvertisement forNotExternal()
* @method static Builder|GoalAdvertisement forNotReserveCreate()
* @method static Builder|GoalAdvertisement forNotReserveUpdate()
* @method static Builder|GoalAdvertisement needUpdated()
* @method static Builder|GoalAdvertisement newModelQuery()
* @method static Builder|GoalAdvertisement newQuery()
......@@ -60,6 +62,7 @@ class GoalAdvertisement extends Pivot
'external_updated_at',
'updated_need',
'reserve_create_at',
'reserve_update_at',
];
protected $casts = [
......@@ -67,6 +70,7 @@ class GoalAdvertisement extends Pivot
'external_updated_at' => 'datetime',
'updated_need' => 'datetime',
'reserve_create_at' => 'datetime',
'reserve_update_at' => 'datetime',
];
public $incrementing = true;
......@@ -84,6 +88,8 @@ class GoalAdvertisement extends Pivot
'external_upload_at',
'external_updated_at',
'updated_need',
'reserve_create_at',
'reserve_update_at',
];
}
......@@ -109,6 +115,24 @@ class GoalAdvertisement extends Pivot
* @param Builder $query
* @return Builder
*/
public function scopeForNotReserveCreate($query)
{
return $query->whereNull('reserve_create_at');
}
/**
* @param Builder $query
* @return Builder
*/
public function scopeForNotReserveUpdate($query)
{
return $query->whereNull('reserve_update_at');
}
/**
* @param Builder $query
* @return Builder
*/
public function scopeNeedUpdated($query)
{
return $query->whereNotNull('updated_need');
......
......@@ -25,6 +25,7 @@ use Illuminate\Database\Eloquent\SoftDeletes;
* @property-read BidModifier $bidModifier
* @method static Builder|BidModifiers forExternal()
* @method static Builder|BidModifiers forNotExternal()
* @method static Builder|BidModifiers forNotReserveCreate()
* @method static Builder|BidModifiers needUpdated()
* @method static Builder|BidModifiers newModelQuery()
* @method static Builder|BidModifiers newQuery()
......@@ -79,6 +80,7 @@ class GoalBidModifier extends Pivot
'external_upload_at',
'external_updated_at',
'updated_need',
'reserve_create_at',
];
protected $casts = [
......@@ -90,6 +92,7 @@ class GoalBidModifier extends Pivot
'external_upload_at' => 'datetime',
'external_updated_at' => 'datetime',
'updated_need' => 'datetime',
'reserve_create_at' => 'datetime',
];
public $incrementing = true;
......@@ -116,6 +119,7 @@ class GoalBidModifier extends Pivot
'external_upload_at',
'external_updated_at',
'updated_need',
'reserve_create_at',
];
}
......@@ -141,6 +145,15 @@ class GoalBidModifier extends Pivot
* @param Builder $query
* @return Builder
*/
public function scopeForNotReserveCreate($query)
{
return $query->whereNull('reserve_create_at');
}
/**
* @param Builder $query
* @return Builder
*/
public function scopeNeedUpdated($query)
{
return $query->whereNotNull('updated_need');
......
......@@ -60,6 +60,7 @@ class GoalKeyword extends Pivot
'external_updated_at',
'updated_need',
'reserve_create_at',
'reserve_update_at',
];
protected $casts = [
......@@ -67,6 +68,7 @@ class GoalKeyword extends Pivot
'external_updated_at' => 'datetime',
'updated_need' => 'datetime',
'reserve_create_at' => 'datetime',
'reserve_update_at' => 'datetime',
];
public $incrementing = true;
......@@ -84,6 +86,8 @@ class GoalKeyword extends Pivot
'external_upload_at',
'external_updated_at',
'updated_need',
'reserve_create_at',
'reserve_update_at',
];
}
......
......@@ -40,13 +40,13 @@ use Illuminate\Database\Eloquent\Model;
* @property-read int|null $dictionary_campaigns_count
* @property-read \Illuminate\Database\Eloquent\Collection|DictionaryCampaign[] $dictionaryCampaignsForExternal
* @property-read \Illuminate\Database\Eloquent\Collection|DictionaryCampaign[] $dictionaryCampaignsForExternalWithTrashed
* @property-read \Illuminate\Database\Eloquent\Collection|DictionaryCampaign[] $dictionaryCampaignsEnabledForNotExternal
* @property-read \Illuminate\Database\Eloquent\Collection|DictionaryCampaign[] $dictionaryCampaignsNotEnabledForExternalNotDisabled
* @property-read \Illuminate\Database\Eloquent\Collection|DictionaryCampaign[] $dictionaryCampaignsEnabledForNotExternalForNotReserveCreate
* @property-read \Illuminate\Database\Eloquent\Collection|DictionaryCampaign[] $dictionaryCampaignsNotEnabledForExternalNotDisabledForNotReserveSuspend
* @property-read \Illuminate\Database\Eloquent\Collection|DictionaryCampaign[] $dictionaryCampaignsEnabledForExternal
* @property-read \Illuminate\Database\Eloquent\Collection|DictionaryCampaign[] $dictionaryCampaignsEnabledForExternalUpdated
* @property-read \Illuminate\Database\Eloquent\Collection|DictionaryCampaign[] $dictionaryCampaignsEnabledForExternalDisabled
* @property-read \Illuminate\Database\Eloquent\Collection|DictionaryCampaign[] $dictionaryCampaignsEnabledForExternalDisabledForNotReserveResume
* @property-read \Illuminate\Database\Eloquent\Collection|DictionaryCampaign[] $dictionaryCampaignsEnabledForExternalSynchronized
* @property-read \Illuminate\Database\Eloquent\Collection|DictionaryCampaign[] $dictionaryCampaignsEnabledForExternalUpdatedNeedUpdated
* @property-read \Illuminate\Database\Eloquent\Collection|DictionaryCampaign[] $dictionaryCampaignsEnabledForExternalUpdatedNeedUpdatedForNotReserveUpdate
* @property-read \Illuminate\Database\Eloquent\Collection|DictionaryCampaign[] $dictionaryCampaignsEnabledForExternalSynchronizedUpdatedSelf
* @property-read \Illuminate\Database\Eloquent\Collection|DictionaryCampaign[] $dictionaryCampaignsEnabledForExternalSynchronizedUpdatedChildren
* @property-read \Illuminate\Database\Eloquent\Collection|\App\Models\Dictionary[] $campaignsForManaged
......@@ -100,21 +100,21 @@ class Tokens extends Model
{
return $this->check_changes
? $this->check_changes
: Carbon::now()->addDays(-1);
: Carbon::now();
}
public function getCheckChangesCampaignAtAttribute()
{
return $this->check_changes_campaign
? $this->check_changes_campaign
: Carbon::now()->addDays(-1);
: Carbon::now();
}
public function getCheckChangesAdGroupAtAttribute()
{
return $this->check_changes_ad_group
? $this->check_changes_ad_group
: Carbon::now()->addDays(-1);
: Carbon::now();
}
/**
......@@ -208,24 +208,24 @@ class Tokens extends Model
return $this->dictionaryCampaigns()->enabled()->forExternal()->forUpdated();
}
public function dictionaryCampaignsEnabledForExternalUpdatedNeedUpdated()
public function dictionaryCampaignsEnabledForExternalUpdatedNeedUpdatedForNotReserveUpdate()
{
return $this->dictionaryCampaigns()->enabled()->forExternal()->forUpdated()->needUpdated();
return $this->dictionaryCampaigns()->enabled()->forExternal()->forUpdated()->needUpdated()->forNotReserveUpdate();
}
public function dictionaryCampaignsEnabledForNotExternal()
public function dictionaryCampaignsEnabledForNotExternalForNotReserveCreate()
{
return $this->dictionaryCampaigns()->enabled()->forNotExternal();
return $this->dictionaryCampaigns()->enabled()->forNotExternal()->forNotReserveCreate();
}
public function dictionaryCampaignsNotEnabledForExternalNotDisabled()
public function dictionaryCampaignsNotEnabledForExternalNotDisabledForNotReserveSuspend()
{
return $this->dictionaryCampaigns()->enabled(false)->forExternal()->notDisabled();
return $this->dictionaryCampaigns()->enabled(false)->forExternal()->notDisabled()->forNotReserveSuspend();
}
public function dictionaryCampaignsEnabledForExternalDisabled()
public function dictionaryCampaignsEnabledForExternalDisabledForNotReserveResume()
{
return $this->dictionaryCampaigns()->enabled()->forExternal()->disabled();
return $this->dictionaryCampaigns()->enabled()->forExternal()->disabled()->forNotReserveResume();
}
public function dictionaryCampaignsEnabledForExternalSynchronized()
......
......@@ -69,6 +69,7 @@ class AddAdGroups extends DirectRequest
$goalAdGroup->update([
'external_id' => $external_id,
'external_upload_at' => Carbon::now(),
'reserve_create_at' => null,
]);
$goalAdGroup->goalKeywords()->update([
......@@ -90,6 +91,14 @@ class AddAdGroups extends DirectRequest
}
}
public function failed()
{
GoalAdGroup::whereIn('id', $this->goalAdGroups->pluck('id')->toArray())
->update([
'reserve_create_at' => null,
]);
}
public function putParams($params)
{
$this->goalAdGroups = $params['goalAdGroups'];
......
......@@ -72,6 +72,7 @@ class AddAds extends DirectRequest
->update([
'external_id' => $external_id,
'external_upload_at' => Carbon::now(),
'reserve_create_at' => null,
]);
}
......@@ -81,6 +82,14 @@ class AddAds extends DirectRequest
}
}
public function failed()
{
GoalAdvertisement::whereIn('id', $this->goalAds->pluck('id')->toArray())
->update([
'reserve_create_at' => null,
]);
}
public function putParams($params)
{
$this->goalAds = $params['goalAds'];
......
......@@ -71,6 +71,7 @@ class AddBidModifiers extends DirectRequest
->update([
'external_id' => $external_id,
'external_upload_at' => Carbon::now(),
'reserve_create_at' => null,
]);
}
......@@ -80,6 +81,14 @@ class AddBidModifiers extends DirectRequest
}
}
public function failed()
{
GoalBidModifier::whereIn('id', $this->goalBidModifiers->pluck('id')->toArray())
->update([
'reserve_create_at' => null,
]);
}
public function putParams($params)
{
$this->goalBidModifiers = $params['goalBidModifiers'];
......
......@@ -71,6 +71,7 @@ class AddCampaigns extends DirectRequest
$dictionaryCampaign->update([
'external_id' => $external_id,
'external_upload_at' => Carbon::now(),
'reserve_create_at' => null,
]);
$dictionaryCampaign->groups()->update([
......@@ -96,6 +97,14 @@ class AddCampaigns extends DirectRequest
}
}
public function failed()
{
DictionaryCampaign::whereIn('id', $this->dictionaryCampaigns->pluck('id')->toArray())
->update([
'reserve_create_at' => null,
]);
}
public function putParams($params)
{
$this->dictionaryCampaigns = $params['dictionaryCampaigns'];
......
......@@ -70,9 +70,16 @@ class CheckCampaignsChanges extends DirectRequest
}
}
$check_changes_campaign = Carbon::parse($response['result']['Timestamp']);
if ($this->getToken()->check_changes_campaign && $this->getToken()->check_changes_campaign->diff($check_changes_campaign)->invert) {
$check_changes_campaign = $this->getToken()->check_changes_campaign;
}
$this->getToken()->update([
'check_changes_campaign' => Carbon::parse($response['result']['Timestamp']),
'check_changes_campaign' => $check_changes_campaign,
]);
$this->setToken($this->getToken()->refresh());
}
......
......@@ -84,8 +84,6 @@ class GetAdGroups extends DirectRequest
$external_id = (string)$ad_group['CampaignId'];
//$campaigns->firstWhere('external_id', $external_id);
if (!$campaign = $campaigns[$external_id] ?? false) {
continue;
}
......
......@@ -43,17 +43,11 @@ class ResumeCampaigns extends DirectRequest
$external_id = (string)$resume_result['Id'];
if ($this->getToken()->isMain()) {
Campaigns::where('external_id', $external_id)
->update([
'disabled_at' => null,
]);
} else {
DictionaryCampaign::where('external_id', $external_id)
->update([
'disabled_at' => null,
]);
}
DictionaryCampaign::where('external_id', $external_id)
->update([
'disabled_at' => null,
'reserve_resume_at' => null,
]);
}
} catch (\Exception $e) {
Log::debug($e);
......@@ -61,6 +55,14 @@ class ResumeCampaigns extends DirectRequest
}
}
public function failed()
{
DictionaryCampaign::whereIn('external_id', array_column($this->getParams()['SelectionCriteria']['Ids'], 'Id'))
->update([
'reserve_resume_at' => null,
]);
}
private function requestPrepare($filter)
{
$this->setService('Campaigns');
......
......@@ -44,17 +44,11 @@ class SuspendCampaigns extends DirectRequest
$external_id = (string)$suspend_result['Id'];
if ($this->getToken()->isMain()) {
Campaigns::where('external_id', $external_id)
->update([
'disabled_at' => Carbon::now(),
]);
} else {
DictionaryCampaign::where('external_id', $external_id)
->update([
'disabled_at' => Carbon::now(),
]);
}
DictionaryCampaign::where('external_id', $external_id)
->update([
'disabled_at' => Carbon::now(),
'reserve_suspend_at' => null,
]);
}
} catch (\Exception $e) {
Log::debug($e);
......@@ -62,6 +56,14 @@ class SuspendCampaigns extends DirectRequest
}
}
public function failed()
{
DictionaryCampaign::whereIn('external_id', array_column($this->getParams()['SelectionCriteria']['Ids'], 'Id'))
->update([
'reserve_suspend_at' => null,
]);
}
private function requestPrepare($filter)
{
$this->setService('Campaigns');
......
......@@ -3,15 +3,12 @@
namespace App\Service\Requests\Direct;
use App\Jobs\ProcessCallLimitedAPI;
use App\Models\Campaigns;
use App\Models\Pivots\DictionaryCampaign;
use App\Models\Pivots\GoalAdGroup;
use App\Models\Variable;
use App\Service\Contract\APIRequest;
use App\Service\Requests\DirectRequest;
use App\Service\StrReplaceByVariables;
use Carbon\Carbon;
use Illuminate\Database\Eloquent\Collection;
use Illuminate\Support\Facades\Log;
class UpdateAdGroups extends DirectRequest
......@@ -58,15 +55,29 @@ class UpdateAdGroups extends DirectRequest
->where('external_id', $external_id)
->update([
'updated_need' => null,
'reserve_update_at' => null,
]);
}
$this->getToken()->update([
'check_changes_ad_group' => Carbon::now()->addSeconds(5),
]);
} catch (\Exception $e) {
Log::debug($e);
throw $e;
}
}
public function failed()
{
GoalAdGroup::whereIn('external_id', array_column($this->getParams()['AdGroups'], 'Id'))
->update([
'reserve_update_at' => null,
]);
}
private function requestPrepare($params)
{
$this->setService('AdGroups');
......
......@@ -9,6 +9,7 @@ use App\Models\Variable;
use App\Service\Contract\APIRequest;
use App\Service\Requests\DirectRequest;
use App\Service\StrReplaceByVariables;
use Carbon\Carbon;
use Illuminate\Support\Facades\Log;
class UpdateAds extends DirectRequest
......@@ -55,15 +56,29 @@ class UpdateAds extends DirectRequest
->where('external_id', $external_id)
->update([
'updated_need' => null,
'reserve_update_at' => null,
]);
}
$this->getToken()->update([
'check_changes_ad_group' => Carbon::now()->addSeconds(5),
]);
} catch (\Exception $e) {
Log::debug($e);
throw $e;
}
}
public function failed()
{
GoalAdvertisement::whereIn('external_id', array_column($this->getParams()['Ads'], 'Id'))
->update([
'reserve_update_at' => null,
]);
}
private function requestPrepare($params)
{
$this->setService('Ads');
......
......@@ -57,14 +57,28 @@ class UpdateCampaigns extends DirectRequest
->where('external_id', $external_id)
->update([
'updated_need' => null,
'reserve_update_at' => null,
]);
}
$this->getToken()->update([
'check_changes_campaign' => Carbon::now()->addSeconds(5),
]);
} catch (\Exception $e) {
Log::debug($e);
throw $e;
}
}
public function failed()
{
DictionaryCampaign::whereIn('external_id', array_column($this->getParams()['Campaigns'], 'Id'))
->update([
'reserve_update_at' => null,
]);
}
private function requestPrepare($params)
{
$this->setService('Campaigns');
......
......@@ -56,6 +56,7 @@ class UpdateKeywords extends DirectRequest
->where('external_id', $external_id)
->update([
'updated_need' => null,
'reserve_update_at' => null,
]);
}
......@@ -65,6 +66,14 @@ class UpdateKeywords extends DirectRequest
}
}
public function failed()
{
GoalKeyword::whereIn('external_id', array_column($this->getParams()['goalKeywords'], 'Id'))
->update([
'reserve_update_at' => null,
]);
}
private function requestPrepare($params)
{
$this->setService('Keywords');
......
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class AddReserveColumns extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::table('dictionary_campaigns', function (Blueprint $table) {
$table->timestamp('reserve_create_at')->nullable();
$table->timestamp('reserve_update_at')->nullable();
$table->timestamp('reserve_resume_at')->nullable();
$table->timestamp('reserve_suspend_at')->nullable();
});
Schema::table('goal_ad_groups', function (Blueprint $table) {
$table->timestamp('reserve_create_at')->nullable();
$table->timestamp('reserve_update_at')->nullable();
});
Schema::table('goal_bid_modifiers', function (Blueprint $table) {
$table->timestamp('reserve_create_at')->nullable();
});
Schema::table('goal_advertisements', function (Blueprint $table) {
$table->timestamp('reserve_create_at')->nullable();
$table->timestamp('reserve_update_at')->nullable();
});
Schema::table('goal_keywords', function (Blueprint $table) {
$table->timestamp('reserve_update_at')->nullable();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
//
}
}
......@@ -51,7 +51,7 @@
<th class="px-6 pt-6 pb-4">Включено?</th>
<th class="px-6 pt-6 pb-4"></th>
</tr>
<tr v-if="city.dictionary_campaigns.length" :key="dictionary_campaign.id" v-for="dictionary_campaign in city.dictionary_campaigns">
<tr v-if="city.dictionary_campaigns.length" :key="city.id + '-' + dictionary_campaign.id" v-for="dictionary_campaign in city.dictionary_campaigns">
<td class="border-t"></td>
<td class="border-t">
<span class="px-6 py-4 flex items-center focus:text-indigo-500">
......
......@@ -81,7 +81,7 @@ class AddAdGroupTest extends TestCase
$this->assertEquals(1, $this->dictionary->campaigns->count());
$this->params = [
'dictionaryCampaigns' => $this->token->dictionaryCampaignsEnabledForNotExternal,
'dictionaryCampaigns' => $this->token->dictionaryCampaignsEnabledForNotExternalForNotReserveCreate,
'variables' => Variable::all(),
];
......
......@@ -75,7 +75,7 @@ class AddCampaignsTest extends TestCase
$this->assertEquals(11, $this->dictionary->campaigns->count());
$this->params = [
'dictionaryCampaigns' => $this->token->dictionaryCampaignsEnabledForNotExternal,
'dictionaryCampaigns' => $this->token->dictionaryCampaignsEnabledForNotExternalForNotReserveCreate,
'variables' => Variable::all(),
];
......@@ -121,10 +121,10 @@ class AddCampaignsTest extends TestCase
public function test_prepare_request_and_slice(){
$this->assertEquals(11, $this->dictionary->campaigns->count());
$this->assertEquals(11, $this->token->dictionaryCampaignsEnabledForNotExternal->count());
$this->assertEquals(11, $this->token->dictionaryCampaignsEnabledForNotExternalForNotReserveCreate->count());
$this->request->requestPrepare([
'dictionaryCampaigns' => $this->token->dictionaryCampaignsEnabledForNotExternal,
'dictionaryCampaigns' => $this->token->dictionaryCampaignsEnabledForNotExternalForNotReserveCreate,
'variables' => Variable::all(),
]);
......@@ -144,7 +144,7 @@ class AddCampaignsTest extends TestCase
public function test_call_api(){
Queue::fake();
$this->request->call([
'dictionaryCampaigns' => $this->token->dictionaryCampaignsEnabledForNotExternal,
'dictionaryCampaigns' => $this->token->dictionaryCampaignsEnabledForNotExternalForNotReserveCreate,
'variables' => Variable::all(),
]);
......
......@@ -181,7 +181,6 @@ class CheckChangesAdGroupsTest extends TestCase
$this->assertEquals(0, AdGroup::forUpdatedSelf()->count());
$this->assertEquals($this->ad_group_data['result']['AdGroups'][0]['Name'], $this->ad_group->name);
$this->assertEquals($this->ad_group_data['result']['AdGroups'][0]['Name'], GoalAdGroup::first()->name);
$this->assertEquals(1, GoalAdGroup::needUpdated()->count());
......
......@@ -174,7 +174,7 @@ class LimitsTest extends TestCase
$requestCmpgn = $request->getRequest('Campaigns', 'update');
$this->token->limit = 191;
$requestCmpgn->call([
'dictionaryCampaigns' => $this->token->dictionaryCampaignsEnabledForExternalUpdatedNeedUpdated
'dictionaryCampaigns' => $this->token->dictionaryCampaignsEnabledForExternalUpdatedNeedUpdatedForNotReserveUpdate
]);
$objects = $this->limitService->countObjectsLimit($requestCmpgn);
$this->assertEquals($objects, 0);
......
......@@ -75,10 +75,10 @@ class ProcessCallSliceTest extends TestCase
);
$this->assertEquals($this->dictionaries_count, $this->campaign->dictionaries()->count());
$this->assertEquals($this->dictionaries_count, $this->token->dictionaryCampaignsEnabledForNotExternal->count());
$this->assertEquals($this->dictionaries_count, $this->token->dictionaryCampaignsEnabledForNotExternalForNotReserveCreate->count());
$this->params = [
'dictionaryCampaigns' => $this->token->dictionaryCampaignsEnabledForNotExternal,
'dictionaryCampaigns' => $this->token->dictionaryCampaignsEnabledForNotExternalForNotReserveCreate,
'variables' => Variable::all(),
];
......
......@@ -81,16 +81,16 @@ class UpdateCampaignsTest extends TestCase
$dictionaryCampaign->update($data);
$tokens = Tokens::whereHas('dictionaryCampaignsEnabledForExternalUpdatedNeedUpdated')
->with('dictionaryCampaignsEnabledForExternalUpdatedNeedUpdated.campaign')
$tokens = Tokens::whereHas('dictionaryCampaignsEnabledForExternalUpdatedNeedUpdatedForNotReserveUpdate')
->with('dictionaryCampaignsEnabledForExternalUpdatedNeedUpdatedForNotReserveUpdate.campaign')
->where('type', '!=', Tokens::MAIN)
->get();
Queue::fake();
foreach ($tokens as $token) {
$this->assertEquals($dictionaryCampaign->toArray()['external_id'], $token->dictionaryCampaignsEnabledForExternalUpdatedNeedUpdated->toArray()[0]['external_id']);
$this->assertEquals($dictionaryCampaign->toArray()['external_id'], $token->dictionaryCampaignsEnabledForExternalUpdatedNeedUpdatedForNotReserveUpdate->toArray()[0]['external_id']);
$this->request->call([
'dictionaryCampaigns' => $token->dictionaryCampaignsEnabledForExternalUpdatedNeedUpdated,
'dictionaryCampaigns' => $token->dictionaryCampaignsEnabledForExternalUpdatedNeedUpdatedForNotReserveUpdate,
]);
Queue::assertPushed(ProcessCallLimitedAPI::class);
}
......
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!