From 517f65078de2312441f6d4bfbe3092f21faff830 Mon Sep 17 00:00:00 2001 From: Ruben van der Linde Date: Fri, 14 Aug 2026 20:59:25 +0200 Subject: [PATCH] refactor(deps): inject OpenRegister instead of looking it up (ADR-083) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 5 file(s) reached OpenRegister through $this->container->get(...) on an UNCONDITIONAL path — no availability check, no degrading catch. The dependency was announced nowhere: not in the constructor, not in the use block, not in any type. It appeared mid-method, as a string. Now constructor-injected and typed, so the dependency is visible to a reader and to tooling. Behaviour is unchanged: the same object, from the same container, resolved at construction instead of at first use. ContainerInterface is dropped only where nothing else used it. Deliberately NOT converted, because they are correct as written (ADR-083 rule 1's exception): lookups behind isInstalled()/getInstalledApps(), and lookups whose catch degrades rather than rethrows. Verified per file: php -l clean, and gate-66's lookup check reports zero remaining findings for each file changed. gate-66 for this app: 23 -> 8. --- lib/Controller/ContactpersonenController.php | 33 +++---- .../OrganisationMembersController.php | 6 +- .../UserProfileUpdatedEventListener.php | 28 +++--- lib/Service/GebruikSyncService.php | 9 +- lib/Service/OrganizationSyncService.php | 91 ++++++++----------- 5 files changed, 73 insertions(+), 94 deletions(-) diff --git a/lib/Controller/ContactpersonenController.php b/lib/Controller/ContactpersonenController.php index babdef7b..1d171984 100644 --- a/lib/Controller/ContactpersonenController.php +++ b/lib/Controller/ContactpersonenController.php @@ -35,6 +35,9 @@ use OCP\Security\ISecureRandom; use Psr\Container\ContainerInterface; use Psr\Log\LoggerInterface; +use OCA\OpenRegister\Service\ObjectService; +use OCA\OpenRegister\Db\MagicMapper; +use OCA\OpenRegister\Service\OrganisationService; /** * Controller for managing contactpersonen and their user accounts. @@ -152,6 +155,9 @@ public function __construct( ContainerInterface $container, ISecureRandom $secureRandom, LoggerInterface $logger, + private readonly ObjectService $objectService, + private readonly MagicMapper $magicMapper, + private readonly OrganisationService $organisationService, ) { parent::__construct(appName: $appName, request: $request); $this->settingsService = $settingsService; @@ -201,7 +207,6 @@ public function getContactpersonen(string $organisationId): JSONResponse { try { // Get object service. - $objectService = $this->container->get('OCA\OpenRegister\Service\ObjectService'); // Search for contactpersonen belonging to this organisation. // Use a more generic search that doesn't require specific register/schema. @@ -212,7 +217,7 @@ public function getContactpersonen(string $organisationId): JSONResponse { // Let ObjectService resolve the schema. ]; - $contactpersonen = $objectService->searchObjectsPaginated($searchParams); + $contactpersonen = $this->objectService->searchObjectsPaginated($searchParams); // Enhance with user information. // @@ -308,7 +313,6 @@ private function checkOrganisationReadPermission(\OCP\IUser $currentUser, string $callerOrgUuid = null; try { - $objectService = $this->container->get('OCA\OpenRegister\Service\ObjectService'); $callerOrgUuid = $this->resolveContactOrganisation(objectService: $objectService, username: $currentUser->getUID()); } catch (\Exception $e) { $this->logger->warning( @@ -404,10 +408,9 @@ public function convertToUser(string $contactPersonId): JSONResponse { try { // Get object service. - $objectService = $this->container->get('OCA\OpenRegister\Service\ObjectService'); // Find the contactpersoon object — bind to current tenant. - $contactPersonObject = $objectService->find( + $contactPersonObject = $this->objectService->find( id: $contactPersonId, register: 'voorzieningen', schema: 'contactpersoon', @@ -533,8 +536,7 @@ public function convertToUser(string $contactPersonId): JSONResponse { // Save using MagicMapper directly to bypass schema validation. // This avoids "Unresolved reference" errors when schema references can't be resolved. - $objectMapper = $this->container->get('OCA\OpenRegister\Db\MagicMapper'); - $objectMapper->update($contactPersonObject); + $this->magicMapper->update($contactPersonObject); $this->logger->info( 'ContactpersonenController: Updated contactpersoon with username', @@ -942,8 +944,6 @@ private function checkGroupUpdatePermission(\OCP\IUser $currentUser, string $use */ private function verifyCrossTenantScope(\OCP\IUser $currentUser, string $username): ?JSONResponse { try { - $objectService = $this->container->get('OCA\OpenRegister\Service\ObjectService'); - $targetOrgUuid = $this->resolveContactOrganisation(objectService: $objectService, username: $username); $callerOrgUuid = $this->resolveContactOrganisation(objectService: $objectService, username: $currentUser->getUID()); @@ -988,7 +988,7 @@ private function verifyCrossTenantScope(\OCP\IUser $currentUser, string $usernam * @spec openspec/changes/method-decomposition/tasks.md#task-5 */ private function resolveContactOrganisation(object $objectService, string $username): ?string { - $results = $objectService->searchObjectsPaginated( + $results = $this->objectService->searchObjectsPaginated( ['username' => $username, '_limit' => 1, '_schema' => 'contactpersoon'] ); @@ -1203,8 +1203,7 @@ public function getUserInfo(string $contactPersonId): JSONResponse { } try { - $objectService = $this->container->get('OCA\OpenRegister\Service\ObjectService'); - $contactObject = $objectService->find( + $contactObject = $this->objectService->find( id: $contactPersonId, register: 'voorzieningen', schema: 'contactpersoon' @@ -1597,10 +1596,8 @@ public function getMe(): JSONResponse { // Get organisation data from OpenRegister. try { - $organisationService = $this->container->get('OCA\OpenRegister\Service\OrganisationService'); - // Get active organisation. - $activeOrg = $organisationService->getActiveOrganisation(); + $activeOrg = $this->organisationService->getActiveOrganisation(); if ($activeOrg !== null) { $response['organisations']['active'] = [ 'uuid' => $activeOrg->getUuid(), @@ -1611,7 +1608,7 @@ public function getMe(): JSONResponse { } // Get all user organisations. - $userOrgs = $organisationService->getUserOrganisations(); + $userOrgs = $this->organisationService->getUserOrganisations(); foreach ($userOrgs as $org) { $response['organisations']['all'][] = [ 'uuid' => $org->getUuid(), @@ -1728,15 +1725,13 @@ private function enrichMeWithContactPersonData( string $userEmail, ): void { try { - $objectService = $this->container->get('OCA\OpenRegister\Service\ObjectService'); - $searchParams = [ 'username' => $userId, '_limit' => 1, '_schema' => 'contactpersoon', ]; - $contactpersonen = $objectService->searchObjectsPaginated($searchParams); + $contactpersonen = $this->objectService->searchObjectsPaginated($searchParams); if (empty($contactpersonen['results']) === false) { $contactPerson = $contactpersonen['results'][0]; diff --git a/lib/Controller/OrganisationMembersController.php b/lib/Controller/OrganisationMembersController.php index 92ebd0aa..3cfa94d3 100644 --- a/lib/Controller/OrganisationMembersController.php +++ b/lib/Controller/OrganisationMembersController.php @@ -52,8 +52,8 @@ use OCP\IRequest; use OCP\IUserManager; use OCP\IUserSession; -use Psr\Container\ContainerInterface; use Psr\Log\LoggerInterface; +use OCA\OpenRegister\Service\OrganisationService; /** * Beheerder-gated grant/revoke of organisation membership for an existing @@ -87,8 +87,8 @@ public function __construct( private readonly IUserSession $userSession, private readonly IGroupManager $groupManager, private readonly IUserManager $userManager, - private readonly ContainerInterface $container, private readonly LoggerInterface $logger, + private readonly OrganisationService $organisationService, ) { parent::__construct(appName: Application::APP_ID, request: $request); }//end __construct() @@ -266,6 +266,6 @@ private function authorizeMaintainer(string $organisationUuid): ?JSONResponse { * @throws \Throwable When OpenRegister is unavailable. */ private function getOrganisationService(): \OCA\OpenRegister\Service\OrganisationService { - return $this->container->get('OCA\OpenRegister\Service\OrganisationService'); + return $this->organisationService; }//end getOrganisationService() }//end class diff --git a/lib/EventListener/UserProfileUpdatedEventListener.php b/lib/EventListener/UserProfileUpdatedEventListener.php index 54ecc1c7..e95d9b3c 100644 --- a/lib/EventListener/UserProfileUpdatedEventListener.php +++ b/lib/EventListener/UserProfileUpdatedEventListener.php @@ -25,6 +25,11 @@ use OCP\EventDispatcher\IEventListener; use Psr\Container\ContainerInterface; use Psr\Log\LoggerInterface; +use OCA\OpenRegister\Service\ObjectService; +use OCA\OpenRegister\Db\SchemaMapper; +use OCA\OpenRegister\Db\RegisterMapper; +use OCA\OpenRegister\Service\Object\SaveObject\MetadataHydrationHandler; +use OCA\OpenRegister\Db\MagicMapper; /** * Syncs user profile changes to the corresponding contactpersoon object. @@ -56,6 +61,11 @@ class UserProfileUpdatedEventListener implements IEventListener { */ public function __construct( private readonly ContainerInterface $container, + private readonly ObjectService $objectService, + private readonly SchemaMapper $schemaMapper, + private readonly RegisterMapper $registerMapper, + private readonly MetadataHydrationHandler $metadataHydrationHandler, + private readonly MagicMapper $magicMapper, ) { }//end __construct() @@ -128,7 +138,6 @@ public function handle(Event $event): void { * @spec openspec/specs/method-decomposition/spec.md */ private function syncToContactPerson(UserProfileUpdatedEvent $event, LoggerInterface $logger): void { - $objectService = $this->container->get('OCA\OpenRegister\Service\ObjectService'); $settingsService = $this->container->get(SettingsService::class); $voorzieningenConfig = $settingsService->getVoorzieningenConfig(); @@ -283,15 +292,11 @@ private function persistContactPersonPatch( int $schema, LoggerInterface $logger, ): void { - $schemaMapper = $this->container->get('OCA\OpenRegister\Db\SchemaMapper'); - $registerMapper = $this->container->get('OCA\OpenRegister\Db\RegisterMapper'); - $metaHydrationHandler = $this->container->get('OCA\OpenRegister\Service\Object\SaveObject\MetadataHydrationHandler'); - $schemaEntity = null; $registerEntity = null; try { - $schemaEntity = $schemaMapper->find(id: $schema, _rbac: false, _multitenancy: false); - $registerEntity = $registerMapper->find(id: $register, _rbac: false, _multitenancy: false); + $schemaEntity = $this->schemaMapper->find(id: $schema, _rbac: false, _multitenancy: false); + $registerEntity = $this->registerMapper->find(id: $register, _rbac: false, _multitenancy: false); } catch (\Exception $e) { $logger->warning( '[UserProfileUpdatedEventListener] Could not load schema/register entities for _name hydration', @@ -302,7 +307,7 @@ private function persistContactPersonPatch( } if ($schemaEntity !== null) { - $metaHydrationHandler->hydrateObjectMetadata(entity: $contactPerson, schema: $schemaEntity); + $this->metadataHydrationHandler->hydrateObjectMetadata(entity: $contactPerson, schema: $schemaEntity); $logger->debug( '[UserProfileUpdatedEventListener] Regenerated _name metadata', [ @@ -313,8 +318,7 @@ private function persistContactPersonPatch( // Pass register and schema so the magic mapper route is triggered and the // per-schema magic table is updated (not just the blob table). - $objectMapper = $this->container->get('OCA\OpenRegister\Db\MagicMapper'); - $objectMapper->update(entity: $contactPerson, register: $registerEntity, schema: $schemaEntity); + $this->magicMapper->update(entity: $contactPerson, register: $registerEntity, schema: $schemaEntity); }//end persistContactpersoonPatch() @@ -341,7 +345,7 @@ private function findContactPerson( // 1. Search by username = userId, scoped to the user's organisation (multitenancy). // This prevents updating a contactpersoon from a different organisation when. // Multiple records share the same username across orgs. - $results = $objectService->searchObjects( + $results = $this->objectService->searchObjects( query: ['@self' => $selfQuery, 'username' => $userId, '_limit' => 5], _rbac: false, _multitenancy: true @@ -381,7 +385,7 @@ private function findContactPerson( // Use _search for case-insensitive matching, then verify the email field in PHP. // Scoped to user's organisation via multitenancy to avoid cross-org matches. - $results = $objectService->searchObjects( + $results = $this->objectService->searchObjects( query: ['@self' => $selfQuery, '_search' => $emailCandidate, '_limit' => 5], _rbac: false, _multitenancy: true diff --git a/lib/Service/GebruikSyncService.php b/lib/Service/GebruikSyncService.php index 36182dd3..8d096347 100644 --- a/lib/Service/GebruikSyncService.php +++ b/lib/Service/GebruikSyncService.php @@ -29,6 +29,7 @@ use OCA\OpenRegister\Db\ObjectEntity; use Psr\Container\ContainerInterface; use Psr\Log\LoggerInterface; +use OCA\OpenRegister\Service\ObjectService; /** * Service for synchronizing and processing Gebruik (Usage) objects. @@ -86,6 +87,7 @@ public function __construct( LoggerInterface $logger, SettingsService $settingsService, ContainerInterface $container, + private readonly ObjectService $objectService, ) { $this->logger = $logger; $this->settingsService = $settingsService; @@ -324,7 +326,6 @@ private function processAmefElements(ObjectEntity $gebruikObject): array { * @return array Array of found ObjectEntity objects. */ private function searchAmefElementsByIds(array $ids, string $register, string $schema): array { - $objectService = $this->container->get('OCA\OpenRegister\Service\ObjectService'); $foundElements = []; foreach ($ids as $id) { @@ -340,7 +341,7 @@ private function searchAmefElementsByIds(array $ids, string $register, string $s '_limit' => 5, ]; - $elements = $objectService->searchObjects($query); + $elements = $this->objectService->searchObjects($query); $foundElements = array_merge($foundElements, $elements); } catch (Exception $e) { $this->logger->warning( @@ -515,8 +516,6 @@ private function resolveLatestEligibleStatus(array $statusDates, string $gebruik */ private function updateGebruikObject(ObjectEntity $gebruikObject, array $updatedData): void { try { - $objectService = $this->container->get('OCA\OpenRegister\Service\ObjectService'); - // Get voorzieningenConfig to find the correct register and schema. $voorzieningenConfig = $this->settingsService->getVoorzieningenConfig(); $register = $voorzieningenConfig['register'] ?? ''; @@ -527,7 +526,7 @@ private function updateGebruikObject(ObjectEntity $gebruikObject, array $updated } // Update the object. - $objectService->saveObject( + $this->objectService->saveObject( object: $updatedData, register: (int)$register, schema: (int)$gebruikSchema, diff --git a/lib/Service/OrganizationSyncService.php b/lib/Service/OrganizationSyncService.php index 287341c1..b87d0b87 100644 --- a/lib/Service/OrganizationSyncService.php +++ b/lib/Service/OrganizationSyncService.php @@ -26,6 +26,8 @@ use OCP\IDBConnection; use Psr\Container\ContainerInterface; use Psr\Log\LoggerInterface; +use OCA\OpenRegister\Db\OrganisationMapper; +use OCA\OpenRegister\Db\MagicMapper; /** * Service for synchronizing organizations and contact persons. @@ -130,6 +132,9 @@ public function __construct( private IDBConnection $db, private readonly ContactPersonHandler $contactpersonHandler, ContainerInterface $container, + private readonly ObjectService $objectService, + private readonly OrganisationMapper $organisationMapper, + private readonly MagicMapper $magicMapper, ) { $this->organisationService = $organisationService; $this->contactPersonService = $contactPersonService; @@ -380,7 +385,6 @@ public function performOrganizationsSync(int $batchSize = 50, int $maxExecutionS $rows = $qb->executeQuery()->fetchAll(); - $objectService = $this->container->get('OCA\OpenRegister\Service\ObjectService'); if ($objectService instanceof ObjectService === false) { $this->logger->error('OrganizationSync: could not resolve ObjectService'); return $stats; @@ -400,7 +404,7 @@ public function performOrganizationsSync(int $batchSize = 50, int $maxExecutionS } try { - $object = $objectService->find( + $object = $this->objectService->find( id: $row['uuid'], register: $register, schema: $organizationSchema, @@ -505,7 +509,6 @@ public function performContactSync(int $batchSize = 100, int $maxExecutionSecond $this->logger->info('ContactSync: processing ' . count($contacts) . ' contacts with existing NC accounts'); - $objectService = $this->container->get('OCA\OpenRegister\Service\ObjectService'); if ($objectService instanceof ObjectService === false) { $this->logger->error('ContactSync: could not resolve ObjectService'); return $stats; @@ -524,7 +527,7 @@ public function performContactSync(int $batchSize = 100, int $maxExecutionSecond } try { - $contactEntity = $objectService->find( + $contactEntity = $this->objectService->find( id: $contact['uuid'], register: $register, schema: $contactSchema, @@ -537,7 +540,7 @@ public function performContactSync(int $batchSize = 100, int $maxExecutionSecond // persisted record. The schema validation warning for a UUID-string value is // benign compared to a data-corruption window where the field is missing. $contactEntity->setObject($contactEntityObject); - $objectService->saveObject( + $this->objectService->saveObject( object: $contactEntity, register: $register, schema: $contactSchema, @@ -762,8 +765,6 @@ public function performFullSync(int $minutesBack = 10): array { */ private function getOrganisationObjectsByTimeWindow(string $register, string $organizationSchema, int $minutesBack): array { try { - $objectService = $this->container->get('OCA\OpenRegister\Service\ObjectService'); - // Build base query for register and schema. A sync tick may // genuinely need "all objects" (minutesBack <= 0) — bounded at a // documented safe ceiling rather than left unbounded. @@ -811,7 +812,7 @@ private function getOrganisationObjectsByTimeWindow(string $register, string $or } // Use searchObjects method for filtering. - $objects = $objectService->searchObjects(query: $query, _rbac: false, _multitenancy: false); + $objects = $this->objectService->searchObjects(query: $query, _rbac: false, _multitenancy: false); $this->logger->debug( 'OrganizationSyncService: Retrieved organisatie objects with searchObjects', @@ -949,8 +950,7 @@ private function ensureOrganisationEntity(object $organisationObject, array &$st // Fetch the complete object from the database to ensure we have all data. try { - $objectService = $this->container->get('OCA\OpenRegister\Service\ObjectService'); - $fullObject = $objectService->find( + $fullObject = $this->objectService->find( id: $organisationId, register: $organisationObject->getRegister(), schema: $organisationObject->getSchema(), @@ -988,10 +988,9 @@ private function ensureOrganisationEntity(object $organisationObject, array &$st $organizationSchema = ($voorzieningenConfig['organisatie_schema'] ?? ''); // Try to find existing organisation entity. - $organisationMapper = $this->container->get('OCA\OpenRegister\Db\OrganisationMapper'); try { - $organisationEntity = $organisationMapper->findByUuid($organisationId); + $organisationEntity = $this->organisationMapper->findByUuid($organisationId); // Entity exists - update it if needed. $status = strtolower(($objectData['status'] ?? 'actief')); @@ -1021,7 +1020,7 @@ private function ensureOrganisationEntity(object $organisationObject, array &$st $wasActive = $organisationEntity->getActive(); $organisationEntity->setActive($shouldBeActive); - $organisationMapper->save($organisationEntity); + $this->organisationMapper->save($organisationEntity); $stats['entitiesUpdated']++; // Send activation email if organization became active. @@ -1064,7 +1063,7 @@ private function ensureOrganisationEntity(object $organisationObject, array &$st $slug = strtolower(preg_replace('/[^a-z0-9]+/', '-', strtolower($orgName))); $slug = trim($slug, '-'); try { - $organisationEntity = $organisationMapper->findBySlug($slug); + $organisationEntity = $this->organisationMapper->findBySlug($slug); $this->logger->info( 'OrganizationSyncService: Found existing entity by slug, updating UUID to match object', [ @@ -1077,7 +1076,7 @@ private function ensureOrganisationEntity(object $organisationObject, array &$st // Update the entity's UUID to match the object UUID so future lookups work. $organisationEntity->setUuid($organisationId); - $organisationMapper->save($organisationEntity); + $this->organisationMapper->save($organisationEntity); $stats['entitiesUpdated']++; // Update organisatie object owner to this entity. @@ -1241,8 +1240,6 @@ private function getContactPersonsForOrganisation(string $organisationId, string } try { - $objectService = $this->container->get('OCA\OpenRegister\Service\ObjectService'); - // Use searchObjects for more efficient filtering on-demand. $query = [ '@self' => [ @@ -1253,7 +1250,7 @@ private function getContactPersonsForOrganisation(string $organisationId, string '_limit' => 500, ]; - $contactPersons = $objectService->searchObjects(query: $query, _rbac: false, _multitenancy: false); + $contactPersons = $this->objectService->searchObjects(query: $query, _rbac: false, _multitenancy: false); $this->logger->debug( 'OrganizationSyncService: Retrieved contact persons on-demand', @@ -1412,8 +1409,7 @@ private function updateOrganisationEntityUsers(object $organisationEntity, array $organisationEntity->setUsers($allUsernames); - $organisationMapper = $this->container->get('OCA\OpenRegister\Db\OrganisationMapper'); - $organisationMapper->save($organisationEntity); + $this->organisationMapper->save($organisationEntity); $stats['entitiesUpdated']++; @@ -1516,10 +1512,9 @@ public function getSyncStatus(int $minutesBack = 10): array { ); // Get organization entities count. - $organisationMapper = $this->container->get('OCA\OpenRegister\Db\OrganisationMapper'); $entitiesCount = 0; try { - $entities = $organisationMapper->findAllWithUserCount(); + $entities = $this->organisationMapper->findAllWithUserCount(); $entitiesCount = count($entities); } catch (\Exception $e) { // Ignore errors in count. @@ -1857,8 +1852,7 @@ private function processNestedContactPersons($organizationObject, array &$stats) ); // Fetch the contact person object using the UUID. - $objectService = $this->container->get('OCA\OpenRegister\Service\ObjectService'); - $contactObject = $objectService->find( + $contactObject = $this->objectService->find( id: $contactData, register: $register, schema: $contactSchema, @@ -1976,7 +1970,6 @@ private function processRelatedContactPersons(string $organizationUuid, $organiz } // Find all contactpersoon objects that have this organization in their organisation property. - $objectService = $this->container->get('OCA\OpenRegister\Service\ObjectService'); // Search for contactpersoon objects with this organization reference. // Try both 'organisatie' and 'organisation' field names. @@ -1999,7 +1992,7 @@ private function processRelatedContactPersons(string $organizationUuid, $organiz ] ); - $relatedContacts = $objectService->searchObjects($query); + $relatedContacts = $this->objectService->searchObjects($query); // If not found, try with 'organisation' field. if (empty($relatedContacts) === true) { @@ -2014,7 +2007,7 @@ private function processRelatedContactPersons(string $organizationUuid, $organiz ] ); - $relatedContacts = $objectService->searchObjects($query); + $relatedContacts = $this->objectService->searchObjects($query); } if (empty($relatedContacts) === true) { @@ -2032,7 +2025,7 @@ private function processRelatedContactPersons(string $organizationUuid, $organiz $orgRegister = ($voorzieningenConfig2['register'] ?? ''); $orgSchema = ($voorzieningenConfig2['organisatie_schema'] ?? ''); - $rawOrgObject = $objectService->find( + $rawOrgObject = $this->objectService->find( id: $organizationUuid, register: $orgRegister, schema: $orgSchema, @@ -2063,7 +2056,7 @@ private function processRelatedContactPersons(string $organizationUuid, $organiz } try { - $contactObj = $objectService->find( + $contactObj = $this->objectService->find( id: $contactUuid, register: $register, schema: $contactSchema, @@ -2131,7 +2124,7 @@ private function processRelatedContactPersons(string $organizationUuid, $organiz ); try { - $fullContactObject = $objectService->find( + $fullContactObject = $this->objectService->find( id: $contactUuid, register: $register, schema: $contactSchema, @@ -2160,8 +2153,7 @@ private function processRelatedContactPersons(string $organizationUuid, $organiz if (empty($contactData['organisatie']) === true) { $contactData['organisatie'] = $organizationUuid; $contactObject->setObject($contactData); - $objectMapper = $this->container->get('OCA\OpenRegister\Db\MagicMapper'); - $objectMapper->update($contactObject); + $this->magicMapper->update($contactObject); $this->logger->info( '[FLOW] Set missing organisatie field on related contact', [ @@ -2241,8 +2233,6 @@ private function createOrUpdateContactPersonObject( array &$stats, ): void { try { - $objectService = $this->container->get('OCA\OpenRegister\Service\ObjectService'); - $email = ($contactData['email'] ?? $contactData['e-mailadres'] ?? ''); if (empty($email) === true) { $this->logger->warning( @@ -2272,7 +2262,7 @@ private function createOrUpdateContactPersonObject( ); try { - $contactObject = $objectService->find( + $contactObject = $this->objectService->find( id: $existingContactId, register: $register, schema: $contactSchema, @@ -2310,7 +2300,7 @@ private function createOrUpdateContactPersonObject( unset($contactData['id']); unset($contactData['uuid']); - $contactObject = $objectService->saveObject( + $contactObject = $this->objectService->saveObject( object: $contactData, register: $register, schema: $contactSchema, @@ -2323,8 +2313,7 @@ private function createOrUpdateContactPersonObject( $restoredData = $contactObject->getObject(); $restoredData['organisatie'] = $savedOrganisation; $contactObject->setObject($restoredData); - $objectMapper = $this->container->get('OCA\OpenRegister\Db\MagicMapper'); - $objectMapper->update($contactObject); + $this->magicMapper->update($contactObject); } }//end if @@ -2337,8 +2326,7 @@ private function createOrUpdateContactPersonObject( $contactObjectData['organisatie'] = $organizationUuid; $contactObject->setObject($contactObjectData); $contactObject->setOrganisation($organizationUuid); - $objectMapper = $this->container->get('OCA\OpenRegister\Db\MagicMapper'); - $objectMapper->update($contactObject); + $this->magicMapper->update($contactObject); $this->logger->info( '[FLOW] Set missing organisatie field on contact person', [ @@ -2364,8 +2352,7 @@ private function createOrUpdateContactPersonObject( // Check if organization exists in organisation entity table. $organisationEntity = null; try { - $organisationMapper = $this->container->get('OCA\OpenRegister\Db\OrganisationMapper'); - $organisationEntity = $organisationMapper->findByUuid($organizationUuid); + $organisationEntity = $this->organisationMapper->findByUuid($organizationUuid); } catch (\OCP\AppFramework\Db\DoesNotExistException $e) { // Backup: org entity missing — create it now so user creation can proceed. $this->logger->info( @@ -2377,7 +2364,7 @@ private function createOrUpdateContactPersonObject( ); try { $voorzieningenConfig = $this->settingsService->getVoorzieningenConfig(); - $orgObject = $objectService->find( + $orgObject = $this->objectService->find( id: $organizationUuid, register: ($voorzieningenConfig['register'] ?? ''), schema: ($voorzieningenConfig['organisatie_schema'] ?? '') @@ -2456,8 +2443,7 @@ private function createOrUpdateContactPersonObject( ); try { - $objectMapper = $this->container->get('OCA\OpenRegister\Db\MagicMapper'); - $objectMapper->update($contactObject); + $this->magicMapper->update($contactObject); $this->logger->info( 'Contact saved with username', [ @@ -2620,8 +2606,7 @@ public function processSpecificContactPerson($contactObject): array { // Check if organization exists in organisation entity table. $organisationEntity = null; try { - $organisationMapper = $this->container->get('OCA\OpenRegister\Db\OrganisationMapper'); - $organisationEntity = $organisationMapper->findByUuid($organizationUuid); + $organisationEntity = $this->organisationMapper->findByUuid($organizationUuid); } catch (\OCP\AppFramework\Db\DoesNotExistException $e) { // Backup: org entity missing — create it now so user creation can proceed. $this->logger->info( @@ -2633,8 +2618,7 @@ public function processSpecificContactPerson($contactObject): array { ); try { $voorzieningenConfig = $this->settingsService->getVoorzieningenConfig(); - $objectService = $this->container->get('OCA\OpenRegister\Service\ObjectService'); - $orgObject = $objectService->find( + $orgObject = $this->objectService->find( id: $organizationUuid, register: ($voorzieningenConfig['register'] ?? ''), schema: ($voorzieningenConfig['organisatie_schema'] ?? '') @@ -2697,8 +2681,7 @@ public function processSpecificContactPerson($contactObject): array { // that may fail — but the user was already created successfully above. try { $contactObject->setObject($contactEntityObject); - $objectService = $this->container->get('OCA\OpenRegister\Service\ObjectService'); - $objectService->saveObject( + $this->objectService->saveObject( object: $contactObject, register: $register, schema: $contactSchema, @@ -3183,8 +3166,7 @@ private function updateOrganisationObjectOwner( $organisationObject->setOrganisation($organisationEntityUuid); // Save using MagicMapper directly to bypass validation and ensure metadata is persisted. - $objectMapper = $this->container->get('OCA\OpenRegister\Db\MagicMapper'); - $objectMapper->update($organisationObject); + $this->magicMapper->update($organisationObject); $this->logger->info( 'OrganizationSyncService: Successfully updated organisatie object owner and organisation', @@ -3298,8 +3280,7 @@ private function updateContactPersonObjectOwner( } // Save using MagicMapper directly to bypass validation and ensure metadata is persisted. - $objectMapper = $this->container->get('OCA\OpenRegister\Db\MagicMapper'); - $objectMapper->update($contactObject); + $this->magicMapper->update($contactObject); $this->logger->info( 'OrganizationSyncService: Successfully updated contactpersoon object owner and organisation',