✅ Phase 1 Complete (Nov 9-10, 2025):
- GDPR-compliant consent management fully implemented
- Mandatory workshop display consent + optional social media consents
- Consent badges, filtering, and CSV/JSON export in moderation panel
- Automatic migration system fixed (inline comments handling)
- GDPR compliance validated: 72 production groups with display_in_workshop = 0
- All features tested and production-ready
Documentation Updates:
- FEATURE_PLAN-social-media.md: All Phase 1 tasks marked complete
- README.md: Added consent system to features, updated database schema, new API endpoints
- README.dev.md: Complete developer guide with debugging, testing, and troubleshooting
Technical Achievements:
- 12 commits over 2 days (faster than 4-5 day estimate)
- Zero GDPR violations (retroactive consent fix validated)
- Zero breaking changes to existing functionality
Ready for Code Review and Production Deployment
267 lines
7.4 KiB
Markdown
267 lines
7.4 KiB
Markdown
# Development Setup
|
|
|
|
## Schnellstart
|
|
|
|
### Starten (Development Environment)
|
|
|
|
```bash
|
|
# Mit Script (empfohlen):
|
|
./dev.sh
|
|
|
|
# Oder manuell:
|
|
docker compose -f docker/dev/docker-compose.yml up -d
|
|
```
|
|
|
|
### Zugriff
|
|
- **Frontend**: http://localhost:3000 (Hot Module Reloading aktiv)
|
|
- **Backend**: http://localhost:5001 (API)
|
|
- **Slideshow**: http://localhost:3000/slideshow
|
|
- **Moderation**: http://localhost:3000/moderation (Entwicklung: ohne Auth)
|
|
|
|
### Logs verfolgen
|
|
```bash
|
|
# Alle Services:
|
|
docker compose -f docker/dev/docker-compose.yml logs -f
|
|
|
|
# Nur Frontend:
|
|
docker compose -f docker/dev/docker-compose.yml logs -f frontend-dev
|
|
|
|
# Nur Backend:
|
|
docker compose -f docker/dev/docker-compose.yml logs -f backend-dev
|
|
```
|
|
|
|
## Entwicklung
|
|
|
|
### Frontend-Entwicklung
|
|
- Code in `frontend/src/` editieren → Hot Module Reload übernimmt Änderungen
|
|
- Volumes: Source-Code wird live in Container gemountet
|
|
- Container-Namen: `image-uploader-frontend-dev`
|
|
|
|
**Wichtige Komponenten:**
|
|
- `Components/Pages/MultiUploadPage.js` - Upload-Interface mit Consent-Management
|
|
- `Components/ComponentUtils/MultiUpload/ConsentCheckboxes.js` - GDPR-konforme Consent-UI
|
|
- `Components/Pages/ModerationGroupsPage.js` - Moderation mit Consent-Filtern
|
|
- `services/reorderService.js` - Drag-and-Drop Logik
|
|
- `hooks/useImagePreloader.js` - Slideshow-Preloading
|
|
|
|
### Backend-Entwicklung
|
|
- Code in `backend/src/` editieren → Nodemon übernimmt Änderungen automatisch
|
|
- Container-Namen: `image-uploader-backend-dev`
|
|
- Environment: `NODE_ENV=development`
|
|
|
|
**Wichtige Module:**
|
|
- `repositories/GroupRepository.js` - Consent-Management & CRUD
|
|
- `repositories/SocialMediaRepository.js` - Plattform- & Consent-Verwaltung
|
|
- `routes/batchUpload.js` - Upload mit Consent-Validierung
|
|
- `database/DatabaseManager.js` - Automatische Migrationen
|
|
- `services/GroupCleanupService.js` - 7-Tage-Cleanup-Logik
|
|
|
|
### Datenbank-Entwicklung
|
|
|
|
#### Migrationen erstellen
|
|
```bash
|
|
# Neue Migration anlegen:
|
|
touch backend/src/database/migrations/XXX_description.sql
|
|
|
|
# Migrationen werden automatisch beim Backend-Start ausgeführt
|
|
# Manuell: docker compose -f docker/dev/docker-compose.yml restart backend-dev
|
|
```
|
|
|
|
#### Datenbank-Zugriff
|
|
```bash
|
|
# SQLite Shell:
|
|
docker compose -f docker/dev/docker-compose.yml exec backend-dev sqlite3 /usr/src/app/src/data/db/image_uploader.db
|
|
|
|
# Schnellabfragen:
|
|
docker compose -f docker/dev/docker-compose.yml exec backend-dev sqlite3 /usr/src/app/src/data/db/image_uploader.db "SELECT * FROM groups LIMIT 5;"
|
|
|
|
# Schema anzeigen:
|
|
docker compose -f docker/dev/docker-compose.yml exec backend-dev sqlite3 /usr/src/app/src/data/db/image_uploader.db ".schema"
|
|
```
|
|
|
|
#### Migrationen debuggen
|
|
```bash
|
|
# Migration-Status prüfen:
|
|
docker compose -f docker/dev/docker-compose.yml exec backend-dev sqlite3 /usr/src/app/src/data/db/image_uploader.db "SELECT * FROM schema_migrations;"
|
|
|
|
# Backend-Logs mit Migration-Output:
|
|
docker compose -f docker/dev/docker-compose.yml logs backend-dev | grep -i migration
|
|
```
|
|
|
|
### Konfiguration anpassen
|
|
- **Frontend**: `docker/dev/frontend/config/.env`
|
|
- **Backend**: `docker/dev/backend/config/.env`
|
|
- **Nginx**: `docker/dev/frontend/nginx.conf`
|
|
|
|
## Testing
|
|
|
|
### Consent-System testen
|
|
```bash
|
|
# 1. Upload mit und ohne Workshop-Consent
|
|
# 2. Social Media Checkboxen testen (Facebook, Instagram, TikTok)
|
|
# 3. Moderation-Filter prüfen:
|
|
# - Alle Gruppen
|
|
# - Nur Werkstatt
|
|
# - Facebook / Instagram / TikTok
|
|
# 4. Export-Funktion (CSV/JSON) testen
|
|
```
|
|
|
|
### Cleanup-System testen
|
|
```bash
|
|
# Test-Script verwenden:
|
|
./tests/test-cleanup.sh
|
|
|
|
# Oder manuell:
|
|
# 1. Upload ohne Approval
|
|
# 2. Gruppe zurückdatieren (Script verwendet)
|
|
# 3. Preview: GET http://localhost:5001/api/admin/cleanup/preview
|
|
# 4. Trigger: POST http://localhost:5001/api/admin/cleanup/trigger
|
|
# 5. Log prüfen: GET http://localhost:5001/api/admin/deletion-log
|
|
```
|
|
|
|
### API-Tests
|
|
|
|
```bash
|
|
# Consent-Endpoints:
|
|
curl http://localhost:5001/api/social-media/platforms
|
|
curl http://localhost:5001/api/groups/by-consent?workshopConsent=true
|
|
curl http://localhost:5001/api/admin/consents/export
|
|
|
|
# Upload testen (mit Consents):
|
|
curl -X POST http://localhost:5001/api/upload-batch \
|
|
-F "images=@test.jpg" \
|
|
-F "year=2025" \
|
|
-F "title=Test" \
|
|
-F "name=Developer" \
|
|
-F 'consents={"workshopConsent":true,"socialMediaConsents":[{"platformId":1,"consented":true}]}'
|
|
```
|
|
|
|
## Container-Management
|
|
|
|
```bash
|
|
# Status anzeigen:
|
|
docker compose -f docker/dev/docker-compose.yml ps
|
|
|
|
# Container neustarten:
|
|
docker compose -f docker/dev/docker-compose.yml restart
|
|
|
|
# Container neu bauen (nach Package-Updates):
|
|
docker compose -f docker/dev/docker-compose.yml build --no-cache
|
|
|
|
# Stoppen:
|
|
docker compose -f docker/dev/docker-compose.yml down
|
|
|
|
# Mit Volumes löschen (ACHTUNG: Löscht Datenbank!):
|
|
docker compose -f docker/dev/docker-compose.yml down -v
|
|
```
|
|
|
|
### Shell-Zugriff
|
|
|
|
```bash
|
|
# Frontend Container:
|
|
docker compose -f docker/dev/docker-compose.yml exec frontend-dev bash
|
|
|
|
# Backend Container:
|
|
docker compose -f docker/dev/docker-compose.yml exec backend-dev bash
|
|
|
|
# Datenbank-Shell:
|
|
docker compose -f docker/dev/docker-compose.yml exec backend-dev sqlite3 /usr/src/app/src/data/db/image_uploader.db
|
|
```
|
|
|
|
## Debugging
|
|
|
|
### Backend Debugging
|
|
```bash
|
|
# Live-Logs:
|
|
docker compose -f docker/dev/docker-compose.yml logs -f backend-dev
|
|
|
|
# Nodemon Restart:
|
|
# → Änderungen in backend/src/** werden automatisch erkannt
|
|
|
|
# Fehlerhafte Migration fixen:
|
|
# 1. Migration-Eintrag löschen:
|
|
docker compose -f docker/dev/docker-compose.yml exec backend-dev sqlite3 /usr/src/app/src/data/db/image_uploader.db "DELETE FROM schema_migrations WHERE migration_name='XXX.sql';"
|
|
# 2. Backend neustarten:
|
|
docker compose -f docker/dev/docker-compose.yml restart backend-dev
|
|
```
|
|
|
|
### Frontend Debugging
|
|
```bash
|
|
# React DevTools im Browser verwenden
|
|
# Network Tab für API-Calls prüfen
|
|
# Console für Fehler checken
|
|
|
|
# Nginx-Reload (bei Konfig-Änderungen):
|
|
docker compose -f docker/dev/docker-compose.yml exec frontend-dev nginx -s reload
|
|
```
|
|
|
|
### Datenbank-Backup & Restore
|
|
```bash
|
|
# Backup:
|
|
docker cp image-uploader-backend-dev:/usr/src/app/src/data/db/image_uploader.db ./backup.db
|
|
|
|
# Restore:
|
|
docker cp ./backup.db image-uploader-backend-dev:/usr/src/app/src/data/db/image_uploader.db
|
|
docker compose -f docker/dev/docker-compose.yml restart backend-dev
|
|
```
|
|
|
|
## Häufige Probleme
|
|
|
|
### "Migration failed" Fehler
|
|
**Problem**: Inline-Kommentare in SQL-Statements
|
|
**Lösung**: DatabaseManager entfernt diese automatisch (seit Commit 8e62475)
|
|
|
|
### "No such column: display_in_workshop"
|
|
**Problem**: Migration 005 nicht ausgeführt
|
|
**Lösung**: Backend neu starten oder manuell Migration ausführen
|
|
|
|
### Port 3000 bereits belegt
|
|
**Problem**: Anderer Prozess nutzt Port 3000
|
|
**Lösung**:
|
|
```bash
|
|
lsof -ti:3000 | xargs kill -9
|
|
# Oder Port in docker/dev/docker-compose.yml ändern
|
|
```
|
|
|
|
### Consent-Filter zeigt nichts
|
|
**Problem**: `display_in_workshop` fehlt in groupFormatter
|
|
**Lösung**: Bereits gefixt (Commit f049c47)
|
|
|
|
## Git Workflow
|
|
|
|
```bash
|
|
# Feature Branch erstellen:
|
|
git checkout -b feature/my-feature
|
|
|
|
# Änderungen committen:
|
|
git add .
|
|
git commit -m "feat: Add new feature"
|
|
|
|
# Vor Merge: Code testen!
|
|
# - Upload-Flow mit Consents
|
|
# - Moderation mit Filtern
|
|
# - Slideshow-Funktionalität
|
|
# - Cleanup-System
|
|
|
|
# Push:
|
|
git push origin feature/my-feature
|
|
```
|
|
|
|
## Nützliche Befehle
|
|
|
|
```bash
|
|
# Alle Container-IDs:
|
|
docker ps -a
|
|
|
|
# Speicherplatz prüfen:
|
|
docker system df
|
|
|
|
# Ungenutztes aufräumen:
|
|
docker system prune -a
|
|
|
|
# Logs durchsuchen:
|
|
docker compose -f docker/dev/docker-compose.yml logs | grep ERROR
|
|
|
|
# Performance-Monitoring:
|
|
docker stats
|
|
``` |