Files
SAP-PLEX-SYNC/README.md
b0rbor4d 5b447acd1c
Some checks failed
CI/CD Pipeline / Backend Tests (push) Failing after 27s
CI/CD Pipeline / Frontend Tests (push) Failing after 15s
CI/CD Pipeline / Docker Build (push) Has been skipped
CI/CD Pipeline / Security Scan (push) Has been skipped
Initial commit
2026-04-15 01:41:49 +02:00

468 lines
12 KiB
Markdown
Executable File

# SAP Business One ↔ Plesk Synchronisations-Webapp
Eine Enterprise-Webapp zur automatischen Synchronisation zwischen SAP Business One (Systemhaus One) und Plesk Webservern für die Abrechnung von Verbrauchskosten.
## 📁 Projektstruktur
```
sap-sync-app/
├── backend/ # Rust Backend (Axum + Tokio)
│ ├── src/
│ │ ├── main.rs # Entry Point
│ │ ├── config/ # Configuration Management
│ │ ├── db/ # Database Pool & Migrations
│ │ ├── handlers/ # API Endpoints
│ │ ├── models/ # Data Models
│ │ ├── routes/ # API Routes
│ │ ├── services/ # Business Logic
│ │ ├── utils/ # Utilities
│ │ └── state.rs # Application State
│ ├── Cargo.toml # Rust Dependencies
│ └── Dockerfile # Backend Container
├── frontend/ # React Frontend (MUI)
│ ├── src/
│ │ ├── App.tsx # Main Application
│ │ ├── components/ # React Components
│ │ ├── contexts/ # Auth & I18n Contexts
│ │ ├── pages/ # React Pages
│ │ └── main.tsx # Entry Point
│ ├── package.json # Node Dependencies
│ └── Dockerfile # Frontend Container
├── database/
│ ├── init.sql # PostgreSQL Schema
│ └── seeds/ # Seed Data
├── nginx/
│ └── nginx.conf # Reverse Proxy Config
├── docker-compose.yml # Multi-Service Setup
├── .env.example # Environment Template
└── README.md # This File
```
## ✅ Features (Phase 1 & 2)
### Authentication & Security
-**Session-based Auth**: PostgreSQL Session Store
-**Password Policy**: Min 8 chars, Groß-/Kleinbuchstaben, Ziffern, Sonderzeichen
-**Brute Force Protection**: 5 fehlgeschlagene Versuche → 1 Stunde Lockout
-**CSRF Protection**: Token-basiert (24h expiry)
-**MFA**: Optional TOTP (Google Authenticator, Authy)
-**Secure Cookies**: HTTP-only, Secure, SameSite Strict
### SAP Integration
-**Service Layer API Client**: REST API Verbindung
-**OAuth2 Authentication**: Sichere Authentifizierung
-**Customer Management**: Get, Create, Update
-**Item Management**: Für Abonnements
-**Contract Management**: Vertragsdaten
-**Connection Testing**: Health Checks
### Plesk Integration
-**REST API Client**: Plesk API v2
-**Customer Management**: CRUD Operations
-**Subscription Management**: Webspaces, Domains
-**Usage Metrics**: CPU, RAM, Disk, Bandwidth
-**Connection Testing**: Health Checks
### Sync Engine
-**Worker Pool**: Tokio-basierte Parallelverarbeitung
-**Conflict Resolution**: 4 Strategien (SAP First, Plesk First, Manual, Timestamp)
-**Bidirectional Sync**: SAP ↔ Plesk
-**Progress Tracking**: Echtzeit-Status
-**Error Handling**: Retry Logic
-**Job Queue**: Asynchrone Verarbeitung
### Reports & Analytics
-**Revenue Report**: Umsatzübersicht
-**Usage Report**: Verbrauchsmetriken
-**Sync History**: Synchronisations-Historie
-**Export**: CSV, Excel (xlsx), PDF
### Notifications
-**Email Notifications**: SMTP (Lettre)
-**Webhooks**: HTTP Callbacks
-**Dashboard Alerts**: Real-time Status
-**Error Notifications**: Bei Fehlern
### Frontend
-**Dashboard**: Übersicht, Status, Stats
-**Sync Control**: Start, Stop, Monitor
-**Reports**: Charts, Export
-**Settings**: Profile, Security, Sync Config
-**Multi-Language**: DE, FR, EN, SPA
### Infrastructure
-**Docker Compose**: Multi-Container Setup
-**Nginx**: Reverse Proxy, SSL, Rate Limiting
-**PostgreSQL**: Database
-**Redis**: Caching
-**pgAdmin**: Database Management UI
-**MailHog**: SMTP Test Server
## 🛠 Tech Stack
### Backend
- **Language**: Rust 1.75+
- **Framework**: Axum 0.7
- **Async Runtime**: Tokio 1.35
- **Database**: PostgreSQL 15 + sqlx 0.7
- **HTTP Client**: reqwest 0.11
- **Auth**: tower-session + PostgreSQL Store
- **Security**: Argon2, CSRF, TOTP
### Frontend
- **Framework**: React 18
- **Build Tool**: Vite 5
- **UI Library**: Material UI 5.14
- **Routing**: React Router 6
- **HTTP Client**: Axios 1.6
- **Charts**: Recharts 2.10
- **i18n**: i18next 23
### Infrastructure
- **Container**: Docker 24+
- **Orchestration**: Docker Compose
- **Proxy**: Nginx Alpine
- **Database**: PostgreSQL 15 Alpine
- **Cache**: Redis 7 Alpine
- **Management**: pgAdmin 4
## 🚀 Quick Start
### 1. Voraussetzungen
- Docker 24.0+ installiert
- Docker Compose 2.20+ installiert
- Git installiert
- Min. 4 GB RAM, 20 GB Speicher
### 2. Installation
```bash
# Repository klonen
git clone <repository-url>
cd sap-sync-app
# Umgebungsvariablen konfigurieren
cp .env.example .env
# .env mit echten Werten bearbeiten
# Alle Services starten
docker-compose up -d
# Logs überprüfen
docker-compose logs -f
```
### 3. Erste Schritte
```bash
# Admin-User erstellen (wird beim ersten Start automatisch erstellt)
# Default: username: admin, password: <generiert>
# Zugriff:
# Frontend: http://localhost:3000
# Backend API: http://localhost:3001/api
# pgAdmin: http://localhost:8080
# MailHog: http://localhost:8025
```
### 4. SAP & Plesk konfigurieren
1. **SAP Service Layer**:
- URL und Credentials in `.env` eintragen
- `APP__SAP__URL` und `APP__SAP__CREDENTIALS`
2. **Plesk API**:
- API Key generieren in Plesk
- In `.env` eintragen: `APP__PLESK__API_KEY`
3. **Sync konfigurieren**:
- Frontend öffnen → Settings → Sync Settings
- Default Direction wählen
- Conflict Resolution festlegen
## 📊 API Endpoints
### Authentication
```
POST /api/auth/login # Login
POST /api/auth/logout # Logout
GET /api/auth/me # Current User
POST /api/auth/change-password # Change Password
GET /api/auth/csrf-token # Get CSRF Token
```
### Sync Management
```
GET /api/sync/status # Sync Status
POST /api/sync/start # Start Sync
POST /api/sync/stop # Stop Sync
GET /api/sync/jobs # List Jobs
GET /api/sync/jobs/:id # Job Details
```
### Configuration
```
GET /api/config # Get Config
PUT /api/config # Update Config
```
### Reports
```
GET /api/reports/revenue # Revenue Report
GET /api/reports/usage # Usage Report
GET /api/reports/sync-history # Sync History
GET /api/reports/export/:format # Export (csv/xlsx/pdf)
```
### Health & Monitoring
```
GET /api/health # Overall Health
GET /api/health/sap # SAP Connection
GET /api/health/plesk # Plesk Connection
```
### Notifications
```
GET /api/notifications # List Notifications
PUT /api/notifications/:id/read # Mark as Read
POST /api/webhooks # Create Webhook
GET /api/webhooks # List Webhooks
```
## 🔧 Konfiguration
### .env Beispiel
```env
# Database
DB_PASSWORD=your_secure_password
DATABASE_URL=postgresql://sap_user:${DB_PASSWORD}@pgsql:5432/sap_sync
# Backend
APP__SERVER__HOST=0.0.0.0
APP__SERVER__PORT=3001
APP__SESSION__SECURE=false
APP__MFA__ENABLED=true
# SAP Connection
APP__SAP__URL=https://sap-server:50000/b1s/v1
APP__SAP__COMPANY_DB=SBODemoDE
APP__SAP__USERNAME=manager
APP__SAP__PASSWORD=manager
# Plesk Connection
APP__PLESK__URL=https://plesk-server:8443/api/v2
APP__PLESK__API_KEY=your-api-key
# Email (SMTP)
SMTP_HOST=smtp.gmail.com
SMTP_PORT=587
SMTP_USERNAME=your_email@gmail.com
SMTP_PASSWORD=your_app_password
SMTP_FROM=noreply@sap-sync.local
# Frontend
VITE_API_URL=http://localhost:3001/api
```
## 🗄️ Datenbank-Schema
### Haupttabellen
- **users**: Admin-Benutzer
- **sessions**: Session Management
- **customers**: SAP ↔ Plesk Customer Mapping
- **subscriptions**: Abonnements/Verträge
- **usage_metrics**: Verbrauchsdaten
- **sync_jobs**: Sync-Jobs Queue
- **sync_logs**: Synchronisations-Logs
- **notifications**: Benachrichtigungen
- **webhooks**: Webhook-Konfiguration
- **config**: System-Konfiguration
### Erweiterte Features
- **JSONB Columns**: Flexible Datenspeicherung
- **GIN/GIST Indexes**: Schnelle JSON-Suche
- **Materialized Views**: Dashboard Performance
- **Triggers**: Automatische Timestamps
- **Full-text Search**: Kunden-Suche
## 🔒 Sicherheit
### Password Policy
- Min 8 Zeichen
- Min 1 Großbuchstabe (A-Z)
- Min 1 Kleinbuchstabe (a-z)
- Min 1 Ziffer (0-9)
- Min 1 Sonderzeichen (!@#$%&*)
### Session Security
- HTTP-only Cookies
- Secure Flag (HTTPS)
- SameSite Strict
- 30 Minuten Expiry
- Remember Me (7 Tage)
### Rate Limiting
- General API: 10 req/s
- Auth Endpoints: 5 req/min
- Nginx Built-in
## 📈 Performance
### Backend
- Async Rust (Tokio)
- Connection Pooling (sqlx)
- Worker Pool (Sync Engine)
- JSONB Queries (PostgreSQL)
### Frontend
- React 18 (Concurrent Rendering)
- Vite (Fast Build)
- Code Splitting
- Lazy Loading
## 🧪 Testing
```bash
# Backend Tests
cd backend
cargo test
# Frontend Tests
cd frontend
npm test
# Integration Tests
docker-compose -f docker-compose.test.yml up
```
## 📦 Production Deployment
### Plesk Deployment
1. **Docker auf Plesk Server**:
```bash
# Docker installieren
curl -fsSL https://get.docker.com | bash
# Repository klonen
git clone <repo> /opt/sap-sync
cd /opt/sap-sync
```
2. **SSL Zertifikate**:
```bash
# Certbot für Let's Encrypt
certbot certonly --standalone -d your-domain.com
# Zertifikate kopieren
cp /etc/letsencrypt/live/your-domain.com/fullchain.pem nginx/ssl/cert.pem
cp /etc/letsencrypt/live/your-domain.com/privkey.pem nginx/ssl/key.pem
```
3. **Environment konfigurieren**:
```bash
cp .env.example .env
# .env bearbeiten mit Production-Werten
```
4. **Services starten**:
```bash
docker-compose up -d
```
5. **Plesk Proxy**:
- Nginx Proxy in Plesk konfigurieren
- Domain → Apache & nginx Settings → Additional nginx directives
```nginx
location / {
proxy_pass http://localhost:3000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
```
## 🐛 Troubleshooting
### Backend startet nicht
```bash
# Logs prüfen
docker-compose logs backend
# Database Connection testen
docker-compose exec backend psql $DATABASE_URL -c "SELECT 1"
```
### Frontend Build Fehler
```bash
# Dependencies neu installieren
cd frontend
rm -rf node_modules package-lock.json
npm install
npm run build
```
### SAP/Plesk Connection Failed
```bash
# Connection testen
curl -X GET http://localhost:3001/api/health/sap
curl -X GET http://localhost:3001/api/health/plesk
# Credentials prüfen
docker-compose exec backend env | grep SAP
docker-compose exec backend env | grep PLESK
```
## 📝 Development
### Backend Development
```bash
cd backend
# Rust installieren (falls nicht vorhanden)
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
# Cargo Watch für Hot Reload
cargo install cargo-watch
cargo watch -x run
# Tests
cargo test
```
### Frontend Development
```bash
cd frontend
# Dependencies
npm install
# Dev Server
npm run dev
# Build
npm run build
```
## 📄 License
MIT License - siehe LICENSE Datei
## 🤝 Contributing
1. Fork erstellen
2. Feature Branch (`git checkout -b feature/AmazingFeature`)
3. Committen (`git commit -m 'Add some AmazingFeature'`)
4. Push (`git push origin feature/AmazingFeature`)
5. Pull Request öffnen
## 📞 Support
- **Issues**: GitHub Issues
- **Documentation**: `/docs` Ordner
- **Email**: support@sap-sync.local
---
**Erstellt mit ❤️ für Enterprise SAP ↔ Plesk Synchronisation**