Files
pfandsystem-demo/dokumentationen/MIGRATION.md
christian d86c898455 chore: initial scaffold (Whitelabel-Fork von Pfandsystem)
- Source-Copy von /root/entwicklung/pfandsystem
- docker-compose.yml umgeschrieben: pfandsystem-demo-* Container, Ports 3308/8083/3003 (alle localhost)
- Traefik-Label fuer pfandsystem.dockly.de
- Erweitertes Multi-Tenant-Schema (tenants, tenant_id auf allen Tabellen)
- Neue Tabellen: kunden_bilder, geraete
- Neue Spalten: kunden.anlieferungshinweis, kunden.lieferzeit_bis
- Rollen: superadmin, admin, user, fahrer
- .env.example + README

Code-Refactor (Tailwind, Multi-Tenant-Middleware, Erweiterungen) folgt.
2026-05-26 12:39:17 +00:00

244 lines
5.9 KiB
Markdown

# Migration von Supabase zu MySQL - Zusammenfassung
## ✅ Durchgeführte Änderungen
### 1. Backend (Node.js/Express)
**Neu erstellt:**
- `/backend/server.js` - Hauptserver mit Express
- `/backend/config/database.js` - MySQL-Verbindung
- `/backend/middleware/auth.js` - JWT-Authentifizierung
- `/backend/middleware/upload.js` - Multer File-Upload
- `/backend/routes/` - Alle API-Routen (auth, kunden, artikel, lieferungen, ruecknahmen, mitarbeiter)
- `/backend/database/schema.sql` - MySQL-Schema (konvertiert von PostgreSQL)
- `/backend/scripts/create-admin.js` - Admin-Benutzer erstellen
**Features:**
- ✅ JWT-basierte Authentifizierung (ersetzt Supabase Auth)
- ✅ Bcrypt Passwort-Hashing
- ✅ Rollen-basierte Zugriffskontrolle (user/admin)
- ✅ File-Upload mit Multer (ersetzt S3/Supabase Storage)
- ✅ Resend Email-Integration
- ✅ MySQL2 mit Connection Pooling
### 2. Frontend (React)
**Geänderte Dateien:**
- `/src/api/client.js` - Neuer API-Client (ersetzt Supabase Client)
- `/src/App.jsx` - Auth-Flow angepasst
- `/src/components/Auth/Login.jsx` - Login mit neuem API
- `/src/components/Auth/Logout.jsx` - Logout angepasst
- `/src/components/KundenVerwaltung.jsx` - API-Calls angepasst
- `/src/components/MitarbeiterVerwaltung.jsx` - API-Calls + Passwort-Feld
- `/src/components/Eingabe/VorgangForm.jsx` - File-Upload angepasst
- `/src/components/Dashboard/VorgangsListe.jsx` - Datenstruktur angepasst
- `/src/components/Dashboard/AdminDashboard.jsx` - API-Calls angepasst
**Entfernt:**
- `@supabase/supabase-js` Dependency
- `/src/supabase/client.js` (bleibt für Referenz, wird nicht mehr verwendet)
### 3. Datenbank
**MySQL-Schema:**
- `mitarbeiter` - Mit email/password_hash statt supabase_user_id
- `kunden` - Unverändert
- `artikel` - Unverändert
- `lieferungen` - Foto-URL zeigt auf lokalen Upload-Ordner
- `ruecknahmen` - Foto-URL zeigt auf lokalen Upload-Ordner
**Wichtige Änderungen:**
- UUID → CHAR(36) mit UUID()
- SERIAL → INT AUTO_INCREMENT
- timestamp with time zone → TIMESTAMP
- Foreign Keys auf auth.users entfernt
### 4. Docker & Deployment
**docker-compose.yml:**
- MySQL 8.0 Container
- phpMyAdmin Container
- Backend API Container
- Frontend nginx Container
- Volumes für Datenbank und Uploads
**nginx.conf:**
- Proxy für `/api/` → Backend
- Proxy für `/uploads/` → Backend
- HTTPS-Konfiguration beibehalten
- Let's Encrypt Integration
### 5. Umgebungsvariablen
**Frontend (.env):**
```
VITE_API_URL=https://pfandsystem.backdigital.de/api
```
**Backend (.env):**
```
DB_HOST=mysql
DB_PORT=3306
DB_USER=pfandsystem
DB_PASSWORD=***
DB_NAME=pfandsystem
JWT_SECRET=***
RESEND_API_KEY=re_6BE6Hv6U_H7ggkAT4ApbiSZ5SCo2Cf1qA
```
## 🚀 Deployment-Anleitung
### Erstmaliges Setup
1. **Umgebungsvariablen konfigurieren:**
```bash
# Backend .env anpassen
nano backend/.env
# Frontend .env anpassen
nano .env
```
2. **Docker Compose starten:**
```bash
docker-compose up -d
```
3. **Admin-Benutzer erstellen:**
```bash
docker exec -it pfandsystem-backend node scripts/create-admin.js
```
4. **Login testen:**
- URL: https://pfandsystem.backdigital.de
- Email: admin@pfandsystem.de
- Passwort: admin123 (ÄNDERN!)
### Updates deployen
```bash
./deploy.sh
```
Oder manuell:
```bash
npm run build
node fix-manifest-link.cjs
docker-compose build
docker-compose up -d
```
## 🔐 Sicherheit
### Wichtige Änderungen
1. **Passwörter:** Alle Passwörter werden mit bcrypt gehasht (10 Rounds)
2. **JWT:** Tokens sind 24h gültig
3. **File Upload:** Nur Bilder erlaubt, max 10MB
4. **CORS:** Konfiguriert für Frontend-Domain
### Zu ändern vor Produktion
- [ ] `JWT_SECRET` in backend/.env
- [ ] MySQL Root-Passwort in docker-compose.yml
- [ ] MySQL User-Passwort in docker-compose.yml und backend/.env
- [ ] Admin-Passwort nach erstem Login
- [ ] HTTPS-Zertifikate prüfen
## 📊 API-Änderungen
### Authentifizierung
**Vorher (Supabase):**
```javascript
const { data, error } = await supabase.auth.signInWithPassword({ email, password });
```
**Nachher (Custom API):**
```javascript
const data = await api.login(email, password);
```
### Daten abrufen
**Vorher (Supabase):**
```javascript
const { data } = await supabase.from('kunden').select('*');
```
**Nachher (Custom API):**
```javascript
const data = await api.getKunden();
```
### File Upload
**Vorher (Supabase Storage):**
```javascript
const { data } = await supabase.storage.from('belegfotos').upload(fileName, file);
```
**Nachher (Multer):**
```javascript
await api.createLieferung({ kunde_id, artikel_id, anzahl }, foto);
```
## 🐛 Bekannte Probleme & Lösungen
### Problem: Backend startet nicht
**Lösung:**
```bash
docker-compose logs backend
# Prüfe Datenbank-Verbindung
docker-compose restart mysql
```
### Problem: Frontend zeigt keine Daten
**Lösung:**
1. API-URL in `.env` prüfen
2. Browser-Cache leeren
3. Service Worker deregistrieren
### Problem: Login funktioniert nicht
**Lösung:**
1. Admin-Benutzer erstellen: `docker exec -it pfandsystem-backend node scripts/create-admin.js`
2. JWT_SECRET in backend/.env prüfen
3. Backend-Logs prüfen: `docker-compose logs backend`
## 📝 Nächste Schritte
### Sofort
- [ ] Alle Passwörter ändern
- [ ] Admin-Login testen
- [ ] Daten aus Supabase exportieren und importieren
- [ ] Funktionstest aller Features
### Optional
- [ ] Email-Benachrichtigungen mit Resend testen
- [ ] Backup-Strategie einrichten
- [ ] Monitoring einrichten
- [ ] CI/CD Pipeline aufsetzen
## 📧 Support
Bei Fragen zur Migration:
- Backend-Logs: `docker-compose logs -f backend`
- Frontend-Logs: Browser DevTools Console
- Datenbank: phpMyAdmin auf http://localhost:8081
## 🎉 Fertig!
Die Migration ist abgeschlossen. Das System ist jetzt vollständig unabhängig von Supabase und läuft mit:
- ✅ MySQL Datenbank
- ✅ Node.js/Express Backend
- ✅ React Frontend
- ✅ Docker Compose
- ✅ HTTPS/SSL
- ✅ phpMyAdmin
- ✅ Lokaler File Storage