Files
breadcrumb-the-shire/lib/Service/AddressBook/AddressBookServicesFactory.php
2026-03-04 15:56:58 +01:00

67 lines
2.5 KiB
PHP

<?php
namespace MintyPHP\Service\AddressBook;
use MintyPHP\Service\CustomField\CustomFieldServicesFactory;
use MintyPHP\Service\Directory\DirectoryServicesFactory;
use MintyPHP\Service\User\UserServicesFactory;
class AddressBookServicesFactory
{
private ?AddressBookDirectoryGateway $addressBookDirectoryGateway = null;
private ?AddressBookCustomFieldGateway $addressBookCustomFieldGateway = null;
private ?AddressBookAvatarGateway $addressBookAvatarGateway = null;
private ?AddressBookService $addressBookService = null;
public function __construct(
private readonly UserServicesFactory $userServicesFactory,
private readonly DirectoryServicesFactory $directoryServicesFactory,
private readonly CustomFieldServicesFactory $customFieldServicesFactory
) {}
public function createAddressBookService(): AddressBookService
{
if ($this->addressBookService !== null) {
return $this->addressBookService;
}
$userFactory = $this->userServicesFactory;
return $this->addressBookService = new AddressBookService(
$userFactory->createUserAccountService(),
$userFactory->createUserAssignmentService(),
$this->createAddressBookDirectoryGateway(),
$this->createAddressBookCustomFieldGateway(),
$this->createAddressBookAvatarGateway()
);
}
public function createAddressBookDirectoryGateway(): AddressBookDirectoryGateway
{
if ($this->addressBookDirectoryGateway !== null) {
return $this->addressBookDirectoryGateway;
}
$directoryFactory = $this->directoryServicesFactory;
return $this->addressBookDirectoryGateway = new AddressBookDirectoryGateway(
$directoryFactory->createTenantService(),
$directoryFactory->createDepartmentService(),
$directoryFactory->createRoleService(),
$directoryFactory->createDirectoryScopeGateway()
);
}
public function createAddressBookCustomFieldGateway(): AddressBookCustomFieldGateway
{
return $this->addressBookCustomFieldGateway ??= new AddressBookCustomFieldGateway(
$this->customFieldServicesFactory->createUserCustomFieldValueService()
);
}
public function createAddressBookAvatarGateway(): AddressBookAvatarGateway
{
return $this->addressBookAvatarGateway ??= new AddressBookAvatarGateway(
$this->userServicesFactory->createUserAvatarService()
);
}
}