// SRC-06: gemeinsamer Aufbau der bool.must-Liste für Such- und // Facetten-Route — statische Feldnamen, keine dynamische SQL-/Klausel- // Bildung (gleiche Konvention wie mail/internal/search/facets.go // buildFilteredMust). import { isFacetField } from "./facetFields"; const FIELD_TENANT_SLUG = "tenant_slug"; export interface AppliedFilter { field: string; value: string; } export function parseFilterParams(values: string[]): AppliedFilter[] { const filters: AppliedFilter[] = []; for (const raw of values) { const sep = raw.indexOf(":"); if (sep <= 0) continue; const field = raw.slice(0, sep); const value = raw.slice(sep + 1); if (!isFacetField(field) || value === "") continue; filters.push({ field, value }); } return filters; } export function buildMust(tenantSlug: string, query: string, filters: AppliedFilter[]): Record[] { const must: Record[] = [{ equals: { [FIELD_TENANT_SLUG]: tenantSlug } }]; if (query) { must.push({ query_string: query }); } for (const f of filters) { must.push({ equals: { [f.field]: f.value } }); } return must; }