2222use Spryker \Zed \EventBehavior \Persistence \Propel \Behavior \EventBehavior ;
2323use Spryker \Zed \Kernel \Persistence \EntityManager \InstancePoolingTrait ;
2424use Spryker \Zed \Kernel \RequestIdentifier ;
25+ use Spryker \Zed \Propel \Persistence \BatchProcessor \ActiveRecordBatchProcessorTrait ;
2526
2627class TriggerManager implements TriggerManagerInterface
2728{
2829 use InstancePoolingTrait;
30+ use ActiveRecordBatchProcessorTrait;
2931
3032 /**
3133 * @uses \Orm\Zed\EventBehavior\Persistence\Map\SpyEventBehaviorEntityChangeTableMap::TABLE_NAME
@@ -67,7 +69,7 @@ class TriggerManager implements TriggerManagerInterface
6769 /**
6870 * @var bool|null
6971 */
70- protected static $ eventBehaviorTableExists ;
72+ protected static ? bool $ eventBehaviorTableExists = null ;
7173
7274 /**
7375 * @param \Spryker\Zed\EventBehavior\Dependency\Facade\EventBehaviorToEventInterface $eventFacade
@@ -98,45 +100,24 @@ public function __construct(
98100 */
99101 public function triggerRuntimeEvents ()
100102 {
101- if (static ::$ eventBehaviorTableExists === false ) {
102- return ;
103- }
104-
105103 if (!$ this ->config ->getEventBehaviorTriggeringStatus ()) {
106104 return ;
107105 }
108106
109- $ processId = RequestIdentifier::getRequestId ();
110107 if (!$ this ->eventBehaviorTableExists ()) {
111- static ::$ eventBehaviorTableExists = false ;
112-
113108 return ;
114109 }
115110
116- $ triggeredEvents = 0 ;
111+ $ processId = RequestIdentifier::getRequestId ();
112+
117113 $ limit = $ this ->config ->getTriggerChunkSize ();
118- $ primaryKeys = [];
119- $ offset = 0 ;
120- $ countEvents = 0 ;
121114
122115 do {
123- $ events = $ this ->getEventEntitiesByProcessId ($ processId , $ offset , $ limit );
124- static ::$ eventBehaviorTableExists = true ;
116+ $ events = $ this ->getEventEntitiesByProcessId ($ processId , $ limit );
125117 $ currentCountEvents = count ($ events );
126- $ countEvents += $ currentCountEvents ;
127118
128- $ triggeredEvents += $ this ->triggerEvents ($ events );
129- $ primaryKeys = array_merge ($ primaryKeys , $ this ->getPrimaryKeys ($ events ));
130- $ offset += $ limit ;
119+ $ this ->triggerEventsAndDelete ($ events );
131120 } while ($ currentCountEvents === $ limit );
132-
133- if ($ countEvents === $ triggeredEvents && $ triggeredEvents > 0 ) {
134- $ this ->eventBehaviorEntityManager ->deleteEventBehaviorEntityByProcessId ($ processId );
135-
136- return ;
137- }
138-
139- $ this ->eventBehaviorEntityManager ->deleteEventBehaviorEntityByPrimaryKeys ($ primaryKeys );
140121 }
141122
142123 /**
@@ -149,7 +130,7 @@ public function triggerRuntimeEventsWithReport(): EventTriggerResponseTransfer
149130 $ eventTriggerResponseTransfer ->setEventBehaviorTableExists (true );
150131 $ eventTriggerResponseTransfer ->setIsEventTriggeringActive (true );
151132
152- if (static :: $ eventBehaviorTableExists === false ) {
133+ if ($ this -> eventBehaviorTableExists () === false ) {
153134 $ eventTriggerResponseTransfer ->setMessage ('Event behavior table does not exist. ' );
154135 $ eventTriggerResponseTransfer ->setEventBehaviorTableExists (false );
155136
@@ -163,25 +144,10 @@ public function triggerRuntimeEventsWithReport(): EventTriggerResponseTransfer
163144 return $ eventTriggerResponseTransfer ;
164145 }
165146
166- if (!$ this ->eventBehaviorTableExists ()) {
167- static ::$ eventBehaviorTableExists = false ;
168- $ eventTriggerResponseTransfer ->setMessage ('Event behavior table does not exist. ' );
169- $ eventTriggerResponseTransfer ->setEventBehaviorTableExists (false );
170-
171- return $ eventTriggerResponseTransfer ;
172- }
173-
174147 $ requestId = RequestIdentifier::getRequestId ();
175148
176149 $ eventTriggerResponseTransfer ->setRequestId ($ requestId );
177150
178- $ events = $ this ->queryContainer ->queryEntityChange ($ requestId )->find ()->getData ();
179- $ eventTriggerResponseTransfer ->setEventCount (count ($ events ));
180-
181- static ::$ eventBehaviorTableExists = true ;
182-
183- $ triggeredRows = $ this ->triggerEvents ($ events );
184-
185151 $ deletedRows = 0 ;
186152 $ limit = $ this ->config ->getTriggerChunkSize ();
187153 do {
@@ -191,8 +157,9 @@ public function triggerRuntimeEventsWithReport(): EventTriggerResponseTransfer
191157 $ deletedRows += $ this ->triggerEventsAndDelete ($ events );
192158 } while ($ countEvents === $ limit );
193159
194- $ eventTriggerResponseTransfer ->setTriggeredRows ($ triggeredRows );
160+ $ eventTriggerResponseTransfer ->setTriggeredRows ($ deletedRows );
195161 $ eventTriggerResponseTransfer ->setDeletedRows ($ deletedRows );
162+ $ eventTriggerResponseTransfer ->setEventCount ($ deletedRows );
196163
197164 $ eventTriggerResponseTransfer ->setIsSuccessful (true );
198165
@@ -223,20 +190,19 @@ public function triggerLostEvents()
223190
224191 /**
225192 * @param string $processId
226- * @param int $offset
227193 * @param int $limit
228194 *
229195 * @return array<\Orm\Zed\EventBehavior\Persistence\SpyEventBehaviorEntityChange>
230196 */
231- protected function getEventEntitiesByProcessId (string $ processId , int $ offset , int $ limit ): array
197+ protected function getEventEntitiesByProcessId (string $ processId , int $ limit ): array
232198 {
233199 $ instancePoolingDisabled = false ;
234200 if ($ this ->isInstancePoolingEnabled ()) {
235201 $ this ->disableInstancePooling ();
236202 $ instancePoolingDisabled = true ;
237203 }
238204
239- $ events = $ this ->queryContainer ->queryEntityChange ($ processId )->setOffset ( $ offset )-> limit ($ limit )->find ()->getData ();
205+ $ events = $ this ->queryContainer ->queryEntityChange ($ processId )->limit ($ limit )->find ()->getData ();
240206
241207 if ($ instancePoolingDisabled ) {
242208 $ this ->enableInstancePooling ();
@@ -249,21 +215,36 @@ protected function getEventEntitiesByProcessId(string $processId, int $offset, i
249215 return $ events ;
250216 }
251217
218+ /**
219+ * @param array<\Orm\Zed\EventBehavior\Persistence\SpyEventBehaviorEntityChange> $events
220+ *
221+ * @return void
222+ */
223+ protected function deleteteEventEntities (array $ events ): void
224+ {
225+ foreach ($ events as $ event ) {
226+ $ this ->remove ($ event );
227+ }
228+
229+ $ this ->commit ();
230+ }
231+
252232 /**
253233 * @param array<\Orm\Zed\EventBehavior\Persistence\SpyEventBehaviorEntityChange> $events
254234 *
255235 * @return int
256236 */
257237 protected function triggerEventsAndDelete (array $ events ): int
258238 {
259- $ primaryKeys = $ this ->getPrimaryKeys ($ events );
239+ if (!$ events ) {
240+ return 0 ;
241+ }
242+
260243 $ triggeredRows = $ this ->triggerEvents ($ events );
261244
262- if ($ triggeredRows !== 0 && count ($ events ) === $ triggeredRows ) {
263- return $ this ->eventBehaviorEntityManager ->deleteEventBehaviorEntityByPrimaryKeys ($ primaryKeys );
264- }
245+ $ this ->deleteteEventEntities ($ events );
265246
266- return 0 ;
247+ return $ triggeredRows ;
267248 }
268249
269250 /**
@@ -316,27 +297,12 @@ protected function triggerEvents(array $events): int
316297 */
317298 protected function eventBehaviorTableExists (): bool
318299 {
319- return class_exists (BaseSpyEventBehaviorEntityChangeQuery::class)
320- && class_exists (SpyEventBehaviorEntityChangeQuery::class)
321- && $ this ->propelFacade ->tableExists (static ::TABLE_NAME_EVENT_BEHAVIOR_ENTITY_CHANGE );
322- }
323-
324- /**
325- * @param array<\Orm\Zed\EventBehavior\Persistence\SpyEventBehaviorEntityChange> $events
326- *
327- * @return array<int>
328- */
329- protected function getPrimaryKeys (array $ events ): array
330- {
331- $ keys = [];
332-
333- foreach ($ events as $ event ) {
334- /** @var int $idEventBehaviorEntityChange */
335- $ idEventBehaviorEntityChange = $ event ->getIdEventBehaviorEntityChange ();
336-
337- $ keys [] = $ idEventBehaviorEntityChange ;
300+ if (static ::$ eventBehaviorTableExists === null ) {
301+ static ::$ eventBehaviorTableExists = class_exists (BaseSpyEventBehaviorEntityChangeQuery::class)
302+ && class_exists (SpyEventBehaviorEntityChangeQuery::class)
303+ && $ this ->propelFacade ->tableExists (static ::TABLE_NAME_EVENT_BEHAVIOR_ENTITY_CHANGE );
338304 }
339305
340- return $ keys ;
306+ return static :: $ eventBehaviorTableExists ;
341307 }
342308}
0 commit comments