Initial commit
This commit is contained in:
476
FRONTEND_BACKEND_ZUSAMMENFASSUNG.md
Normal file
476
FRONTEND_BACKEND_ZUSAMMENFASSUNG.md
Normal file
@@ -0,0 +1,476 @@
|
||||
# Frontend-Backend Integration - Zusammenfassung
|
||||
|
||||
Komplette Übersicht über die Integration des WordPress Frontends mit dem Node.js Backend.
|
||||
|
||||
## Änderungen in diesem Chat
|
||||
|
||||
### ❌ Keine Frontend-Änderungen besprochen
|
||||
|
||||
In diesem Chat lag der Fokus komplett auf dem **Backend**:
|
||||
- Backend-Entwicklung (Node.js/Express)
|
||||
- Docker-Deployment
|
||||
- Scriptalizer API Integration
|
||||
- SVG-Generierung mit Variationen
|
||||
|
||||
Das Frontend (WordPress Plugin) wurde **jetzt** für das Backend angepasst.
|
||||
|
||||
## Neue Dateien im WordPress Plugin
|
||||
|
||||
### 1. `assets/js/configurator-api.js`
|
||||
**Backend API Client**
|
||||
|
||||
Funktionen:
|
||||
- `healthCheck()` - Prüft ob Backend erreichbar ist
|
||||
- `generatePreviewBatch(letters)` - Generiert Preview von Briefen
|
||||
- `getPreviewUrl(sessionId, index)` - Holt Preview-URL
|
||||
- `finalizeOrder(sessionId, orderNumber, metadata)` - Finalisiert Order aus Preview
|
||||
- `generateOrder(orderNumber, letters, envelopes, metadata)` - Erstellt Order direkt
|
||||
- `generateOrderNumber()` - Generiert Bestellnummer (SK-YYYY-MM-DD-XXX)
|
||||
|
||||
### 2. `assets/js/configurator-backend-integration.js`
|
||||
**Integration Logic**
|
||||
|
||||
Funktionen:
|
||||
- `handleOrderSubmitWithBackend(state)` - Erweiterte Order-Submit mit Backend
|
||||
- `prepareLettersForBackend(state)` - Bereitet Letter-Daten vor
|
||||
- `prepareEnvelopesForBackend(state)` - Bereitet Envelope-Daten vor
|
||||
- `mapFontToBackend(font)` - Mappt Frontend-Font zu Backend
|
||||
- `mapFormatToBackend(format)` - Mappt Frontend-Format zu Backend
|
||||
|
||||
### 3. `BACKEND_INTEGRATION.md`
|
||||
**Vollständige Integrations-Dokumentation**
|
||||
|
||||
Inhalt:
|
||||
- WordPress Admin-Einstellungen Anleitung
|
||||
- Backend-API Endpunkte Dokumentation
|
||||
- Workflow-Beschreibungen
|
||||
- Datenmapping-Tabellen
|
||||
- Troubleshooting Guide
|
||||
- Testing-Anleitungen
|
||||
|
||||
### 4. `README.md`
|
||||
**Plugin-Dokumentation**
|
||||
|
||||
Inhalt:
|
||||
- Features-Übersicht
|
||||
- Installations-Anleitung
|
||||
- Konfigurations-Guide
|
||||
- Datei-Struktur
|
||||
- API Integration
|
||||
- Workflow-Diagramme
|
||||
- Troubleshooting
|
||||
- Changelog
|
||||
|
||||
## WordPress Admin-Einstellungen
|
||||
|
||||
### Bereits vorhanden (keine Änderung nötig!)
|
||||
|
||||
Die Backend-Verbindungseinstellungen waren bereits im Plugin vorbereitet:
|
||||
|
||||
**Einstellungen → Skrift Konfigurator → Backend-Verbindung:**
|
||||
|
||||
1. **API URL / Domain**
|
||||
- Beispiel: `https://backend.deine-domain.de`
|
||||
- Pflichtfeld für Backend-Integration
|
||||
|
||||
2. **API Token / Authentifizierung**
|
||||
- Optional (aktuell nicht genutzt)
|
||||
- Für zukünftige Erweiterungen
|
||||
|
||||
3. **Order Webhook URL**
|
||||
- Beispiel: `https://n8n.deine-domain.de/webhook/order`
|
||||
- Wird nach Bestellung aufgerufen
|
||||
|
||||
4. **Redirect URL Geschäftskunden**
|
||||
- Beispiel: `https://deine-domain.de/danke-business`
|
||||
- Wohin nach Business-Bestellung
|
||||
|
||||
5. **Redirect URL Privatkunden**
|
||||
- Beispiel: `https://deine-domain.de/danke-privat`
|
||||
- Wohin nach Privat-Bestellung
|
||||
|
||||
## Integration in bestehendes Frontend
|
||||
|
||||
### Wie funktioniert es?
|
||||
|
||||
Das neue Backend-System wird **automatisch** genutzt, wenn:
|
||||
1. Backend-URL in WordPress-Einstellungen gesetzt ist
|
||||
2. Backend erreichbar ist (Health-Check erfolgreich)
|
||||
|
||||
### Fallback-Logik
|
||||
|
||||
Falls Backend nicht erreichbar:
|
||||
- Plugin fällt zurück auf alte Webhook-Only Logik
|
||||
- Bestellung wird trotzdem durchgeführt
|
||||
- Aber: Keine SVG-Generierung
|
||||
|
||||
### Was ändert sich für den User?
|
||||
|
||||
**Nichts!** Der Konfigurator funktioniert genau gleich:
|
||||
1. Produkt auswählen
|
||||
2. Menge eingeben
|
||||
3. Format wählen
|
||||
4. Versand & Umschlag
|
||||
5. Inhalt eingeben
|
||||
6. Kundendaten
|
||||
7. Bestellen → **Jetzt mit Backend-Generierung!**
|
||||
|
||||
## Datenmapping
|
||||
|
||||
### Fonts
|
||||
|
||||
| WordPress | Backend | Scriptalizer |
|
||||
|-----------|---------|--------------|
|
||||
| tilda | tilda | PremiumUltra79 |
|
||||
| alva | alva | PremiumUltra23 |
|
||||
| ellie | ellie | PremiumUltra39 |
|
||||
|
||||
### Formate
|
||||
|
||||
| WordPress | Backend | Papier |
|
||||
|-----------|---------|--------|
|
||||
| a4 | A4 | 210×297mm |
|
||||
| a6p | A6_PORTRAIT | 105×148mm |
|
||||
| a6l | A6_LANDSCAPE | 148×105mm |
|
||||
|
||||
### Envelopes
|
||||
|
||||
| Brief-Format | Envelope-Format | Größe |
|
||||
|--------------|-----------------|-------|
|
||||
| A4 | DIN_LANG | 110×220mm |
|
||||
| A6 | C6 | 114×162mm |
|
||||
|
||||
## Workflow-Übersicht
|
||||
|
||||
### Business-Kunde (B2B)
|
||||
|
||||
```
|
||||
┌─────────────────────────────────────────────────────────┐
|
||||
│ 1. Kunde füllt Konfigurator aus │
|
||||
│ - Businessbriefe / Business Postkarten / Follow-ups │
|
||||
│ - Menge, Format, Versand, Umschlag │
|
||||
│ - Text-Inhalt │
|
||||
│ - Kundendaten │
|
||||
└─────────────────────────┬───────────────────────────────┘
|
||||
│
|
||||
▼
|
||||
┌─────────────────────────────────────────────────────────┐
|
||||
│ 2. Klick auf "Jetzt kostenpflichtig bestellen" │
|
||||
└─────────────────────────┬───────────────────────────────┘
|
||||
│
|
||||
▼
|
||||
┌─────────────────────────────────────────────────────────┐
|
||||
│ 3. WordPress Plugin │
|
||||
│ - generateOrderNumber() → SK-2026-01-03-001 │
|
||||
│ - prepareLettersForBackend(state) │
|
||||
│ - prepareEnvelopesForBackend(state) │
|
||||
└─────────────────────────┬───────────────────────────────┘
|
||||
│
|
||||
▼
|
||||
┌─────────────────────────────────────────────────────────┐
|
||||
│ 4. Backend API Call │
|
||||
│ POST /api/order/generate │
|
||||
│ { │
|
||||
│ orderNumber: "SK-2026-01-03-001", │
|
||||
│ letters: [...], │
|
||||
│ envelopes: [...], │
|
||||
│ metadata: {...} │
|
||||
│ } │
|
||||
└─────────────────────────┬───────────────────────────────┘
|
||||
│
|
||||
▼
|
||||
┌─────────────────────────────────────────────────────────┐
|
||||
│ 5. Node.js Backend │
|
||||
│ - Scriptalizer API Call (Batch-Processing) │
|
||||
│ - SVG-Generierung mit Variationen │
|
||||
│ - Dateien speichern in /var/skrift-output/ │
|
||||
│ - Placeholders.csv erstellen │
|
||||
│ - order-metadata.json erstellen │
|
||||
└─────────────────────────┬───────────────────────────────┘
|
||||
│
|
||||
▼
|
||||
┌─────────────────────────────────────────────────────────┐
|
||||
│ 6. Webhook aufrufen (optional) │
|
||||
│ POST https://n8n.deine-domain.de/webhook/order │
|
||||
│ { │
|
||||
│ orderNumber: "SK-2026-01-03-001", │
|
||||
│ customer_data: {...}, │
|
||||
│ backend_result: { │
|
||||
│ path: "/var/skrift-output/SK-2026-01-03-001", │
|
||||
│ files: [...] │
|
||||
│ } │
|
||||
│ } │
|
||||
└─────────────────────────┬───────────────────────────────┘
|
||||
│
|
||||
▼
|
||||
┌─────────────────────────────────────────────────────────┐
|
||||
│ 7. Weiterleitung │
|
||||
│ → https://domain.de/danke-business?orderNumber=SK-.. │
|
||||
└─────────────────────────────────────────────────────────┘
|
||||
```
|
||||
|
||||
### Privat-Kunde (B2C) - Später mit PayPal
|
||||
|
||||
```
|
||||
1. Kunde füllt Konfigurator aus
|
||||
2. Klick auf "Jetzt kostenpflichtig bestellen"
|
||||
3. → PayPal Checkout
|
||||
4. PayPal Zahlung erfolgreich
|
||||
5. PayPal Webhook → WordPress
|
||||
6. WordPress → Backend API (generateOrder)
|
||||
7. Backend generiert SVG-Dateien
|
||||
8. Webhook aufrufen
|
||||
9. Weiterleitung zu Danke-Seite
|
||||
```
|
||||
|
||||
## Generierte Dateien
|
||||
|
||||
Für jede Bestellung erstellt das Backend:
|
||||
|
||||
```
|
||||
/var/skrift-output/SK-2026-01-03-001/
|
||||
├── letter_000.svg # Brief 1
|
||||
├── letter_001.svg # Brief 2
|
||||
├── ...
|
||||
├── letter_099.svg # Brief 100
|
||||
├── envelope_000.svg # Umschlag 1 (falls gewünscht)
|
||||
├── envelope_001.svg # Umschlag 2
|
||||
├── ...
|
||||
├── envelope_099.svg # Umschlag 100
|
||||
├── placeholders.csv # Platzhalter-Daten (CSV)
|
||||
└── order-metadata.json # Bestellungs-Metadaten
|
||||
```
|
||||
|
||||
### order-metadata.json
|
||||
|
||||
```json
|
||||
{
|
||||
"orderNumber": "SK-2026-01-03-001",
|
||||
"generatedAt": "2026-01-03T12:34:56.789Z",
|
||||
"summary": {
|
||||
"totalLetters": 100,
|
||||
"totalEnvelopes": 100,
|
||||
"fonts": ["tilda"],
|
||||
"formats": ["A4"]
|
||||
},
|
||||
"metadata": {
|
||||
"customer": {
|
||||
"type": "business",
|
||||
"firstName": "Max",
|
||||
"lastName": "Mustermann",
|
||||
"company": "Beispiel GmbH",
|
||||
"email": "max@example.com"
|
||||
},
|
||||
"product": "businessbriefe",
|
||||
"quantity": 100
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### placeholders.csv
|
||||
|
||||
```csv
|
||||
PlaceholderName,Value
|
||||
Anrede,Sehr geehrte Damen und Herren
|
||||
Firma,Beispiel GmbH
|
||||
Ansprechpartner,Max Mustermann
|
||||
```
|
||||
|
||||
## Wichtige Konfigurationen
|
||||
|
||||
### WordPress Plugin
|
||||
|
||||
**Datei:** `WordPress Plugin/includes/admin-settings.php`
|
||||
|
||||
Bereits vorhanden:
|
||||
- Backend-Verbindungseinstellungen
|
||||
- Preiskonfiguration
|
||||
- Produktverwaltung
|
||||
- Gutschein-System
|
||||
|
||||
**Keine Änderungen nötig!**
|
||||
|
||||
### Node.js Backend
|
||||
|
||||
**Datei:** `Docker Backend/.env`
|
||||
|
||||
```bash
|
||||
SCRIPTALIZER_LICENSE_KEY=f9918b40-d11c-11f0-b558-0800200c9a66
|
||||
SCRIPTALIZER_ERR_FREQUENCY=0 # WICHTIG: Keine durchgestrichenen Wörter!
|
||||
BATCH_SIZE=30
|
||||
CACHE_LIFETIME_HOURS=2
|
||||
RATE_LIMIT_PER_MINUTE=2
|
||||
NODE_ENV=production
|
||||
```
|
||||
|
||||
**Datei:** `Docker Backend/src/lib/svg-font-engine.js`
|
||||
|
||||
Handschrift-Variationen:
|
||||
- **15% Wortabstand-Variation** (mit Sinuswelle)
|
||||
- **±2.5° Wort-Rotation** (für natürliche Schräglage)
|
||||
|
||||
## Testing
|
||||
|
||||
### 1. Backend Health-Check
|
||||
|
||||
```bash
|
||||
# Auf Server
|
||||
curl http://localhost:4000/health
|
||||
|
||||
# Von außen
|
||||
curl https://backend.deine-domain.de/health
|
||||
|
||||
# Erwartete Antwort:
|
||||
{"status":"ok","timestamp":"2026-01-03T..."}
|
||||
```
|
||||
|
||||
### 2. WordPress Browser-Console
|
||||
|
||||
```javascript
|
||||
// Backend API testen
|
||||
const api = window.SkriftBackendAPI;
|
||||
|
||||
// Health-Check
|
||||
const healthy = await api.healthCheck();
|
||||
console.log('Backend healthy:', healthy);
|
||||
|
||||
// Test-Order
|
||||
const result = await api.generateOrder(
|
||||
api.generateOrderNumber(),
|
||||
[{
|
||||
text: 'Liebe Oma, vielen Dank für das schöne Geschenk!',
|
||||
font: 'tilda',
|
||||
format: 'A4',
|
||||
placeholders: {}
|
||||
}],
|
||||
[{
|
||||
type: 'recipient',
|
||||
recipientAddress: {
|
||||
name: 'Frau Schmidt',
|
||||
street: 'Hauptstraße 123',
|
||||
zip: '12345',
|
||||
city: 'Berlin'
|
||||
},
|
||||
font: 'tilda',
|
||||
format: 'DIN_LANG'
|
||||
}],
|
||||
{
|
||||
customer: {
|
||||
type: 'business',
|
||||
firstName: 'Test',
|
||||
lastName: 'User',
|
||||
email: 'test@example.com'
|
||||
}
|
||||
}
|
||||
);
|
||||
|
||||
console.log('Order result:', result);
|
||||
```
|
||||
|
||||
### 3. Vollständiger Test-Workflow
|
||||
|
||||
1. WordPress Konfigurator öffnen
|
||||
2. Produkt wählen (z.B. Businessbriefe)
|
||||
3. Menge: 5
|
||||
4. Format: A4
|
||||
5. Versand: Direktversand
|
||||
6. Umschlag: Ja, mit Empfängeradresse
|
||||
7. Text eingeben
|
||||
8. Kundendaten eingeben
|
||||
9. "Jetzt kostenpflichtig bestellen" klicken
|
||||
10. Prüfen:
|
||||
- Browser-Console: Keine Fehler
|
||||
- Backend-Logs: `docker compose logs -f`
|
||||
- Dateien erstellt: `ls /var/skrift-output/SK-*`
|
||||
- SVGs korrekt: Keine durchgestrichenen Wörter
|
||||
- Webhook aufgerufen (falls konfiguriert)
|
||||
|
||||
## Deployment-Reihenfolge
|
||||
|
||||
### 1. Backend deployen
|
||||
|
||||
```bash
|
||||
# Siehe: Docker Backend/DEPLOYMENT_READY/START_HIER.txt
|
||||
|
||||
# Upload auf Server
|
||||
scp -r DEPLOYMENT_READY/* root@SERVER:/opt/skrift-backend/
|
||||
|
||||
# Auf Server
|
||||
ssh root@SERVER
|
||||
cd /opt/skrift-backend
|
||||
cp .env.example .env
|
||||
mkdir -p /var/skrift-output
|
||||
docker compose up -d --build
|
||||
```
|
||||
|
||||
### 2. Nginx Proxy Manager konfigurieren
|
||||
|
||||
- Domain: `backend.deine-domain.de`
|
||||
- Forward to: `skrift-backend:4000`
|
||||
- SSL: Let's Encrypt
|
||||
|
||||
### 3. WordPress Plugin hochladen
|
||||
|
||||
```bash
|
||||
# Per FTP/SSH
|
||||
scp -r "WordPress Plugin" root@SERVER:/var/www/html/wp-content/plugins/skrift-konfigurator/
|
||||
```
|
||||
|
||||
### 4. WordPress Plugin aktivieren
|
||||
|
||||
- WordPress Admin → Plugins
|
||||
- "Skrift Konfigurator" aktivieren
|
||||
|
||||
### 5. Einstellungen konfigurieren
|
||||
|
||||
- Einstellungen → Skrift Konfigurator
|
||||
- Backend-Verbindung:
|
||||
- API URL: `https://backend.deine-domain.de`
|
||||
- Webhook URL: `https://n8n.deine-domain.de/webhook/order` (optional)
|
||||
- Redirect URLs setzen
|
||||
- Speichern
|
||||
|
||||
### 6. Seite mit Konfigurator erstellen
|
||||
|
||||
- Neue Seite: "Konfigurator"
|
||||
- Shortcode: `[skrift_konfigurator]`
|
||||
- Veröffentlichen
|
||||
|
||||
### 7. Testen!
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
Siehe:
|
||||
- `WordPress Plugin/BACKEND_INTEGRATION.md`
|
||||
- `Docker Backend/DEPLOYMENT_READY/SERVER_SETUP.txt`
|
||||
- `Docker Backend/DEPLOYMENT_READY/CHECKLISTE.txt`
|
||||
|
||||
## Zusammenfassung
|
||||
|
||||
### ✅ Was ist fertig?
|
||||
|
||||
- ✅ Backend komplett entwickelt (Node.js + Docker)
|
||||
- ✅ Frontend-Backend Integration implementiert
|
||||
- ✅ API Client für WordPress
|
||||
- ✅ Dokumentation vollständig
|
||||
- ✅ Deployment-Package bereit
|
||||
- ✅ Handschrift-Variationen (15% Abstand, ±2.5° Rotation)
|
||||
- ✅ Keine durchgestrichenen Wörter (SCRIPTALIZER_ERR_FREQUENCY=0)
|
||||
|
||||
### 🚧 Was fehlt noch?
|
||||
|
||||
- [ ] Backend auf Server deployen
|
||||
- [ ] WordPress Einstellungen konfigurieren
|
||||
- [ ] Vollständigen Test-Durchlauf
|
||||
- [ ] PayPal-Integration für Privatkunden
|
||||
- [ ] Email-Benachrichtigungen
|
||||
- [ ] N8N Workflow für Plotter-Übertragung
|
||||
|
||||
### 🎯 Nächste Schritte
|
||||
|
||||
1. **Backend deployen** (siehe `DEPLOYMENT_READY/START_HIER.txt`)
|
||||
2. **WordPress-Einstellungen** konfigurieren
|
||||
3. **Test-Bestellung** aufgeben
|
||||
4. **Prüfen** ob SVG-Dateien korrekt generiert werden
|
||||
5. **N8N Workflow** einrichten (optional)
|
||||
6. **Go Live!** 🚀
|
||||
Reference in New Issue
Block a user