# A24 Shopify Search API

Microservice, der Shopify-Kollektionen und Produkt-Vendoren (Marken) indexiert und als **Predictive-Search-Ranking-Endpoint** für das Shopify-Theme bereitstellt – passend zum Verfahren von `a24.dev.kogniflow.info`.

## Architektur

```
Theme (theme.js)
  └─ hybridFetch()
       ├─ /search/suggest.json          (Shopify nativ: Produkte, Queries, Artikel)
       └─ /api/search-suggest?q=<term>  ← DIESER Service (Marken + Kollektionen)
```

Der Service liefert `[{type, label, url, detail, rank}]` – exakt das Format, das `buildHTML()` im Theme erwartet.

## Setup

### 1. Voraussetzungen

- Node.js ≥ 18
- Shopify Custom App mit Scopes: `read_products`, `read_collections`
- Admin API Access Token

### 2. Abhängigkeiten installieren

```bash
cd sf_app/search-api
npm install
```

### 3. Konfiguration

```bash
cp .env.example .env
```

`.env` befüllen:

```
SHOPIFY_STORE=waldmeister-solutions.myshopify.com
SHOPIFY_ADMIN_TOKEN=shpat_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
PORT=3456
CORS_ORIGINS=https://waldmeister-solutions.myshopify.com,https://www.aussenborder24.de
ADMIN_TOKEN=geheimes-token-fuer-admin-ui   # optional, leer = kein Schutz
```

### 4. Starten

```bash
npm start
# oder im Entwicklungsmodus (auto-restart):
npm run dev
```

### 5. Theme-Einstellung

Im Shopify Theme Customizer → **Theme Settings** → Feld **`search_endpoint`**:

```
https://<dein-server>/api/search-suggest
```

Oder direkt in `config/settings_data.json`:

```json
{
  "current": {
    "search_endpoint": "https://<dein-server>/api/search-suggest",
    "search_endpoint_timeout": 1200
  }
}
```

## Endpoints

| Method | Path | Beschreibung |
|--------|------|--------------|
| `GET`  | `/api/search-suggest?q=<term>` | Vorschläge (Theme-Endpoint) |
| `GET`  | `/health` | Status + Cache-Info |
| `GET`  | `/admin` | Admin-UI |
| `POST` | `/admin/rank` | Search-Rank setzen |
| `POST` | `/admin/sync` | Manueller Re-Sync |

## Ranking

Jede Marke und Kollektion erhält einen Basis-Rank:
- Marken: `100 + searchRank`
- Kollektionen: `80 + searchRank`
- Beginnt mit Query: `+20`
- Exakte Übereinstimmung: `+50`

Der `searchRank` wird manuell in der Admin-UI gepflegt (0 = Standard, 100 = sehr prominent).

## Datensync

- Beim Start: sofortiger Sync von Shopify Admin API
- Danach: alle 10 Minuten automatisch (konfigurierbar via `CACHE_REFRESH_MS`)
- Manuell: `POST /admin/sync` oder Button in Admin-UI

## Dateien

```
search-api/
├── index.js          # Express-Server + Admin-UI
├── shopify-sync.js   # Shopify Admin API Sync
├── search.js         # Ranking & Suchlogik
├── db.js             # SQLite (Logs + Ranks)
├── config.js         # Konfiguration aus .env
├── package.json
├── .env.example
├── data/             # SQLite-Datenbankdatei (auto-erstellt)
└── README.md
```
