# 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 prüfen.

## 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
