Zum Hauptinhalt springen

Shopify-Stores

Zweck

Shopify-Stores verbinden einen externen Shopify-Shop mit SpeamCore. Pro Store synchronisieren wir Produkte, Bestellungen und Kunden — und protokollieren jeden Sync-Lauf in Sync-Logs. Der OAuth-Flow erfolgt einmalig beim Anlegen des Stores; Shop-Stammdaten (shopName, shopEmail, shopOwner, shopCurrency, shopTimezone) werden anschliessend automatisch von Shopify gepusht.

Voraussetzungen

- Shopify-Tenant-Admin-Berechtigung — der OAuth-Flow erfordert Zustimmung im Shopify Admin. - SpeamCore-App ist im Shopify Marketplace registriert (Tenant-uebergreifend). - Berechtigung `create:ShopifyStore`.

Berechtigungen (CASL)

Frontend-Page-Guard:

ActionSubjectKeycloak-Rolle
viewFE_ShopifyStore, ShopifyStore

Tab-Subjects:

TabSub-PfadSubject
Produkt-Zuweisungen/shopify-stores/:id/product-assignmentsShopifyProductAssignment:view
Produkt-Mappings/shopify-stores/:id/product-mappingsShopifyProductMapping:view
Bestellungen-Mappings/shopify-stores/:id/order-mappingsShopifyOrderMapping:view
Kunden-Mappings/shopify-stores/:id/customer-mappingsShopifyCustomerMapping:view
Sync-Logs/shopify-stores/:id/sync-logsShopifySyncLog:view

Schritt-für-Schritt-Anleitung

Store verbinden

  1. Shopify-Stores (/shopify-stores) → + Neu.
  2. shopDomain eingeben (z. B. meine-firma.myshopify.com).
  3. OAuth starten — Klick auf ShopifyOAuthButton öffnet die Shopify-Consent-URL.
  4. Berechtigungen im Shopify Admin bestaetigen.
  5. SpeamCore wird zurueckgeleitet, der Store wird angelegt, shopName/shopEmail/shopOwner/shopCurrency/shopTimezone werden automatisch befuellt.

Aktiv schalten / Sync-Stichtag setzen

  1. isActive auf true setzen.
  2. syncStartDate setzen — alle Bestellungen vor diesem Datum werden ignoriert.
  3. Manuellen Sync über ShopifySyncActions triggern (oder warten auf den geplanten Cron-Lauf).

Produkte zuordnen — Tab „Produkt-Zuordnungen" (Juni 2026)

Im Tab Produkt-Zuordnungen (/shopify-stores/:id/product-assignments) legen Sie fest, welche Produkte in den Shop synchronisiert werden — auf vier Ebenen (beliebig kombinierbar):

EbeneFeldWirkung
EinzelproduktproductIdgenau dieses Produkt
WarengruppeproductGroupIdder gesamte Teilbaum der Gruppe (alle enthaltenen Produkte)
HerstellermanufacturerIdalle Produkte dieses Herstellers
LieferantsupplierIdalle Produkte dieses Lieferanten

Hersteller- und Lieferant-Ebene sind neu — so lässt sich ein komplettes Sortiment mit einem Eintrag freigeben, statt jedes Produkt einzeln. Beim Sync entfaltet SpeamCore alle Zuordnungen zur Produktliste und legt/aktualisiert je Produkt ein Produkt-Mapping (Shopify-Produkt-/Varianten-ID, lastSyncAt). Ein Filter-Panel (Produkt-Nr., Titel, Hersteller-Artikelnummer) hilft bei der Auswahl; bereits zugeordnete Einträge werden ausgeblendet.

Unterschied: Produkt-Zuordnungen = was synchronisiert wird (Konfiguration). Produkt-Mappings = Ergebnis pro synchronisiertem Produkt (Sync-Status).

OAuth-Anbindung, Shopify-Webhooks und Shop-Metadaten laufen seit Juni 2026 über die zentrale **Master-Plattform**: Der Master nimmt die Shopify-Verbindung und eingehende Webhooks an und reicht Token + Shop-Infos an den Mandanten weiter; der Mandant synchronisiert lokal und meldet die **Sync-Zeitpunkte** an den Master zurück. Für Sie als Anwender ändert sich der Ablauf (Store verbinden → zuordnen → synchronisieren) nicht.

Mappings pflegen

  • Produkt-Mappings: Zuordnung Shopify-Produkt-Felder zu SpeamCore-Produkt-Feldern.
  • Bestellungen-Mappings: Zahlungsverhalten, Versandarten, Statusuebersetzung.
  • Kunden-Mappings: Bestehender SpeamCore-Kunde vs. neue Anlage.

Listenansicht — shopify-stores

Toolbar (Detail-Seite)

Schlanke Toolbar oben rechts:

IconAktion (aria-label)CASLWirkung
ZurückgehenZurück zur Liste.
🏠Zur Startseite gehenSpringt auf das Dashboard / /.
⏮/◀/▶/⏭PaginationNavigation durch die gefilterte Liste — Massen-Bearbeitung ohne Liste-Sprung.

Wie auf jeder Detail-Seite verfuegbar — siehe Floating-Quickbar:

  • KAL. (Mini-Kalender)
  • ZEIT (Persoenliche Wochen-Arbeitszeit)
  • ARBEIT (Eigene bevorstehende Aufträge)

