diff --git a/ERWEITERUNG.md b/ERWEITERUNG.md deleted file mode 100644 index ee8cd02..0000000 --- a/ERWEITERUNG.md +++ /dev/null @@ -1,468 +0,0 @@ -# Image-Uploader Erweiterung: Multi-Image Upload mit Beschreibung - -## 🎯 Ziel -Erweiterung der bestehenden Single-Image-Upload-Funktionalität zu einem Multi-Image-Upload mit Beschreibungstext für spätere Slideshow-Nutzung. - -## 📊 Aufwandsschätzung -**Geschätzter Aufwand: 8-12 Stunden** (verteilt auf 2-3 Arbeitstage) - -### Komplexitätsbewertung: ⭐⭐⭐☆☆ (Mittel) - -## 🔄 Änderungsübersicht - -### Frontend Änderungen (5-7 Stunden) -- **Neue Multi-Upload-Komponente** -- **UI für Beschreibungstext** -- **Vorschau-Galerie** -- **Upload-Progress für mehrere Dateien** - -### Backend Änderungen (2-3 Stunden) -- **Neue API-Endpoints** -- **Datenbank/JSON-Struktur für Upload-Gruppen** -- **Batch-Upload-Verarbeitung** - -### Integration & Testing (1-2 Stunden) -- **Frontend-Backend-Integration** -- **Error Handling** -- **UI/UX Tests** - ---- - -## 🏗️ Technische Umsetzung - -### 1. Backend-Erweiterungen - -#### 1.1 Neue Datenstruktur -```javascript -// Neue Upload-Group Struktur -{ - groupId: "unique-group-id", - description: "Benutzer-Beschreibung", - uploadDate: "2025-10-11T10:30:00Z", - images: [ - { - fileName: "abc123.jpg", - originalName: "foto1.jpg", - filePath: "/upload/abc123.jpg", - uploadOrder: 1 - }, - { - fileName: "def456.png", - originalName: "foto2.png", - filePath: "/upload/def456.png", - uploadOrder: 2 - } - ] -} -``` - -#### 1.2 Neue API-Endpoints -- `POST /api/upload/batch` - Multi-Image Upload -- `GET /api/groups/:groupId` - Upload-Gruppe abrufen -- `GET /api/groups` - Alle Upload-Gruppen auflisten -- `GET /api/slideshow/:groupId` - Slideshow-Daten - -#### 1.3 Dateien zu erstellen/ändern: -``` -backend/src/ -├── routes/ -│ ├── upload.js # ✏️ Erweitern -│ ├── batch-upload.js # 🆕 Neu -│ └── groups.js # 🆕 Neu -├── models/ -│ └── uploadGroup.js # 🆕 Neu -├── utils/ -│ └── groupStorage.js # 🆕 Neu (JSON-basiert) -└── constants.js # ✏️ Neue Endpoints hinzufügen -``` - -### 2. Frontend-Erweiterungen - -#### 2.1 Neue Komponenten -``` -frontend/src/Components/ -├── ComponentUtils/ -│ ├── MultiImageUpload.js # 🆕 Haupt-Upload-Komponente -│ ├── ImagePreviewGallery.js # 🆕 Vorschau der ausgewählten Bilder -│ ├── DescriptionInput.js # 🆕 Textfeld für Beschreibung -│ ├── UploadProgress.js # 🆕 Progress-Anzeige für alle Dateien -│ └── Css/ -│ ├── MultiUpload.css # 🆕 Styling -│ └── ImageGallery.css # 🆕 Galerie-Styling -├── Pages/ -│ ├── MultiUploadPage.js # 🆕 Neue Seite für Multi-Upload -│ ├── SlideshowPage.js # 🆕 Slideshow-Anzeige -│ └── GroupsOverviewPage.js # 🆕 Übersicht aller Upload-Gruppen -└── Utils/ - └── batchUpload.js # 🆕 Batch-Upload-Logik -``` - -#### 2.2 Routing-Erweiterungen -```javascript -// Neue Routen in App.js - - - -``` - ---- - -## 📋 Detaillierte Implementierungsschritte - -### Phase 1: Backend-Grundlage (2-3h) - -#### Schritt 1.1: Upload-Gruppen Datenmodell -```javascript -// backend/src/models/uploadGroup.js -class UploadGroup { - constructor(description) { - this.groupId = generateId(); - this.description = description; - this.uploadDate = new Date().toISOString(); - this.images = []; - } - - addImage(fileName, originalName, uploadOrder) { - this.images.push({ - fileName, - originalName, - filePath: `/upload/${fileName}`, - uploadOrder - }); - } -} -``` - -#### Schritt 1.2: JSON-basierte Speicherung -```javascript -// backend/src/utils/groupStorage.js -const fs = require('fs'); -const path = require('path'); - -const GROUPS_FILE = path.join(__dirname, '../data/upload-groups.json'); - -class GroupStorage { - static saveGroup(group) { - // JSON-Datei lesen, Gruppe hinzufügen, zurückschreiben - } - - static getGroup(groupId) { - // Gruppe aus JSON-Datei laden - } - - static getAllGroups() { - // Alle Gruppen laden - } -} -``` - -#### Schritt 1.3: Batch-Upload API -```javascript -// backend/src/routes/batch-upload.js -router.post('/api/upload/batch', (req, res) => { - const { description } = req.body; - const files = req.files.images; // Array von Dateien - - const group = new UploadGroup(description); - - // Alle Dateien verarbeiten - files.forEach((file, index) => { - const fileName = generateId() + '.' + getFileExtension(file.name); - file.mv(`upload/${fileName}`); - group.addImage(fileName, file.name, index + 1); - }); - - GroupStorage.saveGroup(group); - res.json({ groupId: group.groupId, message: 'Upload successful' }); -}); -``` - -### Phase 2: Frontend Multi-Upload UI (3-4h) - -#### Schritt 2.1: Multi-Image Dropzone -```javascript -// frontend/src/Components/ComponentUtils/MultiImageUpload.js -import { useDropzone } from 'react-dropzone'; - -function MultiImageUpload({ onImagesSelected }) { - const { getRootProps, getInputProps, acceptedFiles } = useDropzone({ - accept: 'image/*', - multiple: true, - onDrop: (files) => { - onImagesSelected(files); - } - }); - - return ( -
- -

Ziehe mehrere Bilder hierher oder klicke zum Auswählen

-

({acceptedFiles.length} Dateien ausgewählt)

-
- ); -} -``` - -#### Schritt 2.2: Bild-Vorschau Galerie -```javascript -// frontend/src/Components/ComponentUtils/ImagePreviewGallery.js -function ImagePreviewGallery({ images, onRemoveImage, onReorderImages }) { - return ( -
- {images.map((image, index) => ( -
- {`Preview - -
{index + 1}
-
- ))} -
- ); -} -``` - -#### Schritt 2.3: Beschreibungs-Input -```javascript -// frontend/src/Components/ComponentUtils/DescriptionInput.js -function DescriptionInput({ description, onDescriptionChange, maxLength = 500 }) { - return ( -
- -