Files
breadcrumb-the-shire/docs/howto-globale-suche.md
fs 0e86925464 refactor: rename lib/ to core/ for clearer core-module separation
Rename the top-level lib/ directory to core/ so the project root
immediately communicates which code is core platform and which lives
in modules/. PHP namespaces (MintyPHP\*) are unchanged — only the
Composer PSR-4 path mapping moves from lib/ to core/.

Module-internal lib/ directories (modules/*/lib/) are untouched.

Updated across the full stack:
- composer.json PSR-4 mapping
- bootstrap entry points (web/index.php, bin/*, tests/bootstrap.php)
- tooling configs (phpstan.neon, phpunit.xml, php-cs-fixer)
- 26 architecture contract tests
- enforcement-policy, guard-catalog, quality-gates
- all documentation (CLAUDE.md, README, 25 docs/, .agents/skills/)
- bin/qa-extended.sh search paths
- .claude/settings.local.json permission paths

Workflow: .agents/runs/CORE-LIB-RENAME-001/ (Analyst → Planner →
Executor → Code Review (4 findings fixed) → Security Review →
Acceptance Test → Finalizer)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-13 23:20:42 +02:00

73 lines
2.1 KiB
Markdown

# Globale Suche erweitern
Letzte Aktualisierung: 2026-04-01
## Ziel
Neue Search-Resource korrekt in Aside-Preview und Vollsuche integrieren.
## Architektur
Zwei Endpunkte teilen dieselbe Konfiguration:
- Aside-Preview: `pages/admin/search/data().php`
- Vollsuche: `pages/search/data().php`
Zentrale Fassade:
- `core/Support/SearchConfig.php`
- Laufzeit-Orchestrierung: `core/Service/Search/SearchDataService.php`
- SQL-Ausführung: `core/Repository/Search/SearchQueryRepository.php`
Provider:
- SQL-Definitionen: `SearchSqlResourceProvider`
- UI-Meta (Icons/URLs): `SearchUiMetaProvider`
- Mapping: `SearchItemMapperProvider`
- Spezialquellen (`docs`, `hotkeys`): `SearchSpecialResourceProvider`
- Modul-Erweiterungen: `SearchResourceProvider` via Modul-Manifest `search_resources`
## Laufzeitpfad
1. `pages/admin/search/data().php` oder `pages/search/data().php`
2. `SearchDataService` baut Scope/Permission + Resource-Iteration
3. `SearchQueryRepository` führt `countSql`/`previewSql`/`resultSql` aus
4. `SearchConfig` mapped auf API/UI-Items
## Standardablauf für neue Resource
1. Resource in `SearchSqlResourceProvider::resources()` ergänzen:
- `key`, `label`, `permission`
- `countSql`, `previewSql`, `resultSql`
2. Bei Tenant-Daten `tenantScopeFilters()` ergänzen.
3. UI ergänzen:
- `iconForKey()`
- `listUrl()`
4. Mapping ergänzen:
- `mapPreviewItem()`
- `mapResultItem()`
5. Bei Modul-Resources: Provider-Klasse in `module.php` unter `search_resources` registrieren.
6. i18n-Labels pruefen.
## Wichtige Regeln
- Permission immer serverseitig in der Resource setzen.
- Tenant-Scope nicht nur im UI lösen.
- Preview immer mit `limit ?` und ohne sensitive Daten.
## Docs-Resource
Die Entwicklerdoku läuft als Spezialresource `docs`:
- Quelle: `DocsCatalogService::search()`
- Permission: `docs.view`
- Ziel: `admin/docs/{slug}#anchor`
## Check vor Merge
1. `php -l core/Support/SearchConfig.php`
2. `php -l core/Support/Search/*.php`
3. Preview testen (`admin/search/data?q=...`)
4. Vollsuche testen (`/search?search=...`)
5. Permission/Scope mit reduziertem User prüfen