Align CustomField-Schicht mit core/Repository/Access-Muster. Vier Repositories (Tenant-Definition, Tenant-Option, User-Value, User-Value-Option) bekommen je ein Interface, werden von static auf instance umgestellt und ueber CustomFieldRepositoryFactory injiziert. TenantCustomFieldService und UserCustomFieldValueService injizieren die Repository-Interfaces statt statisch aufzurufen. CustomFieldServicesFactory reicht Instanzen durch. AddressBookService (Modul) bekommt TenantCustomFieldOptionRepositoryInterface per Container — Interface-Kopplung verbessert Modul-Isolation gegenueber dem vorherigen statischen Aufruf. Kein Verhaltenswechsel, keine SQL-Aenderung, keine Service-Signatur-Aenderung. Alle tenant_id-Parameter erhalten (GR-SEC-009, Security-Review SR-002). Oeffnet den Weg fuer Cluster B1 (TenantCustomFieldService-Tests) und B2 (UserCustomFieldValueService-Tests), die nun mit createMock() moeglich sind. Nebenbei zwei PHPStan-Folge-Findings korrigiert: - Veralteter Ignore-Eintrag fuer findById aus phpstan-baseline.neon entfernt - Redundanter is_array-Check in TenantCustomFieldOptionRepository entfernt (durch typisierte Interface-Signatur abgedeckt) Gates: QG-001 (1945 Tests, 28581 Assertions) / QG-002 / QG-003 / QG-006 pass. Workflow: .agents/runs/CUSTOMFIELD-DI-REFACTOR-001/ Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
40 lines
1.6 KiB
PHP
40 lines
1.6 KiB
PHP
<?php
|
|
|
|
namespace MintyPHP\Service\CustomField;
|
|
|
|
use MintyPHP\Repository\Tenant\TenantRepository;
|
|
use MintyPHP\Service\Tenant\TenantScopeService;
|
|
|
|
class CustomFieldServicesFactory
|
|
{
|
|
private ?TenantCustomFieldService $tenantCustomFieldService = null;
|
|
private ?UserCustomFieldValueService $userCustomFieldValueService = null;
|
|
|
|
public function __construct(
|
|
private readonly TenantRepository $tenantRepository,
|
|
private readonly TenantScopeService $userScopeGateway,
|
|
private readonly CustomFieldRepositoryFactory $customFieldRepositoryFactory
|
|
) {
|
|
}
|
|
|
|
public function createTenantCustomFieldService(): TenantCustomFieldService
|
|
{
|
|
return $this->tenantCustomFieldService ??= new TenantCustomFieldService(
|
|
$this->tenantRepository,
|
|
$this->customFieldRepositoryFactory->createTenantCustomFieldDefinitionRepository(),
|
|
$this->customFieldRepositoryFactory->createTenantCustomFieldOptionRepository(),
|
|
);
|
|
}
|
|
|
|
public function createUserCustomFieldValueService(): UserCustomFieldValueService
|
|
{
|
|
return $this->userCustomFieldValueService ??= new UserCustomFieldValueService(
|
|
$this->userScopeGateway,
|
|
$this->customFieldRepositoryFactory->createTenantCustomFieldDefinitionRepository(),
|
|
$this->customFieldRepositoryFactory->createTenantCustomFieldOptionRepository(),
|
|
$this->customFieldRepositoryFactory->createUserCustomFieldValueRepository(),
|
|
$this->customFieldRepositoryFactory->createUserCustomFieldValueOptionRepository(),
|
|
);
|
|
}
|
|
}
|