UI-Elemente

Button: „ShopifyOAuthButton"

Initiiert OAuth-Flow. Speichert Nonce, leitet zu Shopify-Consent-URL.

Komponente: ShopifyConnectionStatus

Zeigt: aktiver Status (isActive), letzte Sync-Zeitpunkte (lastProductSyncAt, lastOrderSyncAt, lastCustomerSyncAt), aktuelle Fehler.

Komponente: ShopifySyncActions

Buttons für manuellen Sync-Trigger pro Datentyp (Produkte / Bestellungen / Kunden).

Felder und Eingaben

FeldnamePflichtDatentypBeschreibungWirkung beim AusfuellenVoraussetzung
shopDomainja (vor OAuth)StringShopify-Domain, z. B. meine-firma.myshopify.com.Triggert beim OAuth-Start die Redirect-URL.Shop muss existieren.
isActiveneinBoolean (Switch)Sync aktiv?true: regelmaessiger Sync laeuft. false: pausiert.
syncStartDateneinDATEStichtag für Sync.Bestellungen/Produkte vor diesem Datum werden ignoriert.Liegt nicht in der Zukunft.
shopNameString (read-only)Anzeigename des Shops.Wird von Shopify gepusht.OAuth abgeschlossen.
shopEmailString (read-only)Shop-Owner-E-Mail.Wird gepusht.
shopOwnerString (read-only)Owner-Name.Wird gepusht.
shopCurrencyString (read-only)Default-Waehrung des Shops.Wird beim Order-Mapping verwendet.
shopTimezoneString (read-only)Zeitzone des Shops.Steuert Datums-Konvertierung.
apiVersionString (read-only)Shopify-API-Version.Wird automatisch durch Shopify gepusht.
scopesString (read-only)Erteilte OAuth-Scopes.Bestimmt verfuegbare Sync-Methoden.
installedAtDatetime (read-only)Installations-Zeitpunkt.Wird bei OAuth gesetzt.
nonceString (intern)OAuth-Nonce zur Validierung.Wird vor OAuth-Redirect gesetzt, beim Callback geprüft.

Workflows und Zustaende

Anlege-Pattern

ShopifyStoreProductMapping haelt die Verknuepfung zwischen einem SpeamCore-Product und dem entsprechenden Eintrag im Shopify-Shop:

  • shopifyStoreId — welcher Shop.
  • productId — SpeamCore-Produkt.
  • shopifyProductId — Produkt-ID im Shopify-Shop (extern).
  • lastSyncedAt — Zeitstempel des letzten Sync.

Sync-Logik laeuft via Hintergrund-Job (siehe Sync-Jobs) — Bestand und Preise werden zwischen SpeamCore (Master) und Shopify (Storefront) abgeglichen.

Wiederverwendbare Konzepte

Verknuepfungen zu anderen Modulen

  • ProdukteShopifyProductAssignment und ShopifyProductMapping verbinden SpeamCore-Produkte mit Shopify-Produkten.
  • Verkaufsbelege — Shopify-Bestellungen werden über ShopifyOrderMapping zu SalesDocuments transformiert.
  • KundenShopifyCustomerMapping verbindet SpeamCore-Kunden und Shopify-Kunden.
  • Sync-Logs — Audit-Trail aller Sync-Operationen.

Häufige Fehler und Lösungen

FehlerLösung
OAuth-Flow bricht abBerechtigungen im Shopify Admin prüfen; Nonce-Validierung im BE prüfen.
Sync laeuft nichtisActive = false; apiVersion veraltet; Token abgelaufen — Store neu autorisieren.
Bestellungen vor Stichtag fehlensyncStartDate zurueckdatieren und nächsten Sync abwarten.
Mapping-Fehler im Sync-LogField-Mapping prüfen; nicht-mappbare Felder ergaenzen.

API/Schnittstellen

MethodeEndpointZweckCASL
GET/api/shopify-storesListeview ShopifyStore
GET/api/shopify-stores/:idDetailview ShopifyStore
POST/api/shopify-storesAnlegencreate ShopifyStore
PATCH/api/shopify-stores/:idÄndernupdate ShopifyStore
DELETE/api/shopify-stores/:idSoft-Deletedelete ShopifyStore
GET/api/shopify-stores/:id/sync-logsSync-Auditview ShopifySyncLog
GET/api/shopify-product-assignments?filter[shopifyStoreId]Zuordnungen lesenview ShopifyProductAssignment
POST/api/shopify-product-assignmentsZuordnung anlegen (Produkt/Gruppe/Hersteller/Lieferant)create ShopifyProductAssignment
DELETE/api/shopify-product-assignments/:idZuordnung entfernendelete ShopifyProductAssignment

Versionshinweise

  • 2026-06-30: Tab Produkt-Zuordnungen dokumentiert — vier Zuordnungs-Ebenen inkl. Hersteller und Lieferant (ShopifyProductAssignment), Teilbaum-Sync; Hinweis, dass OAuth/Webhooks/Shop-Metadaten über die SpeamCore-Master-Plattform laufen. Verifiziert an shopifyProductAssignment.model.ts, shopifyStore.model.ts, shopifyProductAssignment.router.ts.
  • 2026-04-29: Initiale Veroeffentlichung mit FE-Tiefen-Standard.