50dfca59e1
P1 Medien: eigener Admin-Bereich /admin/medien (Grid, Mehrfach-Upload, Drag&Drop, Alt-Text, URL kopieren, Loeschen). Upload konvertiert JPG/PNG via sharp zu WebP (Qualitaet 82, max 2000px), Original wird verworfen; WebP/SVG/GIF/AVIF unveraendert; Konvertierungsfehler -> Original behalten statt 500. media um alt/width/height erweitert. Wiederverwendbarer Medien-Picker (public/media-picker.js) ersetzt den URL-Prompt im Block-Editor, Produkt-Editor (Karte/Galerie/Varianten-Bild), Slides und Popups. JSON-Quelle /api/admin/media (session-gesichert). P2 Varianten: products.options_json + Tabelle product_variants. Produkt-Editor mit Options-Definition + Matrix-Generator (Preis-Override/Bestand/SKU/Bild/aktiv je Variante). PDP-Selektoren -> Variante; Cart/Checkout tragen sku+Options, Order-Item bekommt sku/variant, Variantenpreis serverseitig verifiziert. Produkte ohne Optionen unveraendert. P3 Litestream: Binary im Dockerfile, docker-entrypoint.sh (Restore+replicate nur bei LITESTREAM_REPLICA_URL, sonst reiner Node-Start), litestream.yml, Backup-Status unter Einstellungen, README + .env.example. P4 Analytics: Bestseller, Top-Suchbegriffe, Umsatz/Quelle, Umsatz-Zeitreihe, AOV, Wiederkaufrate, Lager-Warnungen. Neue Dep sharp. +19 Unit-Tests (49 gesamt gruen), Build + Smoke (P1-P4) gruen.
27 lines
1.1 KiB
Bash
Executable File
27 lines
1.1 KiB
Bash
Executable File
#!/bin/sh
|
|
set -e
|
|
|
|
: "${DB_PATH:=/data/hdc.db}"
|
|
export DB_PATH
|
|
|
|
APP_CMD="node ./dist/server/entry.mjs"
|
|
|
|
# Litestream nur nutzen, wenn ein Replica-Ziel konfiguriert ist.
|
|
if [ -n "$LITESTREAM_REPLICA_URL" ] && command -v litestream >/dev/null 2>&1; then
|
|
echo "[entrypoint] Litestream aktiv — Replica: $LITESTREAM_REPLICA_URL"
|
|
# DB aus dem Backup wiederherstellen, falls lokal noch keine existiert.
|
|
if [ ! -f "$DB_PATH" ]; then
|
|
echo "[entrypoint] Keine lokale DB unter $DB_PATH — versuche Restore aus Replica …"
|
|
: "${LITESTREAM_CONFIG:=/app/litestream.yml}"
|
|
litestream restore -config "$LITESTREAM_CONFIG" -if-replica-exists "$DB_PATH" || echo "[entrypoint] Kein Replica gefunden, starte mit frischer DB."
|
|
fi
|
|
exec litestream replicate -config "$LITESTREAM_CONFIG" -exec "$APP_CMD"
|
|
else
|
|
if [ -n "$LITESTREAM_REPLICA_URL" ]; then
|
|
echo "[entrypoint] LITESTREAM_REPLICA_URL gesetzt, aber litestream-Binary fehlt — starte ohne Backup."
|
|
else
|
|
echo "[entrypoint] Kein Litestream-Replica konfiguriert — normaler Start ohne Backup."
|
|
fi
|
|
exec $APP_CMD
|
|
fi
|