Files
2026-04-28 21:14:25 +03:00

121 lines
4.0 KiB
PHP

<?php
namespace App\Services\WeldLogTriggers;
use App\Services\WeldLogTriggers\Triggers\SpoolStatusChangerTrigger;
use App\Services\WeldLogTriggers\Triggers\LineListsUpdateTrigger;
use App\Services\WeldLogTriggers\Triggers\NdeMatrixUpdateTrigger;
use App\Services\WeldLogTriggers\Triggers\RequestDateOperationsTrigger;
use App\Services\WeldLogTriggers\Triggers\RepairLogsUpdateTrigger;
use App\Services\WeldLogTriggers\Triggers\NdeProjectUpdateTrigger;
use App\Services\WeldLogTriggers\Triggers\TestPackageOperationsTrigger;
use App\Services\WeldLogTriggers\Triggers\ConstructionPaintLogsTrigger;
use App\Services\WeldLogTriggers\Triggers\TestPackSyncTrigger;
use App\Services\WeldLogTriggers\Triggers\TestPackBaseStatusChangerTrigger;
use App\Services\WeldLogTriggers\Triggers\PaintFollowUpsSyncTrigger;
use App\Services\WeldLogTriggers\Triggers\HandoversSyncTrigger;
use App\Services\WeldLogTriggers\Triggers\TestPackCleanupTrigger;
use App\Services\WeldLogTriggers\Triggers\NdtCalculationCacheTrigger;
use App\Services\WeldLogTriggers\Triggers\RegisterCreatorCacheTrigger;
/**
* WeldLog Trigger Registry
*
* Central registry for all weld log triggers
* Manages trigger registration and retrieval
*/
class WeldLogTriggerRegistry
{
/**
* @var array Registered triggers
*/
protected $triggers = [];
/**
* Constructor - automatically registers all triggers
*/
public function __construct()
{
$this->registerTriggers();
}
/**
* Register all trigger instances
*/
protected function registerTriggers()
{
// Order 1-12 based on trigger execution order
$this->register(new SpoolStatusChangerTrigger()); // Order 1
$this->register(new LineListsUpdateTrigger()); // Order 2
$this->register(new NdeMatrixUpdateTrigger()); // Order 3
$this->register(new RequestDateOperationsTrigger()); // Order 4
$this->register(new RepairLogsUpdateTrigger()); // Order 5
$this->register(new NdeProjectUpdateTrigger()); // Order 6
$this->register(new TestPackageOperationsTrigger()); // Order 7
$this->register(new TestPackSyncTrigger()); // Order 8 - Sync from WeldLog to Test Pack
$this->register(new ConstructionPaintLogsTrigger()); // Order 9
$this->register(new TestPackBaseStatusChangerTrigger()); // Order 10
$this->register(new PaintFollowUpsSyncTrigger()); // Order 11
$this->register(new HandoversSyncTrigger()); // Order 12
$this->register(new TestPackCleanupTrigger()); // Order 13
$this->register(new NdtCalculationCacheTrigger()); // Order 14
$this->register(new RegisterCreatorCacheTrigger()); // Order 15
}
/**
* Register a single trigger
*
* @param \App\Services\WeldLogTriggers\Contracts\WeldLogTriggerInterface $trigger
*/
public function register($trigger)
{
$this->triggers[$trigger->getName()] = $trigger;
}
/**
* Get all triggers sorted by execution order
*
* @return array
*/
public function getTriggersInOrder(): array
{
$triggers = $this->triggers;
usort($triggers, function($a, $b) {
return $a->getOrder() <=> $b->getOrder();
});
return $triggers;
}
/**
* Get a specific trigger by name
*
* @param string $name Trigger name
* @return \App\Services\WeldLogTriggers\Contracts\WeldLogTriggerInterface|null
*/
public function getTrigger(string $name)
{
return $this->triggers[$name] ?? null;
}
/**
* Get all registered trigger names
*
* @return array
*/
public function getTriggerNames(): array
{
return array_keys($this->triggers);
}
/**
* Get total count of registered triggers
*
* @return int
*/
public function count(): int
{
return count($this->triggers);
}
}