% ============================================================================= % Analyse und Planung eines Custom E-Commerce Shopsystems % B2C & B2B -- Weltweiter Einsatz % Erstellt: April 2026 % ============================================================================= \documentclass[a4paper,12pt]{article} % --- Sprache & Encoding --- \usepackage[utf8]{inputenc} \usepackage[T1]{fontenc} \usepackage[ngerman]{babel} \usepackage{csquotes} % --- Layout --- \usepackage[margin=2.5cm]{geometry} \usepackage{fancyhdr} \usepackage{titlesec} \usepackage{microtype} \usepackage{parskip} % --- Tabellen --- \usepackage{booktabs} \usepackage{longtable} \usepackage{tabularx} \usepackage{array} \usepackage{multirow} % --- Farben --- \usepackage[table,dvipsnames]{xcolor} \definecolor{mustgreen}{HTML}{2E7D32} \definecolor{shouldblue}{HTML}{1565C0} \definecolor{canyellow}{HTML}{F9A825} \definecolor{notgray}{HTML}{757575} \definecolor{stackhighlight}{HTML}{E3F2FD} \definecolor{sectioncolor}{HTML}{1A237E} \definecolor{linkcolor}{HTML}{0D47A1} % --- Listen --- \usepackage{enumitem} % --- Code --- \usepackage{listings} \lstset{ basicstyle=\ttfamily\small, breaklines=true, frame=single, backgroundcolor=\color{gray!5}, rulecolor=\color{gray!30}, } % --- Sonstiges --- \usepackage{graphicx} \usepackage{pdflscape} \usepackage{hyperref} % --- Hyperref-Setup --- \hypersetup{ colorlinks=true, linkcolor=linkcolor, urlcolor=linkcolor, citecolor=linkcolor, pdftitle={Analyse und Planung eines Custom E-Commerce Shopsystems}, pdfsubject={Technologie-Evaluierung, Feature-Analyse und Architekturempfehlung}, pdfkeywords={E-Commerce, B2C, B2B, NestJS, Next.js, PostgreSQL, Shopsystem}, } % --- Header/Footer --- \pagestyle{fancy} \fancyhf{} \fancyhead[L]{\small\textit{Shopsystem-Analyse}} \fancyhead[R]{\small\textit{B2C \& B2B}} \fancyfoot[C]{\thepage} \renewcommand{\headrulewidth}{0.4pt} % --- Custom Commands --- \newcommand{\must}{\textcolor{mustgreen}{\textbf{PFLICHT}}} \newcommand{\should}{\textcolor{shouldblue}{\textbf{SOLL}}} \newcommand{\can}{\textcolor{canyellow}{\textbf{KANN}}} \newcommand{\notneed}{\textcolor{notgray}{\textbf{NICHT BENÖTIGT}}} \newcommand{\pro}{\textcolor{mustgreen}{\checkmark}} \newcommand{\con}{\textcolor{red}{$\times$}} \newcommand{\neutral}{\textcolor{canyellow}{$\sim$}} % --- Abschnittsformatierung --- \titleformat{\section} {\Large\bfseries\color{sectioncolor}}{\thesection}{1em}{} \titleformat{\subsection} {\large\bfseries\color{sectioncolor!80}}{\thesubsection}{1em}{} \titleformat{\subsubsection} {\normalsize\bfseries\color{sectioncolor!60}}{\thesubsubsection}{1em}{} % --- Neue Spaltentypen --- \newcolumntype{L}[1]{>{\raggedright\arraybackslash}p{#1}} \newcolumntype{C}[1]{>{\centering\arraybackslash}p{#1}} % ============================================================================= \begin{document} % --- Titelseite --- \begin{titlepage} \centering \vspace*{3cm} {\Huge\bfseries\color{sectioncolor} Analyse und Planung eines\\[0.3em] Custom E-Commerce Shopsystems\par} \vspace{1.5cm} {\Large Technologie-Evaluierung, Feature-Analyse\\[0.3em] und Architekturempfehlung\par} \vspace{1cm} {\large\textbf{B2C \& B2B -- Weltweiter Einsatz}\par} \vspace{3cm} \begin{tabular}{ll} \textbf{Dokumenttyp:} & Technische Analyse \\ \textbf{Version:} & 1.0 \\ \textbf{Datum:} & April 2026 \\ \textbf{Status:} & Entwurf \\ \end{tabular} \vfill {\small Dieses Dokument dient als Entscheidungsgrundlage für die Technologieauswahl und Feature-Priorisierung eines maßgeschneiderten E-Commerce-Systems.} \end{titlepage} % --- Inhaltsverzeichnis --- \setcounter{tocdepth}{3} \tableofcontents \newpage % ============================================================================= % KAPITEL 1: EINLEITUNG % ============================================================================= \section{Einleitung} \label{sec:einleitung} \subsection{Projektzielsetzung} Ziel dieses Projekts ist die Entwicklung eines maßgeschneiderten E-Commerce-Shopsystems, das sowohl B2C- (Business-to-Consumer) als auch B2B-Geschäftsmodelle (Business-to-Business) unterstützt. Das System soll weltweit einsetzbar sein und sich durch eine moderne, skalierbare Architektur auszeichnen. Im Gegensatz zu bestehenden SaaS-Lösungen (Shopify, WooCommerce) oder Open-Source-Plattformen (Magento, PrestaShop) bietet ein Custom-System folgende Vorteile: \begin{itemize}[leftmargin=2em] \item \textbf{Volle Kontrolle} über Funktionalität, Datenhoheit und Geschäftslogik \item \textbf{Keine GMV-Gebühren} oder plattformabhängige Einschränkungen \item \textbf{Maßgeschneiderte B2B-Workflows}, die in Standard-Plattformen oft fehlen \item \textbf{Skalierbarkeit} ohne Plattform-Limits \item \textbf{Unabhängigkeit} von Drittanbieter-Roadmaps und Lizenzänderungen \end{itemize} \subsection{Systemarchitektur -- Überblick} Das System besteht aus drei Hauptkomponenten: \begin{description}[leftmargin=2em, labelwidth=2em] \item[Backend] RESTful API (optional GraphQL) mit Geschäftslogik, Datenbankzugriff, Authentifizierung und Integration externer Dienste (Zahlungen, Versand, Steuern). \item[Frontend] Server-Side-Rendered (SSR) Webshop für Endkunden (B2C) und Geschäftskunden (B2B) mit optimierter Performance und SEO. \item[Admin] Verwaltungsoberfläche für Produkte, Bestellungen, Kunden, Einstellungen und Reporting -- separates Deployment mit eigenem Berechtigungssystem. \end{description} \subsection{Methodik} Die Technologiebewertung in diesem Dokument basiert auf folgenden Kriterien: \begin{enumerate}[leftmargin=2em] \item \textbf{Ecosystem-Größe} -- Verfügbarkeit von Paketen, Plugins und Community-Support \item \textbf{TypeScript-Unterstützung} -- Typsicherheit für weniger Fehler und bessere DX \item \textbf{Skalierbarkeit} -- Fähigkeit, mit wachsender Last umzugehen \item \textbf{Time-to-Market} -- Geschwindigkeit der Entwicklung bis zum MVP \item \textbf{B2B-Eignung} -- Unterstützung komplexer Geschäftslogik \item \textbf{Internationalisierung} -- Multi-Sprache, Multi-Währung, Multi-Region \item \textbf{Entwickler-Verfügbarkeit} -- Einstellbarkeit von qualifizierten Entwicklern \item \textbf{Langfristige Wartbarkeit} -- Clean Code, Testbarkeit, Modularität \end{enumerate} Features werden nach dem MoSCoW-Prinzip priorisiert: \must{} (Pflicht), \should{} (Soll), \can{} (Kann) und \notneed{} (Nicht benötigt). % ============================================================================= % KAPITEL 2: TECHNOLOGIE-ANALYSE % ============================================================================= \newpage \section{Technologie-Analyse} \label{sec:technologie} \subsection{Backend-Frameworks} \label{subsec:backend} Die Wahl des Backend-Frameworks bestimmt maßgeblich die Architektur, Entwicklungsgeschwindigkeit und Skalierbarkeit des gesamten Systems. Für ein E-Commerce-System mit hohen Anforderungen an Datenintegrität, API-Performance und B2B-Geschäftslogik wurden fünf Frameworks evaluiert. \begin{table}[htbp] \centering \caption{Backend-Framework-Vergleich} \label{tab:backend} \rowcolors{2}{gray!8}{white} \small \begin{tabularx}{\textwidth}{l X X X X X} \toprule \textbf{Kriterium} & \textbf{NestJS} & \textbf{FastAPI} & \textbf{Django} & \textbf{Go (Gin)} & \textbf{Rust (Actix)} \\ \midrule Sprache & TypeScript & Python & Python & Go & Rust \\ Typsicherheit & Hoch & Mittel & Gering & Hoch & Sehr hoch \\ Performance & Gut & Gut & Mittel & Sehr gut & Exzellent \\ Ecosystem & Sehr groß & Groß & Sehr groß & Mittel & Klein \\ Lernkurve & Mittel & Niedrig & Mittel & Mittel & Hoch \\ B2B-Eignung & Sehr gut & Gut & Gut & Gut & Gut \\ Time-to-Market & Schnell & Schnell & Mittel & Mittel & Langsam \\ E-Commerce-Ref. & Medusa, Vendure & Saleor & Saleor & -- & -- \\ \bottomrule \end{tabularx} \end{table} \textbf{NestJS (Node.js/TypeScript)} ist die ausgereifteste Wahl für ein modernes E-Commerce-Backend. Es bietet Enterprise-Patterns wie Dependency Injection, modulare Architektur, Guards und Interceptors. Die TypeScript-Durchgängigkeit mit dem Frontend eliminiert Kontextwechsel. Medusa.js und Vendure -- zwei führende Open-Source-E-Commerce-Plattformen -- basieren auf diesem Stack. \textbf{FastAPI (Python)} überzeugt durch schnelle Entwicklung und native Async-Unterstützung. Ideal, wenn KI/ML-Features (Produktempfehlungen, Preisoptimierung) im Vordergrund stehen. \textbf{Django (Python)} bietet ein \enquote{Batteries-included}-Konzept mit eingebautem ORM, Admin-Panel und Sicherheitsfeatures. Saleor, eine der reifsten Open-Source-Commerce-Plattformen, nutzt Django als Basis. \textbf{Go} und \textbf{Rust} bieten überlegene Rohperformance, eignen sich jedoch eher für spezialisierte Microservices (Zahlungsverarbeitung, Echtzeit-Inventar) als für die gesamte Anwendungsschicht. Die kleineren Ecosystems erhöhen den Entwicklungsaufwand. \subsection{Frontend-Frameworks} \label{subsec:frontend} Für ein weltweit eingesetztes E-Commerce-Frontend sind Server-Side Rendering (SSR), SEO-Optimierung und Performance entscheidend. Vier Frameworks wurden verglichen. \begin{table}[htbp] \centering \caption{Frontend-Framework-Vergleich} \label{tab:frontend} \rowcolors{2}{gray!8}{white} \small \begin{tabularx}{\textwidth}{l X X X X} \toprule \textbf{Kriterium} & \textbf{Next.js (React)} & \textbf{Nuxt (Vue)} & \textbf{SvelteKit} & \textbf{Angular} \\ \midrule SSR/SSG & Exzellent (ISR) & Sehr gut & Gut & Gut \\ Ecosystem & Sehr groß & Groß & Wachsend & Groß \\ TypeScript & Nativ & Nativ & Nativ & Nativ \\ Bundle-Größe & Mittel & Mittel & Sehr klein & Groß \\ SEO & Exzellent & Sehr gut & Gut & Mittel \\ Komponentenbib. & Sehr viele & Viele & Wenige & Viele \\ Lernkurve & Mittel & Niedrig & Niedrig & Hoch \\ Arbeitsmarkt & Sehr groß & Groß & Klein & Groß \\ E-Commerce-Eig. & Exzellent & Sehr gut & Gut & Mittel \\ \bottomrule \end{tabularx} \end{table} \textbf{Next.js (React)} ist der klare Favorit für E-Commerce: \begin{itemize}[leftmargin=2em] \item \textbf{Incremental Static Regeneration (ISR)} ermöglicht gecachte Produktseiten mit automatischer Aktualisierung \item \textbf{Server Components} reduzieren die Bundle-Größe und verbessern die Ladezeit \item \textbf{Image Optimization} ist eingebaut -- kritisch für Produktfotografie \item Der \textbf{größte Arbeitsmarkt} vereinfacht die Teambildung \end{itemize} \textbf{Nuxt (Vue)} ist eine starke Alternative mit einfacherer Lernkurve, besonders in Europa beliebt. \textbf{SvelteKit} liefert die kleinsten Bundle-Größen -- ideal für Mobile-First-Strategien -- hat aber ein kleineres Ecosystem und weniger E-Commerce-spezifische Bibliotheken. \subsection{Datenbanken} \label{subsec:datenbanken} E-Commerce-Daten erfordern ACID-Konformität (Zahlungen, Bestellungen), flexible Attributspeicherung (Produktvarianten) und performante Suchabfragen. \begin{table}[htbp] \centering \caption{Datenbank-Vergleich} \label{tab:datenbanken} \rowcolors{2}{gray!8}{white} \small \begin{tabularx}{\textwidth}{l X X X} \toprule \textbf{Kriterium} & \textbf{PostgreSQL} & \textbf{MySQL 8.x} & \textbf{MongoDB} \\ \midrule ACID-Konformität & Vollständig & Vollständig & Eingeschränkt \\ JSON-Unterstützung & JSONB (indexiert) & JSON (eingeschränkt) & Nativ \\ Volltextsuche & Eingebaut & Eingebaut & Eingebaut \\ Relationale Integrität & Exzellent & Gut & Keine (FK) \\ Skalierbarkeit & Vertikal + Read-Replicas & Vertikal + Replikation & Horizontal (Sharding) \\ Analytische Queries & Sehr performant & Mittel & Langsam \\ Multi-Tenancy & Schemas möglich & Datenbanken & Collections \\ E-Commerce-Eignung & Exzellent & Gut & Eingeschränkt \\ ORM-Support & Prisma, TypeORM & Prisma, TypeORM & Mongoose \\ \bottomrule \end{tabularx} \end{table} \textbf{PostgreSQL} ist die empfohlene Wahl: \begin{itemize}[leftmargin=2em] \item JSONB-Spalten ermöglichen flexible Produktattribute bei voller Indexierung \item ACID-Konformität sichert finanzielle Datenintegrität \item 65--80\% kürzere Ausführungszeiten bei komplexen Filterabfragen gegenüber MongoDB \item Alle führenden E-Commerce-Plattformen (Medusa, Saleor, Vendure) nutzen PostgreSQL \end{itemize} \textbf{MongoDB} eignet sich \textit{nicht} als primäre Datenbank für E-Commerce aufgrund fehlender referentieller Integrität und langsamerer analytischer Abfragen. Die Flexibilität für Produktvarianten wird durch PostgreSQL JSONB gleichwertig abgedeckt. \subsection{Suchmaschinen} \label{subsec:suche} Eine leistungsfähige Produktsuche ist umsatzkritisch. Kunden, die die Suche nutzen, konvertieren 2--3x häufiger als Browser. Vier Suchmaschinen wurden verglichen. \begin{table}[htbp] \centering \caption{Such-Engine-Vergleich} \label{tab:suche} \rowcolors{2}{gray!8}{white} \small \begin{tabularx}{\textwidth}{l X X X X} \toprule \textbf{Kriterium} & \textbf{Meilisearch} & \textbf{Elasticsearch} & \textbf{Algolia} & \textbf{Typesense} \\ \midrule Antwortzeit & $<$50ms & $>$100ms & $<$100ms & $<$100ms \\ Setup & Einfach & Komplex & SaaS (einfach) & Einfach \\ Self-Hosted & Ja & Ja & Nein (SaaS) & Ja \\ Kosten & Kostenlos (OSS) & Kostenlos (OSS) & Teuer & Günstig \\ Tippfehler-Tol. & Ja (Standard) & Konfigurierbar & Ja & Ja \\ Facettierung & Ja & Ja (mächtig) & Ja & Ja \\ Mehrsprachigkeit & Gut & Sehr gut & Sehr gut & Gut \\ Eignung & Ideal für E-Com. & Enterprise & Premium & Gute Alternative \\ \bottomrule \end{tabularx} \end{table} \textbf{Meilisearch} ist die Empfehlung für den Start: In Rust geschrieben, liefert es Antwortzeiten unter 50ms mit eingebauter Tippfehlertoleranz. Self-Hosted und kostenlos, mit einfacher REST-API. Für Enterprise-Szenarien mit 10M+ Produkten kann später auf Elasticsearch gewechselt werden. \subsection{Zahlungsanbieter} \label{subsec:zahlung} Für weltweiten Einsatz muss das System mehrere Zahlungsanbieter unterstützen, da regionale Präferenzen stark variieren (SEPA in EU, Alipay in Asien, ACH in USA). \begin{table}[htbp] \centering \caption{Payment-Provider-Vergleich} \label{tab:zahlung} \rowcolors{2}{gray!8}{white} \small \begin{tabularx}{\textwidth}{l X X X X} \toprule \textbf{Kriterium} & \textbf{Stripe} & \textbf{Mollie} & \textbf{Adyen} & \textbf{PayPal} \\ \midrule Länder & 195+ & EU-fokussiert & 187 & Weltweit \\ Zahlungsmethoden & Sehr viele & EU-Methoden & 250+ & PayPal + Karten \\ B2B (Rechnung) & Stripe Billing & Klarna, SEPA & Ja & Nein \\ API-Qualität & Exzellent & Sehr gut & Gut & Mittel \\ PCI-Compliance & SAQ-A & SAQ-A & SAQ-A & SAQ-A \\ Gebühren (EU) & 1,5\% + 0,25\euro{} & 1,2--2,9\% & Interchange++ & 1,5--3,5\% \\ Marktplatz-Support & Connect & -- & for Platforms & -- \\ Eignung & Primär & EU-Ergänzung & Enterprise & Ergänzung \\ \bottomrule \end{tabularx} \end{table} \textbf{Empfehlung:} Stripe als primärer Provider (beste API, weltweite Abdeckung), Mollie als Ergänzung für europäische Zahlungsmethoden (iDEAL, Bancontact, EPS, Giropay). Für B2B-Kauf auf Rechnung: Stripe Billing oder Klarna B2B über Mollie. \textbf{Wichtig:} Keine eigene Zahlungsabwicklung implementieren -- die PCI-DSS-Anforderungen sind zu aufwändig. Stattdessen Tokenisierung über den jeweiligen Provider nutzen (SAQ-A Level). \subsection{Infrastruktur \& Deployment} \label{subsec:infrastruktur} \begin{table}[htbp] \centering \caption{Infrastruktur-Vergleich} \label{tab:infrastruktur} \rowcolors{2}{gray!8}{white} \small \begin{tabularx}{\textwidth}{l X X X X} \toprule \textbf{Kriterium} & \textbf{Hetzner} & \textbf{DigitalOcean} & \textbf{AWS} & \textbf{GCP} \\ \midrule Kosten & Sehr günstig & Günstig & Mittel--Hoch & Mittel \\ EU-Rechenzentren & Ja (DE, FI) & Ja & Ja & Ja \\ DSGVO & Exzellent (DE) & Gut & Gut & Gut \\ Managed Services & Begrenzt & Mittel & Sehr viele & Viele \\ Skalierbarkeit & Manuell & Gut & Exzellent & Exzellent \\ Kubernetes & Nein & Ja (DOKS) & Ja (EKS) & Ja (GKE) \\ Eignung Start & MVP/Start & Wachstum & Enterprise & Enterprise \\ \bottomrule \end{tabularx} \end{table} \textbf{Empfohlener Deployment-Stack:} \begin{itemize}[leftmargin=2em] \item \textbf{Containerisierung:} Docker + Docker Compose (Standard für alle Umgebungen) \item \textbf{CI/CD:} GitHub Actions (automatisierte Tests, Linting, Deployment) \item \textbf{Phase 1:} Hetzner Cloud oder DigitalOcean (kosteneffizient, EU-Rechenzentren) \item \textbf{Phase 2+:} Migration zu AWS ECS oder Kubernetes bei Bedarf \item \textbf{CDN:} Cloudflare (kostenloser Tier, DDoS-Schutz, globale Edge-Server) \item \textbf{Dateispeicher:} S3-kompatibel (MinIO self-hosted oder AWS S3) \end{itemize} % ============================================================================= % KAPITEL 3: EMPFOHLENER TECHNOLOGIE-STACK % ============================================================================= \newpage \section{Empfohlener Technologie-Stack} \label{sec:stack} \subsection{Gewichtete Entscheidungsmatrix} Vier Stack-Kombinationen wurden nach neun Kriterien bewertet (Skala 1--10). Die Gewichtung reflektiert die Prioritäten des Projekts: schnelle Markteinführung, B2B-Fähigkeit und weltweite Einsetzbarkeit. \begin{landscape} \begin{table}[htbp] \centering \caption{Gewichtete Entscheidungsmatrix -- Technologie-Stacks} \label{tab:matrix} \rowcolors{2}{gray!8}{white} \small \begin{tabularx}{\linewidth}{l C{1.2cm} X X X X} \toprule \textbf{Kriterium} & \textbf{Gew.} & \textbf{Stack 1: NestJS + Next.js + PG} & \textbf{Stack 2: FastAPI + React + PG} & \textbf{Stack 3: Nuxt + Node + Mongo} & \textbf{Stack 4: Go + React + PG} \\ \midrule Time-to-Market & 20\% & 9 \quad (1,80) & 7 \quad (1,40) & 8 \quad (1,60) & 5 \quad (1,00) \\ TypeScript-Durchgäng. & 15\% & 10 \quad (1,50) & 5 \quad (0,75) & 8 \quad (1,20) & 4 \quad (0,60) \\ Ecosystem \& Pakete & 15\% & 9 \quad (1,35) & 8 \quad (1,20) & 7 \quad (1,05) & 6 \quad (0,90) \\ Perform. \& Skalierb. & 15\% & 7 \quad (1,05) & 7 \quad (1,05) & 6 \quad (0,90) & 10 \quad (1,50) \\ B2B-Eignung & 10\% & 9 \quad (0,90) & 8 \quad (0,80) & 6 \quad (0,60) & 7 \quad (0,70) \\ Entwickler-Verfügb. & 10\% & 9 \quad (0,90) & 8 \quad (0,80) & 7 \quad (0,70) & 5 \quad (0,50) \\ AI/ML-Integration & 5\% & 6 \quad (0,30) & 10 \quad (0,50) & 5 \quad (0,25) & 6 \quad (0,30) \\ Community \& Support & 5\% & 9 \quad (0,45) & 8 \quad (0,40) & 7 \quad (0,35) & 6 \quad (0,30) \\ Wartbarkeit & 5\% & 8 \quad (0,40) & 7 \quad (0,35) & 7 \quad (0,35) & 8 \quad (0,40) \\ \midrule \textbf{Gesamtpunktzahl} & \textbf{100\%} & \cellcolor{stackhighlight}\textbf{8,65} & \textbf{7,25} & \textbf{7,00} & \textbf{6,20} \\ \bottomrule \end{tabularx} \end{table} \end{landscape} \subsection{Empfehlung: Stack 1} \begin{center} \colorbox{stackhighlight}{% \parbox{0.9\textwidth}{% \centering\large\bfseries NestJS + Next.js + PostgreSQL + Redis + Meilisearch + Stripe/Mollie }% } \end{center} \vspace{0.5em} \textbf{Begründung:} \begin{enumerate}[leftmargin=2em] \item \textbf{Eine Sprache (TypeScript)} über den gesamten Stack -- Backend, Frontend, Admin. Kein Kontextwechsel, gemeinsame Typdefinitionen, Code-Sharing zwischen Schichten. \item \textbf{NestJS} liefert Enterprise-Architektur (Dependency Injection, Module, Guards, Interceptors) -- ideal für komplexe B2B-Geschäftslogik wie Genehmigungsworkflows und kundenspezifische Preisgestaltung. \item \textbf{Next.js} bietet SSR, ISR und Server Components für optimale SEO und Performance -- kritisch für Produktseiten und internationale Reichweite. \item \textbf{Größtes Ecosystem} und Arbeitsmarkt -- einfachere Teambildung und schnellere Problemlösung durch Community-Support. \item \textbf{Direkte Referenzarchitekturen}: Medusa.js (Node.js/TypeScript) und Vendure (NestJS/TypeScript) als bewährte Vorbilder. \end{enumerate} \subsection{Detaillierter Stack-Überblick} \begin{table}[htbp] \centering \caption{Detaillierter Technologie-Stack} \label{tab:stackdetail} \rowcolors{2}{gray!8}{white} \small \begin{tabularx}{\textwidth}{l l l X} \toprule \textbf{Schicht} & \textbf{Technologie} & \textbf{Version} & \textbf{Bemerkung} \\ \midrule Backend & NestJS + TypeScript & 10.x+ & Modulare Architektur, DI \\ Frontend (Shop) & Next.js + React & 15.x+ & App Router, Server Components \\ Frontend (Admin) & Next.js + React & 15.x+ & Separates Deployment \\ ORM & Prisma & 6.x+ & Type-safe Database Access \\ Datenbank & PostgreSQL & 16+ & JSONB für flexible Attribute \\ Cache & Redis & 7+ & Sessions, Cart, Rate-Limiting \\ Suche & Meilisearch & 1.x+ & Produkt- und Inhaltssuche \\ Zahlungen & Stripe + Mollie & -- & Stripe primär, Mollie für EU \\ Job-Queue & BullMQ & 5.x+ & E-Mails, Importe, Exporte \\ Dateispeicher & S3-kompatibel & -- & MinIO oder AWS S3 \\ Deployment & Docker Compose & -- & Kubernetes optional später \\ CI/CD & GitHub Actions & -- & Automatisierte Tests + Deploy \\ CDN & Cloudflare & -- & Edge-Caching, DDoS-Schutz \\ Validierung & Zod & 3.x+ & TypeScript-native Validierung \\ Testing & Jest + Playwright & -- & Unit-, Integration-, E2E-Tests \\ \bottomrule \end{tabularx} \end{table} % ============================================================================= % KAPITEL 4: FEATURE-ANALYSE % ============================================================================= \newpage \section{Feature-Analyse} \label{sec:features} Dieses Kapitel listet alle Features nach Priorität geordnet. Jede Kategorie enthält konkrete Einzelfeatures mit Zuordnung zu den Systemkomponenten (Backend, Frontend, Admin). % --------------------------------------------------------------------------- \subsection{Pflicht-Features (\must)} \label{subsec:must} Die folgenden 13 Feature-Kategorien sind für ein funktionsfähiges E-Commerce-System unabdingbar. Ohne sie kann kein Verkauf stattfinden oder das System entspricht nicht den gesetzlichen Anforderungen. \begin{longtable}{c l l c} \caption{Pflicht-Features -- Übersicht} \label{tab:must} \\ \toprule \textbf{Nr.} & \textbf{Kategorie} & \textbf{Komponente} & \textbf{Komplexität} \\ \midrule \endfirsthead \toprule \textbf{Nr.} & \textbf{Kategorie} & \textbf{Komponente} & \textbf{Komplexität} \\ \midrule \endhead \bottomrule \endfoot P01 & Produktverwaltung & Backend + Admin & Hoch \\ P02 & Benutzer \& Authentifizierung & Backend + Frontend & Mittel \\ P03 & Warenkorb \& Checkout & Alle & Hoch \\ P04 & Bestellverwaltung & Backend + Admin & Hoch \\ P05 & Zahlungsabwicklung & Backend + Frontend & Hoch \\ P06 & Versand \& Lieferung & Backend + Admin & Mittel \\ P07 & Steuerberechnung & Backend & Hoch \\ P08 & Sicherheit \& DSGVO & Alle & Hoch \\ P09 & Produktsuche & Backend + Frontend & Mittel \\ P10 & Responsives Design & Frontend & Mittel \\ P11 & Mehrsprachigkeit (i18n) & Alle & Mittel \\ P12 & Mehrwährungsfähigkeit & Backend + Frontend & Mittel \\ P13 & Admin-Panel & Admin & Hoch \\ \end{longtable} \subsubsection{P01 -- Produktverwaltung} Grundlage jedes E-Commerce-Systems. Ohne Produkte kein Verkauf. \begin{itemize}[leftmargin=2em] \item Produktanlage mit Titel, Beschreibung (Rich Text), SKU, EAN/GTIN \item Varianten-Management (Größe, Farbe, Material) mit eigenen SKUs und Preisen \item Digitale und physische Produkte unterscheiden \item Produktbilder mit Galerie, Zoom und Alt-Texten \item Hierarchische Kategorien und Tags \item Produktattribute (filterbar): Gewicht, Maße, Material, Marke \item Lagerbestandsverwaltung: Bestand pro Variante, Reservierung bei Checkout \item Produkt-Status: Entwurf, Aktiv, Archiviert \item Massenimport/-export (CSV/JSON) \item B2B: Kundenspezifische Produktsichtbarkeit (Katalogbeschränkung) \end{itemize} \subsubsection{P02 -- Benutzer \& Authentifizierung} Erforderlich für Bestellhistorie, gespeicherte Adressen und Personalisierung. \begin{itemize}[leftmargin=2em] \item E-Mail/Passwort-Registrierung mit E-Mail-Verifizierung \item Passwort-Zurücksetzen (tokenbasiert, zeitlich begrenzt) \item Optionaler Social Login (Google, Apple) \item Kundenprofil: Name, Adressen (Rechnung/Lieferung), Telefon \item B2B: Firmenkonten mit Mitarbeiterverwaltung und Rollenkonzept \item Gastbestellung (ohne Registrierung) \item Session-Management und sichere Token-Verwaltung (JWT + Refresh-Tokens) \item Rate-Limiting auf Login-Versuche (Brute-Force-Schutz) \item Multi-Faktor-Authentifizierung (MFA) für Admin-Zugänge \end{itemize} \subsubsection{P03 -- Warenkorb \& Checkout} Der kritischste Conversion-Pfad. Jeder Reibungspunkt kostet Umsatz. \begin{itemize}[leftmargin=2em] \item Warenkorb: Hinzufügen, Entfernen, Mengenänderung \item Persistenter Warenkorb (Session + Datenbank für eingeloggte Nutzer) \item Warenkorb-Zusammenführung bei Login (Gast-Cart $\rightarrow$ User-Cart) \item Mehrstufiger oder Single-Page-Checkout \item Rechnungs-/Lieferadresse (getrennt oder identisch) \item Versandmethoden-Auswahl mit Echtzeitpreisen \item Zahlungsmethoden-Auswahl \item Gutscheincode-Eingabe \item Bestellübersicht vor Abschluss \item B2B: Bestellnummer (PO-Number) eingeben, Genehmigungsworkflow \item Warenkorbabbruch-Tracking für spätere Wiederansprache \end{itemize} \subsubsection{P04 -- Bestellverwaltung} Kerngeschäftsdatensatz. Rechtlich erforderliche Aufbewahrung der Bestellhistorie. \begin{itemize}[leftmargin=2em] \item Automatische Bestellnummer-Generierung \item Status-Workflow: Ausstehend $\rightarrow$ Bestätigt $\rightarrow$ In Bearbeitung $\rightarrow$ Versendet $\rightarrow$ Zugestellt \item Kundenseitige Statusanzeige mit Sendungsverfolgung \item Admin: Bestellliste mit Filter, Suche, Sortierung \item Admin: Bestelldetails, manuelle Statusänderung \item Nachbestellung aus Bestellhistorie (Re-Order) \item B2B: Erweiterte Status (Genehmigung ausstehend, Freigegeben, Gesperrt) \item Rechnungserstellung (PDF) pro Bestellung \item Bestellnotizen (intern und kundensichtbar) \end{itemize} \subsubsection{P05 -- Zahlungsabwicklung} Unterstützung mehrerer Zahlungsmethoden ist für weltweiten Einsatz unerlässlich. \begin{itemize}[leftmargin=2em] \item Stripe-Integration: Kreditkarte, SEPA, Apple Pay, Google Pay \item Mollie-Integration: iDEAL, Bancontact, EPS, Giropay, Klarna \item PayPal als optionaler dritter Provider \item Provider-Abstraktion: einheitliches Interface für alle Zahlungsanbieter \item Tokenisierung (keine Kartendaten im System speichern) \item 3D Secure 2.0 für Kreditkartenzahlungen \item Webhook-Verarbeitung für asynchrone Zahlungsbestätigungen \item Teil- und Vollrückerstattungen \item B2B: Kauf auf Rechnung (Net 30/60/90), SEPA-Lastschrift \item Mehrwährungsfähige Zahlungen \end{itemize} \subsubsection{P06 -- Versand \& Lieferung} Verschiedene Produkte, Gewichte und Zielorte erfordern unterschiedliche Versandoptionen. \begin{itemize}[leftmargin=2em] \item Mehrere Versanddienstleister (DHL, DPD, UPS, FedEx, lokale Carrier) \item Echtzeit-Versandkostenberechnung oder feste Versandkostentabellen \item Adressvalidierung (länderspezifisch) \item Versandetikett-Generierung \item Sendungsverfolgungsnummern mit Carrier-Tracking-Links \item Kostenloser Versand ab Bestellwert (konfigurierbar) \item B2B: Speditionsversand für Großbestellungen \item Internationale Versandregeln und Zolldeklarationen \end{itemize} \subsubsection{P07 -- Steuerberechnung} Gesetzliche Pflicht. Fehlerhafte Steuerberechnung führt zu Bußgeldern. \begin{itemize}[leftmargin=2em] \item Automatische MwSt-Berechnung nach Kundenstandort \item EU-MwSt: 15--27\% je nach Land, OSS-Regelung für digitale Güter \item US Sales Tax: Bundesstaat- und City-Level (2000+ Jurisdiktionen) \item UK VAT: 20\% Standard nach Brexit \item Steuersätze pro Produktkategorie (Normalsatz, ermäßigt, befreit) \item B2B: Reverse-Charge-Verfahren bei gültiger USt-IdNr \item USt-IdNr-Validierung über VIES (EU) \item Steuerberichte für Buchhaltung (Export CSV/PDF) \item Integration mit TaxJar oder Avalara für automatisierte Steuerberechnung \end{itemize} \subsubsection{P08 -- Sicherheit \& DSGVO} Nicht verhandelbar. DSGVO-Verstöße: bis zu 20 Mio. EUR oder 4\% des Jahresumsatzes. \begin{itemize}[leftmargin=2em] \item HTTPS/TLS 1.3 für gesamte Kommunikation \item Passwort-Hashing mit bcrypt oder Argon2 \item Verschlüsselung sensibler Daten (PII) in der Datenbank \item DSGVO: Einwilligungsmanagement, Cookie-Banner, Datenschutzerklärung \item Recht auf Löschung (Konto- und Datenlöschung auf Anfrage) \item Datenportabilität (Export persönlicher Daten als JSON/CSV) \item Audit-Logging aller Admin-Aktionen \item CORS, CSP, HSTS und weitere Security-Header \item Rate-Limiting und DDoS-Schutz \item Regelmäßige Dependency-Updates (Sicherheitspatches) \end{itemize} \subsubsection{P09 -- Produktsuche} Kunden erwarten schnelle, relevante Suchergebnisse. \begin{itemize}[leftmargin=2em] \item Volltextsuche über Produktnamen, Beschreibungen, SKUs \item Autocomplete/Suchvorschläge während der Eingabe \item Tippfehlertoleranz (Fuzzy-Matching) \item Antwortzeit unter 200ms \item Ergebnis-Paginierung \item B2B: Suche nach SKU, Artikelnummer, interner Bezeichnung \item Indexierung über Meilisearch mit automatischer Synchronisation \end{itemize} \subsubsection{P10 -- Responsives Design} Über 50\% des E-Commerce-Traffics kommt von Mobilgeräten. \begin{itemize}[leftmargin=2em] \item Mobile-First responsive Design \item Touch-optimierte Buttons und Interaktionen \item Lazy Loading für Bilder \item Optimierte Ladezeit auf 3G/4G-Verbindungen ($<$3 Sekunden) \item Mobile-Wallet-Support (Apple Pay, Google Pay) \item Testen auf verschiedenen Geräten und Bildschirmgrößen \end{itemize} \subsubsection{P11 -- Mehrsprachigkeit (i18n)} 60\% der Onlinekäufer kaufen selten auf englischsprachigen Seiten. 13\% höhere Conversion bei muttersprachlicher Darstellung. \begin{itemize}[leftmargin=2em] \item UI-Lokalisierung: alle Texte, Fehlermeldungen, E-Mails \item Produktbeschreibungen in mehreren Sprachen \item Spracherkennung (Accept-Language Header + GeoIP) \item Sprachumschalter ohne Session-Verlust \item URL-Struktur: \texttt{/de/produkte}, \texttt{/en/products}, \texttt{/fr/produits} \item RTL-Unterstützung für Arabisch \item i18next oder react-intl als Frontend-Bibliothek \item Anbindung an Übersetzungsmanagement-Plattform (Crowdin, Lokalise) \end{itemize} \subsubsection{P12 -- Mehrwährungsfähigkeit} Kunden erwarten Preise in ihrer lokalen Währung. \begin{itemize}[leftmargin=2em] \item Automatische Währungserkennung (GeoIP-basiert) \item Manueller Währungsumschalter \item Basiswährung + automatische Umrechnung über Echtzeit-Wechselkurse \item Alternativ: feste Preise pro Währung (wichtig für B2B-Verträge) \item Korrekte Währungsformatierung pro Locale (\$100.00 vs. 100,00~\euro{} vs. ¥100) \item Unterstützung gängiger Währungen: EUR, USD, GBP, CHF, JPY, CNY etc. \item Währungsspezifische Zahlungsabwicklung \end{itemize} \subsubsection{P13 -- Admin-Panel} Zentrale Verwaltungsoberfläche für den täglichen Betrieb. \begin{itemize}[leftmargin=2em] \item Dashboard: Umsatz, Bestellungen, Neukunden, Topseller \item Produktverwaltung: CRUD, Massenbearbeitung, Bildupload \item Bestellverwaltung: Liste, Detail, Statusänderung, Rückerstattung \item Kundenverwaltung: Übersicht, Bestellhistorie, Notizen \item Einstellungen: Shop-Name, Währung, Steuersätze, Versandoptionen \item E-Mail-Template-Verwaltung \item Benutzerrollen und Berechtigungen (Admin, Manager, Support) \item Einfache Berichte (Umsatz nach Zeitraum, Kategorie, Kunde) \item Export-Funktionen (CSV/PDF) \end{itemize} % --------------------------------------------------------------------------- \subsection{Soll-Features (\should)} \label{subsec:should} Diese 12 Feature-Kategorien verbessern das System erheblich und sind für ein wettbewerbsfähiges Produkt wichtig. Sie sollten in Phase 2 implementiert werden. \begin{longtable}{c l l c} \caption{Soll-Features -- Übersicht} \label{tab:should} \\ \toprule \textbf{Nr.} & \textbf{Kategorie} & \textbf{Komponente} & \textbf{Komplexität} \\ \midrule \endfirsthead \toprule \textbf{Nr.} & \textbf{Kategorie} & \textbf{Komponente} & \textbf{Komplexität} \\ \midrule \endhead \bottomrule \endfoot S01 & B2B-Preisgestaltung & Backend + Admin & Hoch \\ S02 & Erweiterte Suche \& Filter & Backend + Frontend & Mittel \\ S03 & Aktionen \& Rabatte & Backend + Admin & Mittel \\ S04 & Wunschliste & Backend + Frontend & Niedrig \\ S05 & Bewertungen \& Rezensionen & Backend + Frontend & Mittel \\ S06 & E-Mail-Benachrichtigungen & Backend & Mittel \\ S07 & SEO-Optimierung & Frontend + Backend & Mittel \\ S08 & Analytics \& Reporting & Admin + Backend & Mittel \\ S09 & CMS / Blog & Alle & Mittel \\ S10 & Multi-Warehouse-Inventar & Backend + Admin & Hoch \\ S11 & Retouren \& RMA & Backend + Admin & Mittel \\ S12 & REST/GraphQL API & Backend & Mittel \\ \end{longtable} \subsubsection{S01 -- B2B-Preisgestaltung} Kern-Feature für B2B. Ohne kundenspezifische Preise kein ernsthafter B2B-Betrieb. \begin{itemize}[leftmargin=2em] \item Kundengruppen-basierte Preise (Händler, Großhändler, VIP) \item Kundenspezifische Preislisten (vertraglich vereinbart) \item Staffelpreise: 1--10 Stk. $\rightarrow$ 10~\euro{}, 11--50 Stk. $\rightarrow$ 9~\euro{}, 50+ Stk. $\rightarrow$ 8~\euro{} \item Rabatte auf Kategorie- oder Produktebene pro Kundengruppe \item Netto-Preisanzeige für B2B-Kunden, Brutto für B2C \item Mindestbestellmenge (MOQ) pro Produkt konfigurierbar \item Angebotsanfrage (RFQ) für individuelle Preisverhandlung \end{itemize} \subsubsection{S02 -- Erweiterte Suche \& Filter} Verbessert die Conversion um 10--20\% durch gezieltes Finden. \begin{itemize}[leftmargin=2em] \item Facettierte Suche: Preis, Kategorie, Marke, Farbe, Größe, Bewertung \item Dynamische Filteranzahl (zeigt verfügbare Produkte pro Filter) \item Sortierung: Relevanz, Preis, Neuheit, Beliebtheit, Bewertung \item Gespeicherte Suchen (besonders für B2B-Wiederholungskäufe) \item Filterbare Produktlisten in Kategorieseiten \end{itemize} \subsubsection{S03 -- Aktionen \& Rabatte} Marketing-Werkzeug zur Umsatzsteigerung und Kundengewinnung. \begin{itemize}[leftmargin=2em] \item Gutscheincodes: prozentual, absolut, kostenloser Versand \item Einmal- oder Mehrfachverwendung, ablaufdatumbasiert \item Automatische Kampagnen: Zeitraum, Kategorie, Mindestbestellwert \item Warenkorb-Aktionen: \enquote{Kaufe 2, erhalte 3. gratis} \item Bundle-Rabatte: Produktkombinationen günstiger \item Treuestufen: Rabatt basierend auf Gesamtumsatz des Kunden \end{itemize} \subsubsection{S04 -- Wunschliste} Erhöht Wiederbesuchsrate. Kunden speichern Produkte für späteren Kauf. \begin{itemize}[leftmargin=2em] \item Produkte zur Wunschliste hinzufügen/entfernen \item Wunschliste teilen (URL-basiert) \item Benachrichtigung bei Preissenkung oder Wiederverfügbarkeit \item Produktvergleich (2--5 Produkte nebeneinander) \end{itemize} \subsubsection{S05 -- Bewertungen \& Rezensionen} Social Proof steigert Conversion. Bewertungen sind wertvoller SEO-Content. \begin{itemize}[leftmargin=2em] \item 5-Sterne-Bewertung + Freitextrezension \item Nur nach Kaufabschluss bewertbar (verifizierte Käufe) \item Admin-Moderation vor Veröffentlichung \item \enquote{Hilfreich}-Markierung durch andere Kunden \item Durchschnittsbewertung auf Produktseite und in Suchergebnissen \item Antwortfunktion für den Shopbetreiber \end{itemize} \subsubsection{S06 -- E-Mail-Benachrichtigungen} Reduziert Support-Anfragen und hält Kunden informiert. \begin{itemize}[leftmargin=2em] \item Bestellbestätigung (sofort nach Bestellabschluss) \item Zahlungsbestätigung \item Versandbestätigung mit Tracking-Link \item Zustellungsbenachrichtigung \item Passwort-Zurücksetzen, Kontobestätigung \item Optionale Warenkorbabbruch-E-Mail \item Template-Engine mit Variablen (Bestellnummer, Kundenname, Produkte) \item Anbindung an E-Mail-Service (SendGrid, AWS SES, Brevo) \end{itemize} \subsubsection{S07 -- SEO-Optimierung} Kritisch für organisches Wachstum. Produktseiten müssen in Suchmaschinen gefunden werden. \begin{itemize}[leftmargin=2em] \item Individuelle Meta-Tags (Title, Description) pro Seite \item Saubere URL-Struktur: \texttt{/produkte/rote-laufschuhe} \item Automatische XML-Sitemap-Generierung \item Structured Data / JSON-LD (Product, BreadcrumbList, Organization) \item Canonical-Tags zur Vermeidung von Duplicate Content \item Open Graph und Twitter Cards für Social Sharing \item Bildoptimierung mit Alt-Texten und WebP-Format \item hreflang-Tags für mehrsprachige Seiten \end{itemize} \subsubsection{S08 -- Analytics \& Reporting} Datenbasierte Entscheidungen für Sortiment, Preise und Marketing. \begin{itemize}[leftmargin=2em] \item Umsatz-Dashboard: Tages-, Wochen-, Monatsumsatz, YoY-Vergleich \item Top-Produkte, Kategorie-Performance \item Kundenanalyse: Neukunden vs. Wiederkäufer, Customer Lifetime Value \item Bestandsberichte: Slow-Mover, Out-of-Stock-Rate \item Conversion-Funnel: Besucher $\rightarrow$ Warenkorb $\rightarrow$ Checkout $\rightarrow$ Kauf \item Google Analytics 4 (GA4) Integration \item Export in CSV/PDF für Buchhaltung und Management \end{itemize} \subsubsection{S09 -- CMS / Blog} Content-Marketing treibt organischen Traffic und baut Autorität auf. \begin{itemize}[leftmargin=2em] \item Statische Seiten (Über uns, Kontakt, AGB, Datenschutz) \item WYSIWYG-Editor für Seiteninhalt \item Blog mit Kategorien, Tags, Autor, Veröffentlichungsdatum \item Zeitgesteuerte Veröffentlichung (Scheduled Publishing) \item Wiederverwendbare Content-Blöcke (Testimonials, Feature-Boxen) \item SEO-Felder pro Seite/Beitrag \end{itemize} \subsubsection{S10 -- Multi-Warehouse-Inventar} Für skalierende Unternehmen mit mehreren Lagerstandorten. \begin{itemize}[leftmargin=2em] \item Mehrere Lagerorte anlegen \item Bestand pro Variante und Lagerort verwalten \item Automatische Lagerort-Auswahl bei Bestellung (Nähe zum Kunden) \item Lagerumzüge zwischen Standorten tracken \item Verfügbarkeitsanzeige: verfügbar, reserviert, verkaufbar \item Nachbestellpunkte und Bestandsalarme \end{itemize} \subsubsection{S11 -- Retouren \& RMA} Kunden erwarten einen einfachen Rückgabeprozess. Gute Retourenpolitik erhöht Conversion. \begin{itemize}[leftmargin=2em] \item Retourenanfrage aus Bestellhistorie erstellen \item RMA-Nummern-Generierung \item Retourenetikett-Generierung \item Rückgabefrist konfigurierbar (z.B. 30 Tage) \item Teilretouren (einzelne Artikel einer Bestellung) \item Rückerstattung oder Gutschrift nach Wareneingang \item Zustandsbewertung zurückgesendeter Ware \end{itemize} \subsubsection{S12 -- REST/GraphQL API} Ermöglicht Mobile Apps, Drittanbieter-Integrationen und headless Betrieb. \begin{itemize}[leftmargin=2em] \item REST API für alle Kernressourcen (Produkte, Bestellungen, Kunden, Cart) \item OpenAPI/Swagger-Dokumentation (automatisch generiert) \item Optional: GraphQL-Endpunkt für flexiblere Frontend-Abfragen \item API-Versionierung (v1, v2) für Abwärtskompatibilität \item API-Key-Authentifizierung und OAuth 2.0 \item Rate-Limiting pro API-Key \item Webhooks für Events (Bestellung erstellt, Zahlung bestätigt, Versand) \item Webhook-Retry-Mechanismus und Logging \end{itemize} % --------------------------------------------------------------------------- \subsection{Kann-Features (\can)} \label{subsec:can} Diese 11 Feature-Kategorien sind Nice-to-have und sollten in Phase 3 oder bedarfsgesteuert implementiert werden. Sie bieten Mehrwert, sind aber nicht geschäftskritisch. \begin{longtable}{c l l c} \caption{Kann-Features -- Übersicht} \label{tab:can} \\ \toprule \textbf{Nr.} & \textbf{Kategorie} & \textbf{Komponente} & \textbf{Komplexität} \\ \midrule \endfirsthead \toprule \textbf{Nr.} & \textbf{Kategorie} & \textbf{Komponente} & \textbf{Komplexität} \\ \midrule \endhead \bottomrule \endfoot K01 & Treueprogramm / Bonuspunkte & Alle & Mittel \\ K02 & Abonnements / Wiederkehrende Best. & Backend + Frontend & Hoch \\ K03 & Marktplatz (Multi-Vendor) & Alle & Sehr hoch \\ K04 & KI-gestützte Empfehlungen & Backend + Frontend & Hoch \\ K05 & Live-Chat / Chatbot & Frontend & Mittel \\ K06 & Social-Media-Integration & Frontend & Niedrig \\ K07 & Geschenkkarten & Backend + Frontend & Mittel \\ K08 & EDI / PunchOut (Enterprise) & Backend & Hoch \\ K09 & A/B-Testing & Frontend + Backend & Mittel \\ K10 & PWA-Support & Frontend & Mittel \\ K11 & Multi-Tenant / Multi-Store & Alle & Sehr hoch \\ \end{longtable} \subsubsection{K01 -- Treueprogramm / Bonuspunkte} Steigert Customer Lifetime Value und Wiederkaufrate. \begin{itemize}[leftmargin=2em] \item Punktesystem: 1 Punkt pro 1~\euro{} Umsatz \item Punkte einlösen gegen Rabatte oder Gratisprodukte \item Ablaufdatum für Punkte (konfigurierbar) \item Mitgliedsstufen: Bronze, Silber, Gold mit steigenden Vorteilen \item Empfehlungsprogramm: Belohnung für Weiterempfehlung \end{itemize} \subsubsection{K02 -- Abonnements / Wiederkehrende Bestellungen} Wiederkehrender Umsatz, Kundenkomfort bei Verbrauchsartikeln. \begin{itemize}[leftmargin=2em] \item Abo-Produkte mit flexiblen Intervallen (wöchentlich, monatlich, quartalsweise) \item Pausieren, Überspringen, Kündigen durch Kunden \item Automatische Verlängerung und Zahlung \item Erinnerung vor Verlängerung \item Mengenänderung zwischen Zyklen \end{itemize} \subsubsection{K03 -- Marktplatz (Multi-Vendor)} Erweitert das Sortiment ohne eigenes Inventar. Erfordert erheblichen Zusatzaufwand. \begin{itemize}[leftmargin=2em] \item Vendor-Registrierung und -Freischaltung \item Vendor-Dashboard: eigene Produkte, Bestellungen, Umsatz \item Provisionsmodell (konfigurierbar pro Vendor) \item Admin-Genehmigung neuer Produkte \item Vendor-Auszahlungsmanagement \item Separate Vendor-Bewertungen \end{itemize} \subsubsection{K04 -- KI-gestützte Empfehlungen} Erhöht den durchschnittlichen Bestellwert durch personalisierte Vorschläge. \begin{itemize}[leftmargin=2em] \item \enquote{Ähnliche Produkte} auf Produktseiten \item \enquote{Häufig zusammen gekauft} im Warenkorb \item Personalisierte Empfehlungen basierend auf Kauf- und Browsinghistorie \item Collaborative Filtering oder Content-Based Algorithmen \item Empfehlungen in E-Mails \end{itemize} \subsubsection{K05 -- Live-Chat / Chatbot} Echtzeit-Support verbessert Kundenzufriedenheit und reduziert Warenkorbabbrüche. \begin{itemize}[leftmargin=2em] \item Chat-Widget auf der Website \item KI-Chatbot für häufige Fragen (FAQ, Bestellstatus) \item Eskalation an menschlichen Mitarbeiter \item Offline-Nachrichtenerfassung \item Chat-Verlaufshistorie \end{itemize} \subsubsection{K06 -- Social-Media-Integration} Kostenloser Marketing-Kanal durch Social Sharing. \begin{itemize}[leftmargin=2em] \item Social Login (Facebook, Google, Apple) \item Produkt-Teilen auf Social Media \item Instagram/TikTok Shopping-Integration \item Social-Media-Pixel für Remarketing (Meta, TikTok) \end{itemize} \subsubsection{K07 -- Geschenkkarten} Zusätzliche Umsatzquelle und Geschenkoption. \begin{itemize}[leftmargin=2em] \item Digitale Geschenkkarten mit festen oder individuellen Beträgen \item E-Mail-Zustellung mit personalisierter Nachricht \item Einlösung im Checkout \item Restguthaben-Verwaltung \item Optionales Ablaufdatum \end{itemize} \subsubsection{K08 -- EDI / PunchOut (Enterprise B2B)} Für Integration mit Großkunden-Beschaffungssystemen (SAP Ariba, Coupa). \begin{itemize}[leftmargin=2em] \item EDI-Nachrichtenformate (X12, EDIFACT) empfangen und verarbeiten \item PunchOut-Katalog: Produktkatalog über cXML bereitstellen \item Automatische Bestellverarbeitung aus Procurement-Systemen \item Authentifizierung gegenüber Einkaufssystem des Kunden \end{itemize} \subsubsection{K09 -- A/B-Testing} Datengesteuerte Optimierung von Conversion-Raten. \begin{itemize}[leftmargin=2em] \item Test-Framework: Varianten von UI, Preisen, Content ausspielen \item Traffic-Splitting zwischen Varianten \item Statistische Auswertung (Signifikanzniveau) \item Gewinner-Deklaration und automatisches Rollout \end{itemize} \subsubsection{K10 -- PWA-Support} App-ähnliche Erfahrung ohne App-Store-Installation. \begin{itemize}[leftmargin=2em] \item Service Worker für Offline-Funktionalität \item Install-Prompt (Manifest.json, App-Icon, Splashscreen) \item Push-Notifications für Bestellstatus und Angebote \item Cache-Strategien für häufig besuchte Seiten \end{itemize} \subsubsection{K11 -- Multi-Tenant / Multi-Store} Mehrere Shops/Marken aus einer Instanz betreiben. Hohe architektonische Komplexität. \begin{itemize}[leftmargin=2em] \item Separate Stores mit eigenen Produkten, Preisen, Einstellungen \item Datenisolierung pro Store (Kunden, Bestellungen) \item Geteilte Ressourcen: Produktkatalog mit store-spezifischen Preisen \item Ein Admin-Panel für alle Stores \item Store-spezifische Domains, Währungen, Sprachen \end{itemize} % --------------------------------------------------------------------------- \subsection{Nicht benötigte Features (\notneed)} \label{subsec:notneed} Die folgenden Funktionen liegen außerhalb des Systemscopes. Sie werden besser durch spezialisierte Drittanbieter abgedeckt und per API angebunden. \begin{table}[htbp] \centering \caption{Abgrenzung -- Nicht benötigte Features} \label{tab:notneed} \rowcolors{2}{gray!8}{white} \small \begin{tabularx}{\textwidth}{l X X} \toprule \textbf{Kategorie} & \textbf{Begründung} & \textbf{Alternative (Integration)} \\ \midrule Eigene Buchhaltung / ERP & Zu komplex, regulatorisch anspruchsvoll, schnell veraltet. Besser als Integration. & DATEV, sevDesk, lexoffice, Xero, NetSuite \\ Vollständiges WMS & Lagerverwaltung (Picking, Packing, Routenoptimierung) ist hochspezialisiert. & ShipHero, Fulfillmenttools, externe WMS per API \\ Eigene Zahlungsabwicklung & PCI-DSS Level 1 erfordert jährliche Audits (\$50K--\$500K). Unverhältnismäßig. & Stripe, Mollie, Adyen (Tokenisierung) \\ E-Mail-Marketing-Plattform & Spezialisierte Tools bieten Segmentierung, Automation und Analytics auf Enterprise-Niveau. & Mailchimp, Brevo (ex-Sendinblue), Klaviyo \\ Social-Media-Management & Nicht Kernaufgabe eines Shopsystems. Separater Workflow und Tools. & Buffer, Hootsuite, Later \\ Vollständiges CRM & Kundenbeziehungsmanagement umfasst Sales-Pipeline, Ticketing, Anrufmanagement. & HubSpot, Salesforce, Pipedrive \\ \bottomrule \end{tabularx} \end{table} \textbf{Prinzip:} Das Shopsystem stellt für jede dieser Kategorien Schnittstellen (REST API, Webhooks) bereit, über die Drittanbieter angebunden werden. Es implementiert diese Funktionen nicht selbst. % ============================================================================= % KAPITEL 5: B2B-SPEZIFISCHE ANFORDERUNGEN % ============================================================================= \newpage \section{B2B-spezifische Anforderungen} \label{sec:b2b} Der gleichzeitige Support von B2C und B2B ist eine der größten Herausforderungen des Systems. B2B-Kunden haben fundamental andere Anforderungen als Endverbraucher. \subsection{B2B vs. B2C -- Fundamentale Unterschiede} \begin{table}[htbp] \centering \caption{B2B vs. B2C -- Feature-Vergleich} \label{tab:b2bvsb2c} \rowcolors{2}{gray!8}{white} \small \begin{tabularx}{\textwidth}{l X X X} \toprule \textbf{Aspekt} & \textbf{B2C} & \textbf{B2B} & \textbf{Implementierung} \\ \midrule Preisgestaltung & Einheitlich für alle Kunden & Kundenspezifisch, vertraglich & Preisgruppen-Engine, Preislisten \\ Preisanzeige & Brutto (inkl. MwSt) & Netto (zzgl. MwSt) & Toggle basierend auf Kontotyp \\ Bestellprozess & Sofortkauf, keine Genehmigung & Genehmigungspflichtig ab Betrag X & Workflow-Engine mit Eskalation \\ Zahlung & Sofort (Karte, PayPal) & Auf Rechnung (Net 30/60/90) & Kreditlimit-Prüfung, Invoicing \\ Konto & Einzelperson & Firma mit mehreren Mitarbeitern & Company-Account-Hierarchie \\ Bestellmenge & Einzelstücke & Großmengen, Paletten & MOQ, Staffelpreise, Schnellbestellung \\ Katalog & Gesamtes Sortiment & Kundenspezifischer Katalog & Katalogzuweisung pro Kundengruppe \\ Kaufentscheidung & Emotional, schnell & Rational, mehrere Entscheider & Angebotssystem, Verhandlung \\ \bottomrule \end{tabularx} \end{table} \subsection{Firmenkonten \& Rollenmanagement} \begin{itemize}[leftmargin=2em] \item \textbf{Company Account:} Übergeordnetes Konto mit Firmendaten (Name, USt-IdNr, Adresse, Zahlungsbedingungen) \item \textbf{Mitarbeiter-Accounts:} Zugeordnet zum Company Account, mit individuellen Rollen: \begin{description}[leftmargin=2em] \item[Einkäufer] Kann bestellen bis zu einem Betragslimit \item[Genehmiger] Kann Bestellungen freigeben \item[Admin] Kann Mitarbeiter verwalten, Rollen zuweisen \item[Finanz] Kann Rechnungen einsehen und Zahlungen verwalten \item[Viewer] Nur Lesezugriff auf Bestellhistorie und Katalog \end{description} \item \textbf{Einladungsworkflow:} Admin lädt Mitarbeiter per E-Mail ein \item \textbf{Budgetlimits:} Pro Mitarbeiter oder Abteilung konfigurierbar \end{itemize} \subsection{Genehmigungsworkflows} \begin{enumerate}[leftmargin=2em] \item Einkäufer legt Bestellung an und übermittelt zur Genehmigung \item System prüft: Bestellwert $>$ Limit $\rightarrow$ Genehmigung erforderlich \item Genehmiger erhält E-Mail-Benachrichtigung \item Genehmiger: Freigeben, Ablehnen oder Kommentieren \item Bei Mehrstufigkeit: Eskalation an nächste Ebene \item Nach Freigabe: automatische Zahlungsauslösung und Bestellverarbeitung \end{enumerate} \subsection{Zahlungsbedingungen} \begin{itemize}[leftmargin=2em] \item \textbf{Kauf auf Rechnung:} Net 30, Net 60, Net 90 (pro Kunde konfigurierbar) \item \textbf{Kreditlimit:} Maximaler offener Rechnungsbetrag pro Firma \item \textbf{SEPA-Lastschrift:} Einmaliges Mandat, wiederkehrende Einzüge \item \textbf{Vorkasse:} Überweisung mit automatischer Zuordnung (IBAN-Referenz) \item \textbf{Skonto:} 2\% Rabatt bei Zahlung innerhalb von 10 Tagen \item \textbf{Zahlungserinnerungen:} Automatisiert bei Fälligkeit und Überfälligkeit \end{itemize} \subsection{Schnellbestellung \& CSV-Upload} B2B-Kunden kennen ihre Artikelnummern und wollen schnell große Bestellungen aufgeben: \begin{itemize}[leftmargin=2em] \item \textbf{Quick-Order-Formular:} SKU + Menge eingeben, direkt in den Warenkorb \item \textbf{CSV-Upload:} Bestellliste hochladen (SKU, Menge) für Massenbestellungen \item \textbf{Bestellvorlagen:} Wiederkehrende Bestellungen als Template speichern \item \textbf{Nachbestellung:} Ein-Klick-Wiederholung vergangener Bestellungen \end{itemize} % ============================================================================= % KAPITEL 6: INTERNATIONALISIERUNG % ============================================================================= \newpage \section{Internationalisierung} \label{sec:i18n} Für weltweiten Einsatz muss das System von Beginn an auf Internationalisierung ausgelegt sein. Nachträgliches Hinzufügen ist um ein Vielfaches aufwändiger. \subsection{Übersicht der Anforderungen} \begin{table}[htbp] \centering \caption{Internationalisierungsanforderungen} \label{tab:i18n} \rowcolors{2}{gray!8}{white} \small \begin{tabularx}{\textwidth}{l X X} \toprule \textbf{Aspekt} & \textbf{Ansatz} & \textbf{Technologie} \\ \midrule Übersetzungen & Key-Value mit Pluralisierung und ICU Message Format & i18next / next-intl \\ Währungen & Echtzeit-Kurse + manuell gepflegte Preise pro Währung & Open Exchange Rates API \\ Datumsformate & Locale-basierte Formatierung & Intl API (ECMAScript) \\ Zahlenformate & Locale-basiert (1.000,50 vs. 1,000.50) & Intl.NumberFormat \\ Adressen & Länderspezifische Adressfelder und Validierung & Google Address Validation API \\ Rechtstexte & Separate AGB, Widerrufsbelehrung, Datenschutz pro Land & CMS mit Sprachzuordnung \\ Maßeinheiten & Metrisch (EU) vs. Imperial (US, UK) & Konfiguration pro Region \\ RTL-Support & Arabisch, Hebräisch: Right-to-Left Layout & CSS logical properties, dir-Attribut \\ \bottomrule \end{tabularx} \end{table} \subsection{Mehrsprachigkeit (i18n)} \textbf{URL-Strategie:} Sprachpräfix im Pfad (empfohlen für SEO): \begin{lstlisting} example.com/de/produkte/rote-schuhe example.com/en/products/red-shoes example.com/fr/produits/chaussures-rouges \end{lstlisting} \textbf{Vorteile:} Eine Domain, zentralisierte Domain-Autorität, einfachere Verwaltung als Subdomains. \textbf{Spracherkennung (Priorität):} \begin{enumerate}[leftmargin=2em] \item URL-Pfad (\texttt{/de/...}) \item Gespeicherte Benutzerpräferenz (Cookie/Account) \item Accept-Language Header des Browsers \item GeoIP-basierter Fallback \end{enumerate} \textbf{Übersetzungsmanagement:} \begin{itemize}[leftmargin=2em] \item Entwickler pflegen Schlüssel in JSON-Dateien (Standardsprache: Englisch) \item Professionelle Übersetzer arbeiten über Plattform (Crowdin, Lokalise) \item Automatischer Pull der Übersetzungen ins Repository via CI/CD \item Produktbeschreibungen: mehrsprachige Felder in der Datenbank \end{itemize} \subsection{Mehrwährungsfähigkeit} \textbf{Zwei Strategien (beide unterstützen):} \begin{description}[leftmargin=2em] \item[Automatische Umrechnung] Basiswährung (EUR) + Echtzeit-Wechselkurse. Gut für B2C mit vielen Märkten. Preise können zwischen Seitenbesuchen schwanken. \item[Feste Preise pro Währung] Manuell gepflegte Preise in jeder Währung. Wichtig für B2B-Verträge und Preiskonsistenz. Höherer Pflegeaufwand. \end{description} \textbf{Währungsformatierung} muss locale-korrekt sein: \begin{itemize}[leftmargin=2em] \item USA: \$1,000.00 \item Deutschland: 1.000,00~\euro{} \item Japan: ¥1,000 (keine Dezimalstellen) \item Schweiz: CHF 1'000.00 \end{itemize} \subsection{Regionale Rechtsanforderungen} \begin{itemize}[leftmargin=2em] \item \textbf{EU:} DSGVO, Widerrufsbelehrung, Preisangabenverordnung (Grundpreis), Impressumspflicht, Cookie-Consent \item \textbf{Deutschland:} Buttonlösung (\enquote{Zahlungspflichtig bestellen}), Fernabsatzgesetz, Verpackungsgesetz \item \textbf{UK:} UK GDPR (post-Brexit), Consumer Rights Act, VAT-Regeln \item \textbf{USA:} CCPA/CPRA (Kalifornien), CAN-SPAM Act, keine einheitliche Datenschutzregelung \item \textbf{Weitere:} LGPD (Brasilien), PIPA (Südkorea), APPI (Japan) \end{itemize} % ============================================================================= % KAPITEL 7: SICHERHEIT & COMPLIANCE % ============================================================================= \newpage \section{Sicherheit \& Compliance} \label{sec:sicherheit} \subsection{DSGVO / GDPR} Die DSGVO gilt für alle Unternehmen, die personenbezogene Daten von EU-Bürgern verarbeiten -- unabhängig vom Firmensitz. \textbf{Kernprinzipien und ihre Umsetzung im System:} \begin{itemize}[leftmargin=2em] \item \textbf{Datenminimierung:} Nur erforderliche Daten erheben. Keine Pflichtfelder für nicht-benötigte Informationen. \item \textbf{Zweckbindung:} Daten nur für den angegebenen Zweck verwenden. Klare Trennung von Bestelldaten und Marketingdaten. \item \textbf{Einwilligungsmanagement:} Explizites Opt-in für Newsletter, Cookie-Tracking, personalisierte Werbung. Kein Pre-Checked-Checkbox. \item \textbf{Recht auf Löschung:} Kundenkonto vollständig löschbar. Bestelldaten anonymisieren (gesetzliche Aufbewahrungsfristen beachten). \item \textbf{Datenportabilität:} Export aller persönlichen Daten als JSON/CSV. \item \textbf{Auftragsverarbeitung:} DPA (Data Processing Agreement) mit allen Drittanbietern (Stripe, Meilisearch Cloud, etc.). \item \textbf{Datenschutzerklärung:} Detailliert, verständlich, pro Sprache/Land. \end{itemize} \subsection{PCI-DSS Compliance} Da keine Kartendaten im System gespeichert oder verarbeitet werden (Tokenisierung über Stripe/Mollie), gilt \textbf{SAQ-A} -- das niedrigste Compliance-Level: \begin{itemize}[leftmargin=2em] \item Zahlungsformulare werden als iFrames der Payment-Provider eingebettet \item Keine Kartendaten berühren das eigene Backend \item TLS 1.2+ für alle Verbindungen \item Regelmäßige Vulnerability-Scans \end{itemize} \subsection{OWASP Top 10 -- Maßnahmen} \begin{table}[htbp] \centering \caption{Sicherheitsmaßnahmen gegen OWASP Top 10} \label{tab:owasp} \rowcolors{2}{gray!8}{white} \small \begin{tabularx}{\textwidth}{l X X} \toprule \textbf{Bedrohung} & \textbf{Maßnahme} & \textbf{Implementierung} \\ \midrule Injection & Parameterisierte Queries, kein String-Concatenation & Prisma ORM (prepared statements) \\ Broken Auth & Sichere Token-Verwaltung, MFA für Admin & JWT + Refresh-Token, Passport.js \\ XSS & Output-Encoding, Content Security Policy & React (auto-escaping), Helmet.js \\ CSRF & SameSite-Cookies, CSRF-Tokens & NestJS CSRF-Guard \\ SSRF & URL-Validierung, Allowlist für externe Requests & Input-Validierung mit Zod \\ Security Misc. & Security-Header, Dependency-Updates & Helmet.js, Dependabot/Renovate \\ Insecure Design & Threat Modeling, Security Reviews & Architektur-Review vor Deployment \\ Broken Access & RBAC, Ressourcen-basierte Autorisierung & NestJS Guards + CASL-Bibliothek \\ Crypto Failures & Starke Hashing-Algorithmen, Verschlüsselung & Argon2 (Passwörter), AES-256 (PII) \\ Logging/Monitor. & Zentrale Logs, Alerting bei Anomalien & Winston + Loki oder CloudWatch \\ \bottomrule \end{tabularx} \end{table} \subsection{Authentifizierung \& Autorisierung} \begin{description}[leftmargin=2em] \item[JWT + Refresh-Token] Access-Token (15 Min. Gültigkeit) + Refresh-Token (7 Tage, in httpOnly-Cookie). Token-Rotation bei jedem Refresh. \item[OAuth 2.0] Für API-Zugriff durch Drittanbieter. Authorization Code Flow mit PKCE für öffentliche Clients. \item[RBAC] Role-Based Access Control mit feingranularen Berechtigungen. Rollen: Super-Admin, Shop-Admin, Support, B2B-Admin, B2B-Einkäufer, B2B-Genehmiger. \item[MFA] Pflicht für Admin-Zugänge. Optional (empfohlen) für B2B-Genehmiger. TOTP-basiert (Google Authenticator, Authy). \end{description} % ============================================================================= % KAPITEL 8: OPEN-SOURCE-REFERENZARCHITEKTUREN % ============================================================================= \newpage \section{Open-Source-Referenzarchitekturen} \label{sec:referenz} Drei führende Open-Source-E-Commerce-Plattformen dienen als Referenz für Architekturentscheidungen. Ziel ist nicht die Übernahme einer Plattform, sondern das Lernen aus bewährten Mustern. \begin{table}[htbp] \centering \caption{Open-Source-Referenzplattformen im Vergleich} \label{tab:referenz} \rowcolors{2}{gray!8}{white} \small \begin{tabularx}{\textwidth}{l X X X} \toprule \textbf{Kriterium} & \textbf{Medusa.js} & \textbf{Saleor} & \textbf{Vendure} \\ \midrule Sprache & TypeScript (Node.js) & Python (Django) & TypeScript (NestJS) \\ API & REST (+ GraphQL geplant) & GraphQL & GraphQL \\ Datenbank & PostgreSQL & PostgreSQL & PostgreSQL / MySQL \\ Architektur & Modular (Plugin-System) & Monolith (modular) & Plugin-basiert \\ Multi-Currency & Ja (Multi-Region) & Ja (sehr ausgereift) & Ja (Plugin) \\ B2B-Support & Begrenzt (Custom) & Begrenzt (Extension) & Plugin möglich \\ Admin-Panel & Eigenes (React) & Dashboard (React) & Angular Admin UI \\ GitHub-Stars & $\sim$31K & $\sim$21K & $\sim$6K \\ \midrule \textbf{Stärken} & Erweiterbarkeit, DX, größte Community & Multi-Channel, GraphQL, i18n out-of-the-box & Saubere NestJS-Architektur, Type-Safety \\ \textbf{Schwächen} & Weniger Features als Saleor, B2B braucht Custom-Code & Python (anderer Stack), kleinere Community & Kleinste Community, Angular-Admin \\ \textbf{Relevanz} & \textbf{Hoch} -- gleicher Stack & Mittel -- Architektur-Referenz & \textbf{Hoch} -- NestJS-Referenz \\ \bottomrule \end{tabularx} \end{table} \subsection{Learnings für unser System} \begin{description}[leftmargin=2em] \item[Von Medusa.js lernen:] Modulares Plugin-System, bei dem jedes Modul (Produkte, Bestellungen, Zahlungen) unabhängig ersetzt werden kann. Multi-Region-Konzept für länderspezifische Einstellungen (Währung, Steuern, Lager). \item[Von Saleor lernen:] GraphQL-Schema-Design für E-Commerce. Ausgereifte Multi-Currency/Multi-Language-Implementierung. Channel-basiertes Multi-Store-Konzept. \item[Von Vendure lernen:] NestJS-spezifische Patterns: Dependency Injection für Service-Layer, Custom Decorators für Autorisierung, Event-Bus für lose Kopplung. State-Machine für Bestellstatus. \end{description} \textbf{Wichtig:} Keine dieser Plattformen als Fork übernehmen. Die Abweichung von der Upstream-Codebasis macht Updates nach 3--6 Monaten praktisch unmöglich. Stattdessen: eigenes System bauen, Patterns und API-Design als Referenz nutzen. % ============================================================================= % KAPITEL 9: ARCHITEKTUR-ÜBERSICHT % ============================================================================= \newpage \section{Architektur-Übersicht} \label{sec:architektur} \subsection{Architekturansatz: Modularer Monolith} Das System startet als \textbf{modularer Monolith} -- ein einzelnes Deployment mit klar getrennten internen Modulen. Dieser Ansatz kombiniert: \begin{itemize}[leftmargin=2em] \item \textbf{Einfachheit eines Monolithen:} Ein Deployment, ein Repository, einfaches Debugging, keine Netzwerk-Latenz zwischen Modulen \item \textbf{Modularität für spätere Zerlegung:} Jedes Modul hat klare Grenzen (eigenes Interface, eigene DTOs), sodass es bei Bedarf als Microservice extrahiert werden kann \end{itemize} \textbf{Kein Microservice-Start!} Microservices verursachen bei kleinen Teams mehr Overhead als Nutzen (Network Calls, Distributed Tracing, Service Discovery, Deployment-Komplexität). Die Zerlegung erfolgt erst bei konkretem Bedarf. \subsection{System-Komponenten} \begin{table}[htbp] \centering \caption{Architektur-Komponenten} \label{tab:architektur} \rowcolors{2}{gray!8}{white} \small \begin{tabularx}{\textwidth}{l l X} \toprule \textbf{Komponente} & \textbf{Technologie} & \textbf{Verantwortlichkeit} \\ \midrule API-Server & NestJS & REST-Endpunkte, Middleware, Guards, Validierung \\ Produkt-Modul & NestJS Module & Katalog, Varianten, Kategorien, Attribute, Suche \\ Bestell-Modul & NestJS Module & Cart, Checkout, Bestellungen, Status-Workflow \\ Zahlungs-Modul & NestJS Module & Provider-Abstraktion (Strategy Pattern), Webhooks \\ Kunden-Modul & NestJS Module & Auth, Profile, Firmenkonten, Rollen \\ B2B-Modul & NestJS Module & Preislisten, Genehmigungen, Zahlungsbedingungen \\ Versand-Modul & NestJS Module & Carrier-Integration, Tracking, Etiketten \\ Such-Service & Meilisearch & Produkt-Indexierung und -Abfragen \\ Cache-Layer & Redis & Sessions, Warenkörbe, Rate-Limiting, Caching \\ Job-Queue & BullMQ (Redis) & E-Mails, Import/Export, Bildverarbeitung \\ Datei-Speicher & S3 / MinIO & Produktbilder, Dokumente, Exporte \\ Event-Bus & NestJS EventEmitter & Lose Kopplung zwischen Modulen \\ \bottomrule \end{tabularx} \end{table} \subsection{API-Design} \textbf{Primär: REST API} mit klarer Ressourcen-Struktur: \begin{lstlisting} GET /api/v1/products # Produktliste (paginiert, filterbar) GET /api/v1/products/:id # Produktdetails POST /api/v1/cart/items # Artikel zum Warenkorb hinzufuegen POST /api/v1/checkout # Checkout starten GET /api/v1/orders # Bestellhistorie POST /api/v1/orders/:id/return # Retoure anfragen \end{lstlisting} \textbf{Optional: GraphQL} als zweiter Endpunkt für Frontend-Entwickler, die flexiblere Abfragen benötigen (z.B. Produktseite mit Reviews, Related Products und Inventory in einem Request). \textbf{Webhooks} für asynchrone Events: \begin{lstlisting} POST /webhooks/stripe # Stripe-Zahlungsbestaetigung POST /webhooks/shipping # Carrier-Tracking-Updates \end{lstlisting} \subsection{Datenbank-Schema (Kernentitäten)} \begin{lstlisting} Produkt 1 --- N Variante Produkt N --- M Kategorie Variante 1 --- N Lagereintrag (pro Lagerort) Kunde 1 --- N Adresse Kunde 1 --- N Bestellung Kunde N --- 1 Firma (B2B) Firma 1 --- N Mitarbeiter (Kunde mit Rolle) Bestellung 1 --- N Bestellposition Bestellung 1 --- 1 Zahlung Bestellung 1 --- N Versand Bestellung 1 --- N Rechnung Preisliste N --- M Kundengruppe Preisliste 1 --- N Preislisteneintrag (Produkt + Preis) \end{lstlisting} \subsection{Event-Driven Architecture} Module kommunizieren über Events statt direkter Aufrufe: \begin{lstlisting} order.created -> E-Mail-Service (Bestellbestaetigung senden) order.created -> Inventar-Service (Bestand reservieren) payment.confirmed -> Bestell-Service (Status aktualisieren) order.shipped -> E-Mail-Service (Versandbestaetigung senden) order.shipped -> Tracking-Service (Tracking-Updates starten) \end{lstlisting} \textbf{Vorteil:} Module kennen einander nicht direkt. Neue Features (z.B. Analytics, Loyalty-Punkte) können als Listener hinzugefügt werden, ohne bestehenden Code zu ändern. \subsection{Caching-Strategie} \begin{description}[leftmargin=2em] \item[Produktkatalog] Redis-Cache mit TTL (5--15 Min.), Invalidierung bei Admin-Änderung \item[Warenkorb] Redis mit Session-ID als Key. TTL: 7 Tage (Gast), unbegrenzt (eingeloggt) \item[Suchergebnisse] Meilisearch hat eigenes Caching. Zusätzlich CDN-Caching für häufige Queries \item[Seitencaching] Next.js ISR für Produktseiten, Kategorieseiten, Blog-Beiträge \item[API-Responses] ETag-basiertes Caching für unveränderliche Ressourcen \end{description} % ============================================================================= % KAPITEL 10: ZUSAMMENFASSUNG & EMPFEHLUNG % ============================================================================= \newpage \section{Zusammenfassung \& Empfehlung} \label{sec:zusammenfassung} \subsection{Empfohlener Stack (Zusammenfassung)} \begin{center} \colorbox{stackhighlight}{% \parbox{0.92\textwidth}{% \textbf{Backend:} NestJS + TypeScript + Prisma + PostgreSQL \\ \textbf{Frontend:} Next.js + React + TypeScript \\ \textbf{Admin:} Next.js + React (separates Deployment) \\ \textbf{Suche:} Meilisearch \quad \textbf{Cache:} Redis \quad \textbf{Queue:} BullMQ \\ \textbf{Zahlungen:} Stripe (primär) + Mollie (EU) \\ \textbf{Deployment:} Docker Compose + GitHub Actions + Cloudflare CDN }% } \end{center} \subsection{Phasenplan} \begin{table}[htbp] \centering \caption{Implementierungs-Phasenplan} \label{tab:phasen} \rowcolors{2}{gray!8}{white} \small \begin{tabularx}{\textwidth}{l l X l} \toprule \textbf{Phase} & \textbf{Zeitraum} & \textbf{Features} & \textbf{Team} \\ \midrule Phase 1 (MVP) & Monat 1--6 & Alle Pflicht-Features (P01--P13): Produktverwaltung, Auth, Cart/Checkout, Bestellungen, Zahlungen, Versand, Steuern, Sicherheit, Suche, Responsive Design, i18n, Multi-Currency, Admin-Panel & 3--4 Entwickler \\ Phase 2 & Monat 7--12 & Priorisierte Soll-Features: B2B-Preisgestaltung (S01), Erweiterte Suche (S02), Rabatte (S03), E-Mail-Benachrichtigungen (S06), SEO (S07), Analytics (S08), API (S12) & 3--5 Entwickler \\ Phase 3 & Ab Monat 13 & Verbleibende Soll-Features (S04, S05, S09--S11) und bedarfsgesteuerte Kann-Features (K01--K11) & 4--6 Entwickler \\ \bottomrule \end{tabularx} \end{table} \subsection{Nächste Schritte} Nach Genehmigung dieses Analysedokuments folgen: \begin{enumerate}[leftmargin=2em] \item \textbf{Detaillierte technische Spezifikation} -- Datenbankschema, API-Endpunkte, Modulstruktur \item \textbf{UI/UX-Design} -- Wireframes und Prototypen für Shop, Checkout, Admin \item \textbf{Projektsetup} -- Repository, CI/CD-Pipeline, Docker-Konfiguration, Coding-Standards, Linting \item \textbf{Sprint-Planung} -- Aufgaben für Phase 1 in 2-Wochen-Sprints aufteilen \item \textbf{Infrastruktur} -- Hosting einrichten, Datenbank provisionieren, Staging-Umgebung deployen \end{enumerate} % ============================================================================= \end{document}