/projekte/mpa-nutrition-shop/Fullstack/Live/04/2024 → laufend/Alleinentwickler

MPA Nutrition Shop

Shop-System mit automatisierter Bestellabwicklung statt Bestellungen per Nachricht.

Privates Projekt

Kein öffentlicher Zugang — der Shop läuft im Betrieb des Anbieters.

PostgreSQLREST APIsZahlungsanbindungVersandanbindungWebhooks
project dossier

Snapshot

mpa-nutrition-shop

Alleinentwickler

category

Fullstack

status

LIVE

stack

5 tech

features

3
PostgreSQLREST APIsZahlungsanbindungVersandanbindungWebhooks
01

Story

Problem

Bestellungen liefen manuell über Nachrichten und Tabellen.

Lösung

Shop mit Produkt- und Kundenverwaltung, automatisierter Bestellabwicklung sowie Zahlungs- und Versandanbindung.

Learnings

Die Fehlerquellen lagen in den Zahlungs- und Versandstatus, nicht im Bestellvorgang selbst.

02

Key Features

features.md
  • →Bestellabwicklung vom Eingang bis zum Versandstatus
  • →Angebundene Zahlungs- und Versanddienstleister
  • →Auswertungen zu Umsatz und Bestellhäufigkeit
03

Über das Projekt

README.md

Online-Shop mit Produkt- und Kundenverwaltung. Bestellungen laufen vom Eingang bis zum Versandstatus automatisch durch, Zahlungs- und Versanddienstleister sind angebunden. Auswertungen zu Umsatz und Bestellhäufigkeit dienen der Sortimentsplanung.

04

Meine Rolle

rolle
rolle:Alleinentwickler
  • Bestellablauf als Zustandsmaschine inklusive Storno- und Rücksendezweigen
  • Anbindung von Zahlungs- und Versanddienstleister mit idempotenter Verarbeitung
  • Produkt- und Kundenverwaltung
  • Auswertung zu Umsatz und Bestellhäufigkeit aus den Bestelldaten
05

Architektur

architecture.md

Der Kern ist die Bestellung als Zustandsmaschine. Eine Bestellung ist kein Datensatz, der irgendwann als erledigt markiert wird, sondern durchläuft feste Zustände: eingegangen, bezahlt, kommissioniert, versandt, zugestellt — und daneben die unbequemen Zweige: Zahlung fehlgeschlagen, Zahlung nachträglich eingegangen, Stornierung, Rücksendung.

Zahlung und Versand hängen als externe Dienste daran. Beide melden asynchron zurück: Der Zahlungsdienst sagt später, ob das Geld angekommen ist, der Versanddienstleister später, wo das Paket ist. Der Shop führt deshalb je Bestellung zwei zusätzliche Zustände, die nicht seine eigenen sind — und muss damit umgehen, dass sie verspätet, mehrfach oder gar nicht eintreffen.

Darunter liegen Produkt- und Kundenverwaltung sowie die Auswertung zu Umsatz und Bestellhäufigkeit, die der Sortimentsplanung dient. Die Auswertung liest aus denselben Bestelldaten — es gibt keine zweite Tabelle, die jemand pflegen müsste.

Bestellabwicklung

Feste Zustände vom Eingang bis zum Versandstatus, inklusive der Zweige für fehlgeschlagene Zahlung, Stornierung und Rücksendung.

PostgreSQL

Produkt- und Kundenverwaltung

Sortiment, Preise und Kundenstamm als Grundlage für Bestellung und Auswertung.

PostgreSQLREST APIs

Zahlungsanbindung

Externer Zahlungsdienst, der asynchron zurückmeldet. Die Bestellung gilt erst als bezahlt, wenn diese Meldung da ist.

Webhooks

Versandanbindung

Übergabe an den Versanddienstleister und Rücklauf des Sendungsstatus in die Bestellung.

REST APIsWebhooks

Auswertung

Umsatz und Bestellhäufigkeit direkt aus den Bestelldaten — Grundlage für die Sortimentsplanung.

PostgreSQL
06

Herausforderungen

Die Fehler lagen nicht im Bestellvorgang
Problem

Der Weg vom Warenkorb zur Bestellung war schnell stabil. Was immer wieder brach, waren die Status von außerhalb: Zahlungsmeldungen, die zweimal kamen, Versandstatus, die gar nicht kamen, und Bestellungen, die dazwischen hängen blieben.

Lösung

Beide Fremdstatus als eigene Felder mit eigenem Verlauf führen, statt sie in den Bestellstatus zu mischen. Eingehende Meldungen werden idempotent verarbeitet — dieselbe Meldung zweimal ändert nichts. Bestellungen ohne Rückmeldung fallen auf, statt still liegen zu bleiben.

Von Nachrichten und Tabellen zu einem System
Problem

Vorher liefen Bestellungen über Nachrichten und Tabellen. Jede Bestellung war Handarbeit, und was tatsächlich verkauft wurde, ließ sich nur durch Nachzählen beantworten.

Lösung

Ein durchgehender Ablauf mit festen Zuständen, an dem Zahlung und Versand hängen. Die Auswertung liest aus denselben Daten — damit beantwortet sich die Sortimentsfrage nebenbei, statt eine eigene Aufgabe zu sein.

07

Technologie-Entscheidungen

PostgreSQL

Objekt-relationale Open-Source-Datenbank mit JSONB, FTS und reicher Erweiterbarkeit.

database
REST APIs

Projektabhängigkeit

Zahlungsanbindung

Projektabhängigkeit

Versandanbindung

Projektabhängigkeit

Webhooks

Projektabhängigkeit

08

Verwandte Projekte