Skip to content
Toggle navigation
Projects
Groups
Snippets
Help
Письменов Дмитрий Иванович
/
yourroomads
This project
Loading...
Sign in
Toggle navigation
Go to a project
Project
Repository
Settings
Activity
Graph
Charts
Create a new issue
Commits
Issue Boards
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Commit e93b717c
authored
Jun 03, 2021
by
Vladislav
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
#19308 Синхронизатор объектов с главного аккаунта в дочерние. План работ и декомпозиция
1 parent
26c9874c
Hide whitespace changes
Inline
Side-by-side
Showing
27 changed files
with
132 additions
and
94 deletions
app/Console/Commands/CampaignsAdd.php
app/Jobs/ProcessCallAPI.php
app/Jobs/ProcessCallLimitedAPI.php
app/Service/Contract/APIRequest.php
app/Service/Limits.php
app/Service/Requests/APIRequest.php
app/Service/Requests/Direct/AddCampaigns.php
app/Service/Requests/Direct/CheckCampaignsChanges.php
app/Service/Requests/Direct/CheckChanges.php
app/Service/Requests/Direct/CheckDictionariesChanges.php
app/Service/Requests/Direct/GetAdGroups.php
app/Service/Requests/Direct/GetCampaigns.php
app/Service/Requests/Direct/GetDictionaries.php
app/Service/Requests/Direct/ResumeCampaigns.php
app/Service/Requests/Direct/SuspendCampaigns.php
app/Service/Requests/Direct/UpdateCampaigns.php
app/Service/Requests/DirectRequest.php
tests/Unit/AddCampaignsTest.php
tests/Unit/CallLimitedApiTest.php
tests/Unit/CheckCampaignsTest.php
tests/Unit/CheckChangesAdGroupsTest.php
tests/Unit/CheckDictionariesTest.php
tests/Unit/GetAdGroupTest.php
tests/Unit/GetCampaignsTest.php
tests/Unit/GetDictionariesTest.php
tests/Unit/LimitsTest.php
tests/Unit/ProcessCallSliceTest.php
app/Console/Commands/CampaignsAdd.php
View file @
e93b717
...
@@ -43,15 +43,11 @@ class CampaignsAdd extends Command
...
@@ -43,15 +43,11 @@ class CampaignsAdd extends Command
public
function
handle
()
public
function
handle
()
{
{
$tokens
=
Tokens
::
whereHas
(
'dictionaryCampaignsEnabledForNotExternal'
)
$tokens
=
Tokens
::
whereHas
(
'dictionaryCampaignsEnabledForNotExternal'
)
->
with
([
->
with
(
'dictionaryCampaignsEnabledForNotExternal.campaign'
)
'dictionaryCampaignsEnabledForNotExternal'
=>
function
(
HasManyThrough
$query
)
{
return
$query
->
limit
(
10
);
},
'dictionaryCampaignsEnabledForNotExternal.campaign'
])
->
where
(
'type'
,
'!='
,
Tokens
::
MAIN
)
->
where
(
'type'
,
'!='
,
Tokens
::
MAIN
)
->
get
();
->
get
();
foreach
(
$tokens
as
$token
)
{
foreach
(
$tokens
as
$token
)
{
$factory
=
APIRequest
::
getInstance
(
API
::
YANDEX
);
$factory
=
APIRequest
::
getInstance
(
API
::
YANDEX
);
$factory
->
setToken
(
$token
);
$factory
->
setToken
(
$token
);
...
...
app/Jobs/ProcessCallAPI.php
View file @
e93b717
...
@@ -53,7 +53,7 @@ class ProcessCallAPI implements ShouldQueue
...
@@ -53,7 +53,7 @@ class ProcessCallAPI implements ShouldQueue
if
(
$maxObjects
and
$maxObjects
!==
$limits
::
NAN
&&
$this
->
api
->
getObjectsCount
()
>
$maxObjects
)
{
if
(
$maxObjects
and
$maxObjects
!==
$limits
::
NAN
&&
$this
->
api
->
getObjectsCount
()
>
$maxObjects
)
{
//те на которые не хватило баллов помещаем в очередь
//те на которые не хватило баллов помещаем в очередь
if
(
$apiR
=
$this
->
api
->
slice
(
$maxObjects
))
{
if
(
$apiR
=
$this
->
api
->
slice
(
$maxObjects
))
{
dispatch
(
new
ProcessCallLimitedAPI
(
$apiR
));
dispatch
(
new
ProcessCallLimitedAPI
(
$apiR
))
->
onQueue
(
'limits'
)
;
}
}
}
}
$response
=
$api
->
execute
();
$response
=
$api
->
execute
();
...
...
app/Jobs/ProcessCallLimitedAPI.php
View file @
e93b717
...
@@ -75,6 +75,6 @@ class ProcessCallLimitedAPI implements ShouldQueue//, ShouldBeUnique
...
@@ -75,6 +75,6 @@ class ProcessCallLimitedAPI implements ShouldQueue//, ShouldBeUnique
private
function
reRunHour
(){
private
function
reRunHour
(){
$process
=
new
ProcessCallLimitedAPI
(
$this
->
api
);
$process
=
new
ProcessCallLimitedAPI
(
$this
->
api
);
dispatch
(
$process
)
dispatch
(
$process
)
->
delay
(
now
()
->
addMinutes
(
60
-
date
(
"i"
)))
->
onQueue
(
'limits'
)
;
->
delay
(
now
()
->
addMinutes
(
60
-
date
(
"i"
)));
}
}
}
}
app/Service/Contract/APIRequest.php
View file @
e93b717
...
@@ -20,5 +20,6 @@ interface APIRequest{
...
@@ -20,5 +20,6 @@ interface APIRequest{
function
call
(
$params
=
null
);
function
call
(
$params
=
null
);
function
handle
(
$response
);
function
handle
(
$response
);
function
getObjectsCount
();
//возвращаем сколько объектов обрабатывается запросом. Для выборок, максимальное что может вернуться.
function
getObjectsCount
();
function
getMaxCount
();
}
}
app/Service/Limits.php
View file @
e93b717
...
@@ -64,18 +64,28 @@ class Limits implements \App\Service\Contract\Limits {
...
@@ -64,18 +64,28 @@ class Limits implements \App\Service\Contract\Limits {
function
countObjectsLimit
(
\App\Service\Contract\APIRequest
$request
)
:
int
function
countObjectsLimit
(
\App\Service\Contract\APIRequest
$request
)
:
int
{
{
$cost
=
$this
->
limitCosts
->
getCostObject
(
$request
);
$cost
=
$this
->
limitCosts
->
getCostObject
(
$request
);
$maxCount
=
$request
->
getMaxCount
();
if
(
$this
->
limitCosts
->
getCostCall
(
$request
)
>
$this
->
current
()){
if
(
$this
->
limitCosts
->
getCostCall
(
$request
)
>
$this
->
current
()){
return
0
;
return
0
;
}
}
if
(
$cost
==
0
){
if
(
$cost
==
0
||
$maxCount
===
self
::
NAN
){
return
self
::
NAN
;
return
self
::
NAN
;
}
}
$maxCount
=
floor
((
$this
->
current
()
-
$this
->
limitCosts
->
getCostCall
(
$request
))
/
$cost
);
$objects
=
$request
->
getObjectsCount
();
$allowCount
=
floor
((
$this
->
current
()
-
$this
->
limitCosts
->
getCostCall
(
$request
))
/
$cost
);
if
(
$objects
>
$maxCount
){
$objectsCount
=
$request
->
getObjectsCount
();
$objects
=
$maxCount
;
if
(
$objectsCount
>
$maxCount
)
{
$objectsCount
=
$maxCount
;
}
}
return
$objects
;
if
(
$objectsCount
>
$allowCount
){
$objectsCount
=
$allowCount
;
}
return
$objectsCount
;
}
}
/**
/**
...
@@ -182,6 +192,10 @@ class Limits implements \App\Service\Contract\Limits {
...
@@ -182,6 +192,10 @@ class Limits implements \App\Service\Contract\Limits {
private
function
getSpent
(
$objects
,
\App\Service\Contract\APIRequest
$request
)
:
int
private
function
getSpent
(
$objects
,
\App\Service\Contract\APIRequest
$request
)
:
int
{
{
$cost
=
$this
->
limitCosts
->
getCostObject
(
$request
);
$cost
=
$this
->
limitCosts
->
getCostObject
(
$request
);
if
(
$objects
===
Limits
::
NAN
)
return
$this
->
limitCosts
->
getCostCall
(
$request
);
return
$objects
*
$cost
+
$this
->
limitCosts
->
getCostCall
(
$request
);
return
$objects
*
$cost
+
$this
->
limitCosts
->
getCostCall
(
$request
);
}
}
}
}
app/Service/Requests/APIRequest.php
View file @
e93b717
...
@@ -83,32 +83,17 @@ class APIRequest implements \App\Service\Contract\APIRequest
...
@@ -83,32 +83,17 @@ class APIRequest implements \App\Service\Contract\APIRequest
$replication
=
clone
$this
;
$replication
=
clone
$this
;
if
(
is_array
(
$key
))
{
if
(
!
is_array
(
$key
))
{
$params
=
$this
->
changeInArray
(
$params
,
$key
,
$maxObjects
);
$key
=
[
$key
];
}
else
{
$params_by_key
=
$params
[
$key
];
$params
[
$key
]
=
$this
->
sliceArray
(
$params_by_key
,
$maxObjects
);
}
}
$replication
->
setParams
(
$
params
);
$replication
->
setParams
(
$
this
->
changeInArray
(
$params
,
$key
,
$maxObjects
)
);
if
(
is_array
(
$key
))
{
$this
->
setParams
(
$this
->
changeInArray
(
$params
,
$key
,
0
,
$maxObjects
));
$params
=
$this
->
changeInArray
(
$this
->
getParams
(),
$key
,
0
,
$maxObjects
);
}
else
{
$params_by_key
=
$params
[
$key
];
$params
[
$key
]
=
$this
->
sliceArray
(
$params_by_key
,
0
,
$maxObjects
);
}
$this
->
setParams
(
$params
);
return
$replication
;
return
$replication
;
}
}
private
function
sliceArray
(
$params
,
$offset
,
$length
=
null
)
:
array
{
return
array_values
(
array_slice
(
$params
,
$offset
,
$length
));
}
private
function
changeInArray
(
$params
,
$key
,
$offset
,
$maxObjects
=
null
)
private
function
changeInArray
(
$params
,
$key
,
$offset
,
$maxObjects
=
null
)
{
{
$params_i
=
&
$params
;
$params_i
=
&
$params
;
...
@@ -120,6 +105,11 @@ class APIRequest implements \App\Service\Contract\APIRequest
...
@@ -120,6 +105,11 @@ class APIRequest implements \App\Service\Contract\APIRequest
return
$params
;
return
$params
;
}
}
private
function
sliceArray
(
$params
,
$offset
,
$length
=
null
)
:
array
{
return
array_values
(
array_slice
(
$params
,
$offset
,
$length
));
}
function
slice
(
$count
)
:
?
\App\Service\Contract\APIRequest
function
slice
(
$count
)
:
?
\App\Service\Contract\APIRequest
{
{
throw
new
Exception
(
'Я не знаю формата запрсов, чтобы его разбить'
);
throw
new
Exception
(
'Я не знаю формата запрсов, чтобы его разбить'
);
...
@@ -142,6 +132,11 @@ class APIRequest implements \App\Service\Contract\APIRequest
...
@@ -142,6 +132,11 @@ class APIRequest implements \App\Service\Contract\APIRequest
function
getObjectsCount
()
function
getObjectsCount
()
{
{
throw
new
Exception
(
'Не задано сколкьо бъектов обрабатывается'
);
throw
new
Exception
(
'Не задано сколько объектов обрабатывается'
);
}
function
getMaxCount
()
{
throw
new
Exception
(
'Не задано сколько максимум объектов необходимо обработатывать'
);
}
}
}
}
app/Service/Requests/Direct/AddCampaigns.php
View file @
e93b717
...
@@ -12,10 +12,11 @@ use App\Service\StrReplaceByVariables;
...
@@ -12,10 +12,11 @@ use App\Service\StrReplaceByVariables;
use
Carbon\Carbon
;
use
Carbon\Carbon
;
use
Illuminate\Database\Eloquent\Collection
;
use
Illuminate\Database\Eloquent\Collection
;
use
Illuminate\Support\Facades\Log
;
use
Illuminate\Support\Facades\Log
;
use
function
MongoDB
\Driver\Monitoring\removeSubscriber
;
class
AddCampaigns
extends
DirectRequest
class
AddCampaigns
extends
DirectRequest
{
{
CONST
MAX_COUNT
=
10
;
protected
$max_count
=
10
;
protected
$timestamp
;
protected
$timestamp
;
/* @var Collection|DictionaryCampaign[] $dictionaryCampaigns */
/* @var Collection|DictionaryCampaign[] $dictionaryCampaigns */
...
@@ -32,10 +33,7 @@ class AddCampaigns extends DirectRequest
...
@@ -32,10 +33,7 @@ class AddCampaigns extends DirectRequest
public
function
getObjectsCount
()
public
function
getObjectsCount
()
{
{
$params
=
$this
->
getParams
();
return
count
(
$this
->
getParams
()[
'Campaigns'
]);
$cnt
=
count
(
$params
[
'Campaigns'
]);
return
$cnt
>
self
::
MAX_COUNT
?
self
::
MAX_COUNT
:
$cnt
;
}
}
public
function
slice
(
$maxObjects
)
:
?
APIRequest
public
function
slice
(
$maxObjects
)
:
?
APIRequest
...
@@ -81,6 +79,7 @@ class AddCampaigns extends DirectRequest
...
@@ -81,6 +79,7 @@ class AddCampaigns extends DirectRequest
}
}
}
catch
(
\Exception
$e
)
{
}
catch
(
\Exception
$e
)
{
Log
::
debug
(
$e
);
Log
::
debug
(
$e
);
throw
$e
;
}
}
}
}
...
...
app/Service/Requests/Direct/CheckCampaignsChanges.php
View file @
e93b717
...
@@ -8,12 +8,13 @@ use App\Models\Pivots\DictionaryCampaign;
...
@@ -8,12 +8,13 @@ use App\Models\Pivots\DictionaryCampaign;
use
App\Service\Requests\DirectRequest
;
use
App\Service\Requests\DirectRequest
;
use
Carbon\Carbon
;
use
Carbon\Carbon
;
class
CheckCampaignsChange
extends
DirectRequest
class
CheckCampaignsChange
s
extends
DirectRequest
{
{
CONST
SELF
=
'SELF'
;
CONST
SELF
=
'SELF'
;
CONST
CHILDREN
=
'CHILDREN'
;
CONST
CHILDREN
=
'CHILDREN'
;
CONST
STAT
=
'STAT'
;
CONST
STAT
=
'STAT'
;
protected
$max_count
=
-
1
;
protected
$next
;
protected
$next
;
function
call
(
$params
=
null
)
function
call
(
$params
=
null
)
...
...
app/Service/Requests/Direct/CheckChanges.php
View file @
e93b717
...
@@ -14,6 +14,8 @@ use Illuminate\Support\Facades\Log;
...
@@ -14,6 +14,8 @@ use Illuminate\Support\Facades\Log;
class
CheckChanges
extends
DirectRequest
class
CheckChanges
extends
DirectRequest
{
{
protected
$max_count
=
-
1
;
public
function
call
(
$params
=
null
)
public
function
call
(
$params
=
null
)
{
{
$this
->
requestPrepare
(
$params
);
$this
->
requestPrepare
(
$params
);
...
...
app/Service/Requests/Direct/CheckDictionariesChanges.php
View file @
e93b717
<?php
<?php
namespace
App\Service\Requests\Direct
;
namespace
App\Service\Requests\Direct
;
use
App\Jobs\ProcessCallLimitedAPI
;
use
App\Jobs\ProcessCallLimitedAPI
;
use
App\Service\Requests\DirectRequest
;
use
App\Service\Requests\DirectRequest
;
class
CheckDictionariesChanges
extends
DirectRequest
{
class
CheckDictionariesChanges
extends
DirectRequest
function
call
(
$params
=
null
){
{
protected
$max_count
=
-
1
;
function
call
(
$params
=
null
)
{
$this
->
requestPrepare
(
$params
);
$this
->
requestPrepare
(
$params
);
$process
=
new
ProcessCallLimitedAPI
(
$this
);
$process
=
new
ProcessCallLimitedAPI
(
$this
);
dispatch
(
$process
)
->
onQueue
(
'limits'
);
dispatch
(
$process
)
->
onQueue
(
'limits'
);
}
}
function
handle
(
$response
){
function
handle
(
$response
)
{
}
}
private
function
requestPrepare
(
$params
){
private
function
requestPrepare
(
$params
)
{
$this
->
setService
(
'Changes'
);
$this
->
setService
(
'Changes'
);
$this
->
setMethod
(
'checkDictionaries'
);
$this
->
setMethod
(
'checkDictionaries'
);
}
}
...
...
app/Service/Requests/Direct/GetAdGroups.php
View file @
e93b717
...
@@ -12,6 +12,7 @@ use Illuminate\Support\Facades\Log;
...
@@ -12,6 +12,7 @@ use Illuminate\Support\Facades\Log;
class
GetAdGroups
extends
DirectRequest
class
GetAdGroups
extends
DirectRequest
{
{
protected
$max_count
=
10000
;
function
call
(
$params
=
null
)
function
call
(
$params
=
null
)
{
{
...
@@ -98,6 +99,7 @@ class GetAdGroups extends DirectRequest
...
@@ -98,6 +99,7 @@ class GetAdGroups extends DirectRequest
}
catch
(
\Exception
$e
)
{
}
catch
(
\Exception
$e
)
{
DB
::
rollBack
();
DB
::
rollBack
();
Log
::
debug
(
$e
);
Log
::
debug
(
$e
);
throw
$e
;
}
}
}
}
...
...
app/Service/Requests/Direct/GetCampaigns.php
View file @
e93b717
...
@@ -10,6 +10,7 @@ use Illuminate\Support\Facades\Log;
...
@@ -10,6 +10,7 @@ use Illuminate\Support\Facades\Log;
class
GetCampaigns
extends
DirectRequest
class
GetCampaigns
extends
DirectRequest
{
{
protected
$max_count
=
10000
;
protected
$timestamp
;
protected
$timestamp
;
public
function
call
(
$params
=
null
)
public
function
call
(
$params
=
null
)
...
@@ -22,10 +23,10 @@ class GetCampaigns extends DirectRequest
...
@@ -22,10 +23,10 @@ class GetCampaigns extends DirectRequest
public
function
getObjectsCount
()
public
function
getObjectsCount
()
{
{
$params
=
$this
->
getParams
();
$params
=
$this
->
getParams
();
if
(
isset
(
$params
[
'SelectionCriteria'
][
'Ids'
])
&&
count
(
$params
[
'SelectionCriteria'
][
'Ids'
])
<
self
::
MAX_COUNT
){
if
(
isset
(
$params
[
'SelectionCriteria'
][
'Ids'
])){
return
count
(
$params
[
'SelectionCriteria'
][
'Ids'
]);
return
count
(
$params
[
'SelectionCriteria'
][
'Ids'
]);
}
}
return
self
::
MAX_COUNT
;
return
parent
::
getObjectsCount
()
;
}
}
public
function
handle
(
$response
)
public
function
handle
(
$response
)
...
@@ -72,6 +73,7 @@ class GetCampaigns extends DirectRequest
...
@@ -72,6 +73,7 @@ class GetCampaigns extends DirectRequest
}
}
}
catch
(
\Exception
$e
)
{
}
catch
(
\Exception
$e
)
{
Log
::
debug
(
$e
);
Log
::
debug
(
$e
);
throw
$e
;
}
}
}
}
...
...
app/Service/Requests/Direct/GetDictionaries.php
View file @
e93b717
...
@@ -9,6 +9,8 @@ use Illuminate\Support\Facades\Log;
...
@@ -9,6 +9,8 @@ use Illuminate\Support\Facades\Log;
class
GetDictionaries
extends
DirectRequest
class
GetDictionaries
extends
DirectRequest
{
{
protected
$max_count
=
10000
;
function
call
(
$params
=
null
)
function
call
(
$params
=
null
)
{
{
$this
->
requestPrepare
(
$params
);
$this
->
requestPrepare
(
$params
);
...
@@ -41,6 +43,7 @@ class GetDictionaries extends DirectRequest
...
@@ -41,6 +43,7 @@ class GetDictionaries extends DirectRequest
}
}
}
catch
(
\Exception
$e
)
{
}
catch
(
\Exception
$e
)
{
Log
::
debug
(
$e
);
Log
::
debug
(
$e
);
throw
$e
;
}
}
}
}
...
...
app/Service/Requests/Direct/ResumeCampaigns.php
View file @
e93b717
...
@@ -11,7 +11,7 @@ use Illuminate\Support\Facades\Log;
...
@@ -11,7 +11,7 @@ use Illuminate\Support\Facades\Log;
class
ResumeCampaigns
extends
DirectRequest
class
ResumeCampaigns
extends
DirectRequest
{
{
CONST
MAX_COUNT
=
1000
;
protected
$max_count
=
1000
;
public
function
call
(
$params
=
null
)
public
function
call
(
$params
=
null
)
{
{
...
@@ -22,10 +22,7 @@ class ResumeCampaigns extends DirectRequest
...
@@ -22,10 +22,7 @@ class ResumeCampaigns extends DirectRequest
public
function
getObjectsCount
()
public
function
getObjectsCount
()
{
{
$params
=
$this
->
getParams
();
return
count
(
$this
->
getParams
()[
'SelectionCriteria'
][
'Ids'
]);
$cnt
=
count
(
$params
[
'SelectionCriteria'
][
'Ids'
]);
return
$cnt
>
self
::
MAX_COUNT
?
self
::
MAX_COUNT
:
$cnt
;
}
}
public
function
slice
(
$maxObjects
)
:
?
APIRequest
public
function
slice
(
$maxObjects
)
:
?
APIRequest
...
@@ -59,6 +56,7 @@ class ResumeCampaigns extends DirectRequest
...
@@ -59,6 +56,7 @@ class ResumeCampaigns extends DirectRequest
}
}
}
catch
(
\Exception
$e
)
{
}
catch
(
\Exception
$e
)
{
Log
::
debug
(
$e
);
Log
::
debug
(
$e
);
throw
$e
;
}
}
}
}
...
...
app/Service/Requests/Direct/SuspendCampaigns.php
View file @
e93b717
...
@@ -12,7 +12,7 @@ use Illuminate\Support\Facades\Log;
...
@@ -12,7 +12,7 @@ use Illuminate\Support\Facades\Log;
class
SuspendCampaigns
extends
DirectRequest
class
SuspendCampaigns
extends
DirectRequest
{
{
CONST
MAX_COUNT
=
1000
;
protected
$max_count
=
1000
;
public
function
call
(
$params
=
null
)
public
function
call
(
$params
=
null
)
{
{
...
@@ -23,10 +23,7 @@ class SuspendCampaigns extends DirectRequest
...
@@ -23,10 +23,7 @@ class SuspendCampaigns extends DirectRequest
public
function
getObjectsCount
()
public
function
getObjectsCount
()
{
{
$params
=
$this
->
getParams
();
return
count
(
$this
->
getParams
()[
'SelectionCriteria'
][
'Ids'
]);
$cnt
=
count
(
$params
[
'SelectionCriteria'
][
'Ids'
]);
return
$cnt
>
self
::
MAX_COUNT
?
self
::
MAX_COUNT
:
$cnt
;
}
}
public
function
slice
(
$maxObjects
)
:
?
APIRequest
public
function
slice
(
$maxObjects
)
:
?
APIRequest
...
@@ -60,6 +57,7 @@ class SuspendCampaigns extends DirectRequest
...
@@ -60,6 +57,7 @@ class SuspendCampaigns extends DirectRequest
}
}
}
catch
(
\Exception
$e
)
{
}
catch
(
\Exception
$e
)
{
Log
::
debug
(
$e
);
Log
::
debug
(
$e
);
throw
$e
;
}
}
}
}
...
...
app/Service/Requests/Direct/UpdateCampaigns.php
View file @
e93b717
...
@@ -14,7 +14,7 @@ use Illuminate\Support\Facades\Log;
...
@@ -14,7 +14,7 @@ use Illuminate\Support\Facades\Log;
class
UpdateCampaigns
extends
DirectRequest
class
UpdateCampaigns
extends
DirectRequest
{
{
CONST
MAX_COUNT
=
10
;
protected
$max_count
=
10
;
protected
$timestamp
;
protected
$timestamp
;
...
@@ -27,10 +27,7 @@ class UpdateCampaigns extends DirectRequest
...
@@ -27,10 +27,7 @@ class UpdateCampaigns extends DirectRequest
public
function
getObjectsCount
()
public
function
getObjectsCount
()
{
{
$params
=
$this
->
getParams
();
return
count
(
$this
->
getParams
()[
'Campaigns'
]);
$cnt
=
count
(
$params
[
'Campaigns'
]);
return
$cnt
>
self
::
MAX_COUNT
?
self
::
MAX_COUNT
:
$cnt
;
}
}
public
function
slice
(
$maxObjects
)
:
?
APIRequest
public
function
slice
(
$maxObjects
)
:
?
APIRequest
...
@@ -58,6 +55,7 @@ class UpdateCampaigns extends DirectRequest
...
@@ -58,6 +55,7 @@ class UpdateCampaigns extends DirectRequest
}
}
}
catch
(
\Exception
$e
)
{
}
catch
(
\Exception
$e
)
{
Log
::
debug
(
$e
);
Log
::
debug
(
$e
);
throw
$e
;
}
}
}
}
...
...
app/Service/Requests/DirectRequest.php
View file @
e93b717
<?php
<?php
namespace
App\Service\Requests
;
namespace
App\Service\Requests
;
/**
/**
...
@@ -7,9 +8,10 @@ namespace App\Service\Requests;
...
@@ -7,9 +8,10 @@ namespace App\Service\Requests;
*
*
*
*
*/
*/
class
DirectRequest
extends
APIRequest
{
class
DirectRequest
extends
APIRequest
{
CONST
MAX_COUNT
=
10000
;
protected
$max_count
=
-
1
;
private
$url
;
private
$url
;
...
@@ -25,27 +27,31 @@ class DirectRequest extends APIRequest {
...
@@ -25,27 +27,31 @@ class DirectRequest extends APIRequest {
return
null
;
return
null
;
}
}
function
next
(
$offset
){
function
next
(
$offset
)
if
(
!
isset
(
$this
->
params
[
'Page'
])){
{
if
(
!
isset
(
$this
->
params
[
'Page'
]))
{
$this
->
params
[
'Page'
]
=
[];
$this
->
params
[
'Page'
]
=
[];
}
}
$this
->
params
[
'Page'
][
'Limit'
]
=
self
::
MAX_COUNT
;
$this
->
params
[
'Page'
][
'Limit'
]
=
self
::
MAX_COUNT
;
$this
->
params
[
'Page'
][
'Offset'
]
=
$offset
;
$this
->
params
[
'Page'
][
'Offset'
]
=
$offset
;
}
}
function
getUrl
(){
function
getUrl
()
{
return
$this
->
url
.
strtolower
(
$this
->
getService
());
return
$this
->
url
.
strtolower
(
$this
->
getService
());
}
}
function
getBody
(){
function
getBody
()
{
$data
=
[
$data
=
[
'method'
=>
$this
->
getMethod
(),
'method'
=>
$this
->
getMethod
(),
'params'
=>
$this
->
getParams
()
??
(
object
)[]
'params'
=>
$this
->
getParams
()
??
(
object
)[]
];
];
return
json_encode
(
$data
,
JSON_UNESCAPED_UNICODE
|
JSON_UNESCAPED_SLASHES
);
return
json_encode
(
$data
,
JSON_UNESCAPED_UNICODE
|
JSON_UNESCAPED_SLASHES
);
}
}
function
getHeaders
(){
function
getHeaders
()
{
return
[
return
[
// "Authorization: Bearer " . $this->getToken()->token, // OAuth-токен. Использование слова Bearer обязательно
// "Authorization: Bearer " . $this->getToken()->token, // OAuth-токен. Использование слова Bearer обязательно
"Accept-Language: ru"
,
// Язык ответных сообщений
"Accept-Language: ru"
,
// Язык ответных сообщений
...
@@ -53,10 +59,11 @@ class DirectRequest extends APIRequest {
...
@@ -53,10 +59,11 @@ class DirectRequest extends APIRequest {
];
];
}
}
function
getRequest
(
$service
,
$method
){
function
getRequest
(
$service
,
$method
)
{
$ns
=
str_replace
(
"DirectRequest"
,
"Direct"
,
self
::
class
);
$ns
=
str_replace
(
"DirectRequest"
,
"Direct"
,
self
::
class
);
$class
=
$ns
.
"
\\
"
.
ucfirst
(
$method
)
.
ucfirst
(
$service
);
$class
=
$ns
.
"
\\
"
.
ucfirst
(
$method
)
.
ucfirst
(
$service
);
if
(
class_exists
(
$class
)){
if
(
class_exists
(
$class
))
{
$request
=
new
$class
(
$this
->
getApi
());
$request
=
new
$class
(
$this
->
getApi
());
$request
->
setToken
(
$this
->
getToken
());
$request
->
setToken
(
$this
->
getToken
());
return
$request
;
return
$request
;
...
@@ -65,7 +72,13 @@ class DirectRequest extends APIRequest {
...
@@ -65,7 +72,13 @@ class DirectRequest extends APIRequest {
return
$this
;
return
$this
;
}
}
function
getObjectsCount
(){
function
getObjectsCount
()
return
self
::
MAX_COUNT
;
{
return
$this
->
getMaxCount
();
}
function
getMaxCount
()
{
return
$this
->
max_count
;
}
}
}
}
tests/Unit/AddCampaignsTest.php
View file @
e93b717
...
@@ -62,7 +62,7 @@ class AddCampaignsTest extends TestCase
...
@@ -62,7 +62,7 @@ class AddCampaignsTest extends TestCase
$this
->
request
=
APIRequest
::
getInstance
(
API
::
YANDEX
)
$this
->
request
=
APIRequest
::
getInstance
(
API
::
YANDEX
)
->
setToken
(
$this
->
token
)
->
setToken
(
$this
->
token
)
->
getRequest
(
'
c
ampaigns'
,
'add'
);
->
getRequest
(
'
C
ampaigns'
,
'add'
);
$this
->
actingAs
(
$this
->
user
)
$this
->
actingAs
(
$this
->
user
)
->
post
(
route
(
'token.city.store'
,
[
->
post
(
route
(
'token.city.store'
,
[
...
...
tests/Unit/CallLimitedApiTest.php
View file @
e93b717
...
@@ -62,7 +62,7 @@ class CallLimitedApiTest extends TestCase
...
@@ -62,7 +62,7 @@ class CallLimitedApiTest extends TestCase
$process
->
handle
();
$process
->
handle
();
Queue
::
assertPushed
(
ProcessCallLimitedAPI
::
class
,
3
);
Queue
::
assertPushed
(
ProcessCallLimitedAPI
::
class
,
3
);
$this
->
token
->
limit
=
1
6
;
$this
->
token
->
limit
=
1
5
;
$this
->
request
->
setService
(
'AdGroups'
);
$this
->
request
->
setService
(
'AdGroups'
);
$this
->
request
->
setMethod
(
'get'
);
$this
->
request
->
setMethod
(
'get'
);
$process
->
handle
();
$process
->
handle
();
...
...
tests/Unit/CheckCampaignsTest.php
View file @
e93b717
...
@@ -55,11 +55,11 @@ class CheckCampaignsTest extends TestCase
...
@@ -55,11 +55,11 @@ class CheckCampaignsTest extends TestCase
$this
->
request_main
=
APIRequest
::
getInstance
(
API
::
YANDEX
)
$this
->
request_main
=
APIRequest
::
getInstance
(
API
::
YANDEX
)
->
setToken
(
$this
->
token_main
)
->
setToken
(
$this
->
token_main
)
->
getRequest
(
'
change'
,
'C
heckCampaigns'
);
->
getRequest
(
'
Changes'
,
'c
heckCampaigns'
);
$this
->
request
=
APIRequest
::
getInstance
(
API
::
YANDEX
)
$this
->
request
=
APIRequest
::
getInstance
(
API
::
YANDEX
)
->
setToken
(
$this
->
token
)
->
setToken
(
$this
->
token
)
->
getRequest
(
'
change'
,
'C
heckCampaigns'
);
->
getRequest
(
'
Changes'
,
'c
heckCampaigns'
);
}
}
...
...
tests/Unit/CheckChangesAdGroupsTest.php
View file @
e93b717
...
@@ -70,7 +70,7 @@ class CheckChangesAdGroupsTest extends TestCase
...
@@ -70,7 +70,7 @@ class CheckChangesAdGroupsTest extends TestCase
$this
->
request_main
=
APIRequest
::
getInstance
(
API
::
YANDEX
)
$this
->
request_main
=
APIRequest
::
getInstance
(
API
::
YANDEX
)
->
setToken
(
$this
->
token_main
)
->
setToken
(
$this
->
token_main
)
->
getRequest
(
'
c
hanges'
,
'check'
);
->
getRequest
(
'
C
hanges'
,
'check'
);
$this
->
request_main_params
=
[
$this
->
request_main_params
=
[
'CampaignIds'
=>
Campaigns
::
forUpdatedChildren
()
->
pluck
(
'external_id'
)
->
all
(),
'CampaignIds'
=>
Campaigns
::
forUpdatedChildren
()
->
pluck
(
'external_id'
)
->
all
(),
...
@@ -82,7 +82,7 @@ class CheckChangesAdGroupsTest extends TestCase
...
@@ -82,7 +82,7 @@ class CheckChangesAdGroupsTest extends TestCase
$this
->
request
=
APIRequest
::
getInstance
(
API
::
YANDEX
)
$this
->
request
=
APIRequest
::
getInstance
(
API
::
YANDEX
)
->
setToken
(
$this
->
token
)
->
setToken
(
$this
->
token
)
->
getRequest
(
'
c
hanges'
,
'check'
);
->
getRequest
(
'
C
hanges'
,
'check'
);
}
}
...
...
tests/Unit/CheckDictionariesTest.php
View file @
e93b717
...
@@ -38,7 +38,7 @@ class CheckDictionariesTest extends TestCase
...
@@ -38,7 +38,7 @@ class CheckDictionariesTest extends TestCase
$this
->
request
=
APIRequest
::
getInstance
(
API
::
YANDEX
)
$this
->
request
=
APIRequest
::
getInstance
(
API
::
YANDEX
)
->
setToken
(
$this
->
token
)
->
setToken
(
$this
->
token
)
->
getRequest
(
'
change
'
,
'CheckDictionaries'
);
->
getRequest
(
'
Changes
'
,
'CheckDictionaries'
);
}
}
...
...
tests/Unit/GetAdGroupTest.php
View file @
e93b717
...
@@ -77,7 +77,7 @@ class GetAdGroupTest extends TestCase
...
@@ -77,7 +77,7 @@ class GetAdGroupTest extends TestCase
$this
->
request
=
APIRequest
::
getInstance
(
API
::
YANDEX
)
$this
->
request
=
APIRequest
::
getInstance
(
API
::
YANDEX
)
->
setToken
(
$this
->
token
)
->
setToken
(
$this
->
token
)
->
getRequest
(
'
adg
roups'
,
'get'
);
->
getRequest
(
'
AdG
roups'
,
'get'
);
}
}
...
...
tests/Unit/GetCampaignsTest.php
View file @
e93b717
...
@@ -42,7 +42,7 @@ class GetCampaignsTest extends TestCase
...
@@ -42,7 +42,7 @@ class GetCampaignsTest extends TestCase
$this
->
request
=
APIRequest
::
getInstance
(
API
::
YANDEX
)
$this
->
request
=
APIRequest
::
getInstance
(
API
::
YANDEX
)
->
setToken
(
$this
->
token_main
)
->
setToken
(
$this
->
token_main
)
->
getRequest
(
'
c
ampaigns'
,
'get'
);
->
getRequest
(
'
C
ampaigns'
,
'get'
);
}
}
...
...
tests/Unit/GetDictionariesTest.php
View file @
e93b717
...
@@ -40,7 +40,7 @@ class GetDictionariesTest extends TestCase
...
@@ -40,7 +40,7 @@ class GetDictionariesTest extends TestCase
$this
->
request
=
APIRequest
::
getInstance
(
API
::
YANDEX
)
$this
->
request
=
APIRequest
::
getInstance
(
API
::
YANDEX
)
->
setToken
(
$this
->
token
)
->
setToken
(
$this
->
token
)
->
getRequest
(
'
d
ictionaries'
,
'get'
);
->
getRequest
(
'
D
ictionaries'
,
'get'
);
}
}
...
...
tests/Unit/LimitsTest.php
View file @
e93b717
...
@@ -123,16 +123,21 @@ class LimitsTest extends TestCase
...
@@ -123,16 +123,21 @@ class LimitsTest extends TestCase
{
{
$request
=
\App\Service\Requests\APIRequest
::
getInstance
(
API
::
YANDEX
)
$request
=
\App\Service\Requests\APIRequest
::
getInstance
(
API
::
YANDEX
)
->
setToken
(
$this
->
token
);
->
setToken
(
$this
->
token
);
$request
->
setService
(
'AdExtensions'
);
$request
->
setService
(
'AdExtensions'
);
$request
->
setMethod
(
'add'
);
$request
->
setMethod
(
'add'
);
$this
->
token
->
limit
=
6
;
$this
->
token
->
limit
=
6
;
$objects
=
$this
->
limitService
->
countObjectsLimit
(
$request
);
$objects
=
$this
->
limitService
->
countObjectsLimit
(
$request
);
$this
->
assertEquals
(
$objects
,
1
);
// Todo метод не описан, и нет максимального колл-во для загрузки, сейчас -1 без максимума
// $this->assertEquals($objects, 1);
$this
->
assertEquals
(
$objects
,
-
1
);
$this
->
token
->
limit
=
12
;
$this
->
token
->
limit
=
12
;
$objects
=
$this
->
limitService
->
countObjectsLimit
(
$request
);
$objects
=
$this
->
limitService
->
countObjectsLimit
(
$request
);
$this
->
assertEquals
(
$objects
,
7
);
// Todo метод не описан, и нет максимального колл-во для загрузки, сейчас -1 без максимума
// $this->assertEquals($objects, 7);
$this
->
assertEquals
(
$objects
,
-
1
);
$request
->
setService
(
'Bids'
);
$request
->
setService
(
'Bids'
);
...
@@ -140,11 +145,15 @@ class LimitsTest extends TestCase
...
@@ -140,11 +145,15 @@ class LimitsTest extends TestCase
$this
->
token
->
limit
=
18
;
$this
->
token
->
limit
=
18
;
$objects
=
$this
->
limitService
->
countObjectsLimit
(
$request
);
$objects
=
$this
->
limitService
->
countObjectsLimit
(
$request
);
$this
->
assertEquals
(
$objects
,
2000
);
// Todo метод не описан, и нет максимального колл-во для загрузки, сейчас -1 без максимума
// $this->assertEquals($objects, 2000);
$this
->
assertEquals
(
$objects
,
-
1
);
$this
->
token
->
limit
=
21
;
$this
->
token
->
limit
=
21
;
$objects
=
$this
->
limitService
->
countObjectsLimit
(
$request
);
$objects
=
$this
->
limitService
->
countObjectsLimit
(
$request
);
$this
->
assertEquals
(
$objects
,
4000
);
// Todo метод не описан, и нет максимального колл-во для загрузки, сейчас -1 без максимума
// $this->assertEquals($objects, 4000);
$this
->
assertEquals
(
$objects
,
-
1
);
Queue
::
fake
();
Queue
::
fake
();
...
@@ -154,10 +163,10 @@ class LimitsTest extends TestCase
...
@@ -154,10 +163,10 @@ class LimitsTest extends TestCase
$objects
=
$this
->
limitService
->
countObjectsLimit
(
$requestCmpgn
);
$objects
=
$this
->
limitService
->
countObjectsLimit
(
$requestCmpgn
);
$this
->
assertEquals
(
$objects
,
181
);
$this
->
assertEquals
(
$objects
,
181
);
$this
->
token
->
limit
=
DirectRequest
::
MAX_COUNT
+
100
;
$this
->
token
->
limit
=
$requestCmpgn
->
getMaxCount
()
+
100
;
$requestCmpgn
->
call
();
$requestCmpgn
->
call
();
$objects
=
$this
->
limitService
->
countObjectsLimit
(
$requestCmpgn
);
$objects
=
$this
->
limitService
->
countObjectsLimit
(
$requestCmpgn
);
$this
->
assertEquals
(
$objects
,
DirectRequest
::
MAX_COUNT
);
$this
->
assertEquals
(
$objects
,
$requestCmpgn
->
getMaxCount
()
);
$requestCmpgn
=
$request
->
getRequest
(
'Campaigns'
,
'update'
);
$requestCmpgn
=
$request
->
getRequest
(
'Campaigns'
,
'update'
);
$this
->
token
->
limit
=
191
;
$this
->
token
->
limit
=
191
;
...
...
tests/Unit/ProcessCallSliceTest.php
View file @
e93b717
...
@@ -66,7 +66,7 @@ class ProcessCallSliceTest extends TestCase
...
@@ -66,7 +66,7 @@ class ProcessCallSliceTest extends TestCase
$this
->
request
=
APIRequest
::
getInstance
(
API
::
YANDEX
)
$this
->
request
=
APIRequest
::
getInstance
(
API
::
YANDEX
)
->
setToken
(
$this
->
token
)
->
setToken
(
$this
->
token
)
->
getRequest
(
'
c
ampaigns'
,
'add'
);
->
getRequest
(
'
C
ampaigns'
,
'add'
);
$this
->
campaign
->
dictionaries
()
->
syncWithoutDetaching
(
$this
->
campaign
->
dictionaries
()
->
syncWithoutDetaching
(
$this
->
dictionaries
->
keyBy
(
Campaigns
::
getModel
()
->
getKeyName
())
->
transform
(
function
(
Dictionary
$dictionary
)
{
$this
->
dictionaries
->
keyBy
(
Campaigns
::
getModel
()
->
getKeyName
())
->
transform
(
function
(
Dictionary
$dictionary
)
{
...
@@ -114,7 +114,7 @@ class ProcessCallSliceTest extends TestCase
...
@@ -114,7 +114,7 @@ class ProcessCallSliceTest extends TestCase
$this
->
assertEquals
(
true
,
!!
$requestR
);
$this
->
assertEquals
(
true
,
!!
$requestR
);
$this
->
assertEquals
(
2
,
$this
->
request
->
getObjectsCount
());
$this
->
assertEquals
(
2
,
$this
->
request
->
getObjectsCount
());
$this
->
assertEquals
(
$this
->
dictionaries_count
-
2
,
count
(
$requestR
->
getParams
()[
'Campaigns'
]
));
$this
->
assertEquals
(
$this
->
dictionaries_count
-
2
,
$requestR
->
getObjectsCount
(
));
$limits
=
Limits
::
getInstance
(
$this
->
request_resume
->
getToken
());
$limits
=
Limits
::
getInstance
(
$this
->
request_resume
->
getToken
());
...
@@ -127,7 +127,7 @@ class ProcessCallSliceTest extends TestCase
...
@@ -127,7 +127,7 @@ class ProcessCallSliceTest extends TestCase
$this
->
assertEquals
(
true
,
!!
$requestR
);
$this
->
assertEquals
(
true
,
!!
$requestR
);
$this
->
assertEquals
(
2
,
$this
->
request_resume
->
getObjectsCount
());
$this
->
assertEquals
(
2
,
$this
->
request_resume
->
getObjectsCount
());
$this
->
assertEquals
(
$this
->
dictionaries_count
-
2
,
count
(
$requestR
->
getParams
()[
'SelectionCriteria'
][
'Ids'
]
));
$this
->
assertEquals
(
$this
->
dictionaries_count
-
2
,
$requestR
->
getObjectsCount
(
));
}
}
...
...
Write
Preview
Markdown
is supported
Attach a file
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to post a comment