Files
ANDJJJJJJ/README.md

5.4 KiB

Email Sortierer Setup

Ein Multi-Step-Formular zur Konfiguration von Email-Präferenzen mit Appwrite-Datenspeicherung und Stripe-Bezahlung.

Quick Start

# 1. Dependencies installieren
cd server
npm install

# 2. Setup überprüfen
npm run verify

# 3. Umgebungsvariablen konfigurieren
cp ../.env.example .env
# Bearbeiten Sie .env und fügen Sie Ihre Credentials ein

# 4. Datenbank initialisieren
npm run bootstrap
# Kopieren Sie die Database-ID und fügen Sie sie in .env ein

# 5. Tests ausführen
npm test

# 6. Server starten
npm start

# 7. Browser öffnen
# http://localhost:3000

Voraussetzungen

Installation

  1. Repository klonen und Dependencies installieren:
cd server
npm install
  1. Umgebungsvariablen konfigurieren:

Kopieren Sie .env.example zu .env und füllen Sie alle Werte aus:

cp .env.example .env

Erforderliche Werte:

  • APPWRITE_ENDPOINT: Ihre Appwrite API Endpoint (z.B. https://cloud.appwrite.io/v1)
  • APPWRITE_PROJECT_ID: Ihre Appwrite Projekt-ID
  • APPWRITE_API_KEY: Ihr Appwrite API Key (mit allen Berechtigungen)
  • APPWRITE_DATABASE_ID: Wird nach Bootstrap-Script automatisch gesetzt
  • STRIPE_SECRET_KEY: Ihr Stripe Secret Key (sk_test_...)
  • STRIPE_WEBHOOK_SECRET: Ihr Stripe Webhook Secret (whsec_...)
  1. Appwrite Datenbank initialisieren:
npm run bootstrap

Dieses Script erstellt:

  • Eine neue Datenbank "EmailSorter"
  • 5 Collections: products, questions, submissions, answers, orders
  • Ein Produkt "Email Sorter Setup"
  • 13 Fragen für den Fragebogen

Wichtig: Nach dem Bootstrap-Script wird die Database-ID in der Konsole ausgegeben. Kopieren Sie diese ID und fügen Sie sie in Ihre .env Datei als APPWRITE_DATABASE_ID ein.

  1. Stripe Webhook konfigurieren:

Für lokale Entwicklung mit Stripe CLI:

stripe listen --forward-to localhost:3000/stripe/webhook

Kopieren Sie das angezeigte Webhook-Secret und fügen Sie es als STRIPE_WEBHOOK_SECRET in Ihre .env Datei ein.

Für Produktion: Erstellen Sie einen Webhook in Ihrem Stripe Dashboard mit der URL https://ihre-domain.com/stripe/webhook und dem Event checkout.session.completed.

Server starten

npm start

Der Server läuft auf http://localhost:3000

Verwendung

  1. Öffnen Sie http://localhost:3000 in Ihrem Browser
  2. Füllen Sie den mehrstufigen Fragebogen aus
  3. Überprüfen Sie die Zusammenfassung
  4. Klicken Sie auf "Jetzt kaufen" um zur Stripe-Bezahlung weitergeleitet zu werden
  5. Verwenden Sie Stripe Test-Kreditkarte: 4242 4242 4242 4242

API Endpunkte

GET /api/questions

Lädt alle aktiven Fragen für ein Produkt.

Query Parameter:

  • productSlug: Produkt-Slug (z.B. "email-sorter")

Response:

[
  {
    "$id": "...",
    "key": "email",
    "label": "Ihre E-Mail-Adresse",
    "type": "email",
    "required": true,
    "step": 1,
    "order": 1
  }
]

POST /api/submissions

Erstellt eine neue Submission mit Kundenantworten.

Request Body:

{
  "productSlug": "email-sorter",
  "answers": {
    "email": "kunde@example.com",
    "name": "Max Mustermann"
  }
}

Response:

{
  "submissionId": "..."
}

POST /api/checkout

Erstellt eine Stripe Checkout Session.

Request Body:

{
  "submissionId": "..."
}

Response:

{
  "url": "https://checkout.stripe.com/..."
}

POST /stripe/webhook

Empfängt Stripe Webhook Events (nur für Stripe).

Datenmodell

Products Collection

  • slug: Eindeutiger Produkt-Identifier
  • title: Produktname
  • priceCents: Preis in Cent
  • currency: Währung (z.B. "eur")
  • isActive: Produkt aktiv/inaktiv

Questions Collection

  • productId: Referenz zum Produkt
  • key: Eindeutiger Schlüssel für die Antwort
  • label: Anzeigetext
  • type: Feldtyp (text, email, select, multiselect, textarea)
  • required: Pflichtfeld ja/nein
  • step: Schritt-Nummer im Formular
  • order: Reihenfolge innerhalb des Schritts
  • optionsJson: JSON-Array mit Auswahloptionen (für select/multiselect)
  • isActive: Frage aktiv/inaktiv

Submissions Collection

  • productId: Referenz zum Produkt
  • status: Status (draft, paid)
  • customerEmail: Kunden-Email
  • customerName: Kundenname
  • finalSummaryJson: JSON mit allen Antworten
  • priceCents: Preis in Cent
  • currency: Währung

Answers Collection

  • submissionId: Referenz zur Submission
  • answersJson: JSON mit allen Antworten

Orders Collection

  • submissionId: Referenz zur Submission
  • orderDataJson: JSON mit Stripe Session Daten

Troubleshooting

Server startet nicht

  • Überprüfen Sie, dass alle Umgebungsvariablen in .env gesetzt sind
  • Stellen Sie sicher, dass Port 3000 nicht bereits verwendet wird

Fragen werden nicht geladen

  • Überprüfen Sie die Appwrite-Verbindung und API-Key
  • Stellen Sie sicher, dass das Bootstrap-Script erfolgreich durchgelaufen ist
  • Überprüfen Sie die Browser-Konsole auf Fehler

Stripe Checkout funktioniert nicht

  • Überprüfen Sie, dass STRIPE_SECRET_KEY korrekt gesetzt ist
  • Für lokale Tests: Stellen Sie sicher, dass Stripe CLI läuft
  • Überprüfen Sie die Server-Logs auf Fehler

Webhook wird nicht empfangen

  • Für lokale Tests: Stellen Sie sicher, dass stripe listen läuft
  • Überprüfen Sie, dass STRIPE_WEBHOOK_SECRET korrekt gesetzt ist
  • Überprüfen Sie die Stripe Dashboard Webhook-Logs

Lizenz

ISC