Files
breadcrumb-the-shire/core/Service/CustomField/CustomFieldRepositoryFactory.php
fs 6b05bbfe9c refactor(customfield): interface-based DI for repositories
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>
2026-04-22 19:32:14 +02:00

41 lines
1.9 KiB
PHP

<?php
namespace MintyPHP\Service\CustomField;
use MintyPHP\Repository\CustomField\TenantCustomFieldDefinitionRepository;
use MintyPHP\Repository\CustomField\TenantCustomFieldDefinitionRepositoryInterface;
use MintyPHP\Repository\CustomField\TenantCustomFieldOptionRepository;
use MintyPHP\Repository\CustomField\TenantCustomFieldOptionRepositoryInterface;
use MintyPHP\Repository\CustomField\UserCustomFieldValueOptionRepository;
use MintyPHP\Repository\CustomField\UserCustomFieldValueOptionRepositoryInterface;
use MintyPHP\Repository\CustomField\UserCustomFieldValueRepository;
use MintyPHP\Repository\CustomField\UserCustomFieldValueRepositoryInterface;
class CustomFieldRepositoryFactory
{
private ?TenantCustomFieldDefinitionRepository $tenantCustomFieldDefinitionRepository = null;
private ?TenantCustomFieldOptionRepository $tenantCustomFieldOptionRepository = null;
private ?UserCustomFieldValueRepository $userCustomFieldValueRepository = null;
private ?UserCustomFieldValueOptionRepository $userCustomFieldValueOptionRepository = null;
public function createTenantCustomFieldDefinitionRepository(): TenantCustomFieldDefinitionRepositoryInterface
{
return $this->tenantCustomFieldDefinitionRepository ??= new TenantCustomFieldDefinitionRepository();
}
public function createTenantCustomFieldOptionRepository(): TenantCustomFieldOptionRepositoryInterface
{
return $this->tenantCustomFieldOptionRepository ??= new TenantCustomFieldOptionRepository();
}
public function createUserCustomFieldValueRepository(): UserCustomFieldValueRepositoryInterface
{
return $this->userCustomFieldValueRepository ??= new UserCustomFieldValueRepository();
}
public function createUserCustomFieldValueOptionRepository(): UserCustomFieldValueOptionRepositoryInterface
{
return $this->userCustomFieldValueOptionRepository ??= new UserCustomFieldValueOptionRepository();
}
}