refactor(audit): extract audit domain into self-contained module
Move the entire audit subsystem (system audit, API audit, import audit, user lifecycle audit, frontend telemetry) from core into modules/audit/. Core decoupling via interface-based injection: - AuditRecorderInterface replaces SystemAuditService in 10+ core services - UserLifecycleAuditInterface / ImportAuditInterface for specialized flows - NullAuditRecorder fallback when audit module is disabled - ApiBootstrap/ApiResponse use null-safe callable resolvers Module structure (modules/audit/): - Manifest with routes, permissions, scheduler jobs, authorization policy - 9 services, 8 repositories, 6 domain enums, 4 job handlers - 33 page files, 4 JS files, 8 test files, migration scripts, i18n Core cleanup: - OperationsAuthorizationPolicy, UiCapabilityMap, PermissionService surgically cleaned of audit-specific constants - Sidebar template cleared of hardcoded audit navigation - AuditModuleIsolationContractTest ensures no future core→module coupling All quality gates pass: 1346 tests (19,276 assertions), PHPStan level 5 clean, architecture contracts verified. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -11,8 +11,8 @@ use MintyPHP\Repository\User\UserListQueryRepositoryInterface;
|
||||
use MintyPHP\Repository\User\UserReadRepositoryInterface;
|
||||
use MintyPHP\Repository\User\UserWriteRepositoryInterface;
|
||||
use MintyPHP\Service\Access\AssignableRoleService;
|
||||
use MintyPHP\Service\Audit\AuditServicesFactory;
|
||||
use MintyPHP\Service\Audit\UserLifecycleAuditService;
|
||||
use MintyPHP\Service\Audit\AuditRecorderInterface;
|
||||
use MintyPHP\Service\Audit\UserLifecycleAuditInterface;
|
||||
|
||||
class UserServicesFactory
|
||||
{
|
||||
@@ -24,13 +24,13 @@ class UserServicesFactory
|
||||
private ?UserAccountService $userAccountService = null;
|
||||
private ?UserLifecycleService $userLifecycleService = null;
|
||||
private ?UserLifecycleRestoreService $userLifecycleRestoreService = null;
|
||||
private ?UserLifecycleAuditService $userLifecycleAuditService = null;
|
||||
|
||||
/**
|
||||
* @param \Closure(): AssignableRoleService $assignableRoleServiceFactory Lazy resolver to break circular dependency
|
||||
*/
|
||||
public function __construct(
|
||||
private readonly AuditServicesFactory $auditServicesFactory,
|
||||
private readonly AuditRecorderInterface $auditRecorder,
|
||||
private readonly UserLifecycleAuditInterface $userLifecycleAudit,
|
||||
private readonly UserRepositoryFactory $userRepositoryFactory,
|
||||
private readonly UserGatewayFactory $userGatewayFactory,
|
||||
private readonly DatabaseSessionRepository $databaseSessionRepository,
|
||||
@@ -50,7 +50,7 @@ class UserServicesFactory
|
||||
$this->createUserSettingsGateway(),
|
||||
$this->userGatewayFactory->getTenantScopeService(),
|
||||
$this->createUserDirectoryGateway(),
|
||||
$this->auditServicesFactory->createSystemAuditService(),
|
||||
$this->auditRecorder,
|
||||
$this->databaseSessionRepository,
|
||||
$this->eventDispatcher
|
||||
);
|
||||
@@ -145,7 +145,7 @@ class UserServicesFactory
|
||||
$this->createUserReadRepository(),
|
||||
$this->createUserWriteRepository(),
|
||||
$this->createUserSettingsGateway(),
|
||||
$this->createUserLifecycleAuditService(),
|
||||
$this->userLifecycleAudit,
|
||||
$this->databaseSessionRepository
|
||||
);
|
||||
}
|
||||
@@ -155,14 +155,9 @@ class UserServicesFactory
|
||||
return $this->userLifecycleRestoreService ??= new UserLifecycleRestoreService(
|
||||
$this->createUserReadRepository(),
|
||||
$this->createUserWriteRepository(),
|
||||
$this->createUserLifecycleAuditService(),
|
||||
$this->userLifecycleAudit,
|
||||
$this->databaseSessionRepository,
|
||||
$this->createUserSettingsGateway()
|
||||
);
|
||||
}
|
||||
|
||||
private function createUserLifecycleAuditService(): UserLifecycleAuditService
|
||||
{
|
||||
return $this->userLifecycleAuditService ??= $this->auditServicesFactory->createUserLifecycleAuditService();
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user