refactor: align addressbook module to MintyPHP\Module\AddressBook namespace

Migrates addressbook service classes from core namespace
(MintyPHP\Service\AddressBook\*) to proper module namespace
(MintyPHP\Module\AddressBook\Service\*), consistent with the
bookmarks module pattern.

Moved to module:
- AddressBookService → modules/addressbook/lib/Module/AddressBook/Service/
- AddressBookServicesFactory → modules/addressbook/lib/Module/AddressBook/Service/
- AddressBookServiceTest → modules/addressbook/tests/Module/AddressBook/Service/
- Pages, templates, CSS, JS all in module directory

All module PHP classes now live under MintyPHP\Module\<Name>\*,
enforced by ModuleStructureContractTest::testModuleClassesUseModuleNamespace.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-03-18 22:20:54 +01:00
parent 4871c6032e
commit c328067aa6
24 changed files with 373 additions and 114 deletions

View File

@@ -14,9 +14,7 @@ use FilesystemIterator;
* Intentionally allowed in Core (not flagged):
* - PermissionService::ADDRESS_BOOK_VIEW (general people-visibility gate)
* - OperationsAuthorizationPolicy / UiCapabilityMap / UserAuthorizationPolicy (authorization)
* - AddressBookService / AddressBookServicesFactory (business logic, V1 shared-db)
* - pages/address-book/* (page files, not hardcoded integrations)
* - config/assets.php (asset pipeline not yet modular)
* - modules/addressbook/* (module-owned runtime, pages/assets/providers)
* - i18n translation files
* - Module directory (lib/Module/, modules/)
* - Test files
@@ -90,10 +88,7 @@ final class NoAddressBookHardcodingTest extends TestCase
}
/**
* Aside panel template must not have hardcoded People panel.
*
* Note: The search panel legitimately contains data-search-key="address-book"
* for the global search results — that is NOT a hardcoded People panel.
* Aside panel template must not have hardcoded People panel/search entries.
*/
public function testAsideHasNoHardcodedPeoplePanel(): void
{
@@ -116,6 +111,20 @@ final class NoAddressBookHardcodingTest extends TestCase
$content,
'Aside still defines $peopleGroups as a standalone variable'
);
self::assertStringNotContainsString(
'data-search-key="address-book"',
$content,
'Aside still has static address-book search item markup'
);
}
public function testCoreNoLongerContainsAddressBookServiceDirectory(): void
{
$coreServiceDir = dirname(__DIR__, 2) . '/lib/Service/AddressBook';
self::assertDirectoryDoesNotExist(
$coreServiceDir,
'Addressbook service classes should live in modules/addressbook/lib, not in Core lib/Service'
);
}
/**