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
- Node.js (v18 oder höher)
- Appwrite Account (https://cloud.appwrite.io)
- Stripe Account (https://stripe.com)
Installation
- Repository klonen und Dependencies installieren:
cd server
npm install
- 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-IDAPPWRITE_API_KEY: Ihr Appwrite API Key (mit allen Berechtigungen)APPWRITE_DATABASE_ID: Wird nach Bootstrap-Script automatisch gesetztSTRIPE_SECRET_KEY: Ihr Stripe Secret Key (sk_test_...)STRIPE_WEBHOOK_SECRET: Ihr Stripe Webhook Secret (whsec_...)
- 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.
- 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
- Öffnen Sie http://localhost:3000 in Ihrem Browser
- Füllen Sie den mehrstufigen Fragebogen aus
- Überprüfen Sie die Zusammenfassung
- Klicken Sie auf "Jetzt kaufen" um zur Stripe-Bezahlung weitergeleitet zu werden
- 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-Identifiertitle: ProduktnamepriceCents: Preis in Centcurrency: Währung (z.B. "eur")isActive: Produkt aktiv/inaktiv
Questions Collection
productId: Referenz zum Produktkey: Eindeutiger Schlüssel für die Antwortlabel: Anzeigetexttype: Feldtyp (text, email, select, multiselect, textarea)required: Pflichtfeld ja/neinstep: Schritt-Nummer im Formularorder: Reihenfolge innerhalb des SchrittsoptionsJson: JSON-Array mit Auswahloptionen (für select/multiselect)isActive: Frage aktiv/inaktiv
Submissions Collection
productId: Referenz zum Produktstatus: Status (draft, paid)customerEmail: Kunden-EmailcustomerName: KundennamefinalSummaryJson: JSON mit allen AntwortenpriceCents: Preis in Centcurrency: Währung
Answers Collection
submissionId: Referenz zur SubmissionanswersJson: JSON mit allen Antworten
Orders Collection
submissionId: Referenz zur SubmissionorderDataJson: JSON mit Stripe Session Daten
Troubleshooting
Server startet nicht
- Überprüfen Sie, dass alle Umgebungsvariablen in
.envgesetzt 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_KEYkorrekt 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 listenläuft - Überprüfen Sie, dass
STRIPE_WEBHOOK_SECRETkorrekt gesetzt ist - Überprüfen Sie die Stripe Dashboard Webhook-Logs
Lizenz
ISC