484 lines
15 KiB
Markdown
Executable File
484 lines
15 KiB
Markdown
Executable File
# 🎨 NeoNail DB - Projekt Prompt
|
|
|
|
## 📋 Projekt-Übersicht
|
|
|
|
**NeoNail DB** ist eine Laravel-basierte Webanwendung zur Verwaltung von NeoNail-Nagellack-Sammlungen.
|
|
|
|
### 🎯 Hauptfunktionen
|
|
- ✅ Kollaborative Nagellack-Datenbank
|
|
- ✅ User können eigene Lacke hinzufügen (werden automatisch zum Hauptkatalog hinzugefügt)
|
|
- ✅ Hersteller-Verwaltung für alle User (flexibel und kollaborativ)
|
|
- ✅ Mobile-optimiert für Handy-Nutzung im Laden
|
|
- ✅ Admin-Interface für User-Verwaltung
|
|
- ✅ Bild-Upload mit automatischer Optimierung
|
|
- ✅ Suchfunktion nach Name/Nummer
|
|
- ✅ SQLite-Datenbank (einfach zu deployen)
|
|
|
|
## 🏗️ Technische Architektur
|
|
|
|
### Framework & Versionen
|
|
- **Laravel 12.22.1** (PHP 8.4.11)
|
|
- **Bootstrap 5** (Responsive Design)
|
|
- **Intervention Image** (Bildverarbeitung)
|
|
- **SQLite** (Datenbank)
|
|
|
|
### Datenbank-Schema
|
|
```sql
|
|
-- users (Laravel Standard + is_admin Spalte)
|
|
-- manufacturers (Name, Description, Website, Country)
|
|
-- nail_polishes (Name, Number, Manufacturer_ID, Image)
|
|
-- user_nail_polishes (Pivot-Tabelle für User-Sammlungen)
|
|
```
|
|
|
|
### Wichtige Models
|
|
- `User` - Benutzer mit `nailPolishes()` Relationship
|
|
- `Manufacturer` - Hersteller mit `nailPolishes()` Relationship
|
|
- `NailPolish` - Nagellacke mit `users()` und `manufacturer()` Relationship
|
|
|
|
## 🔧 Aktuelle Deployment-Situation
|
|
|
|
### Webspace-Status
|
|
- **URL:** http://192.168.30.81/
|
|
- **Struktur:** Direkt im HTML-Verzeichnis
|
|
- **Status:** Neue .env Datei erstellt, Setup bereit
|
|
|
|
### Datei-Struktur auf Webspace
|
|
```
|
|
/html/ (oder /var/www/html/)
|
|
├── .htaccess ← Umleitung auf public/
|
|
├── index.php ← Fallback-Umleitung
|
|
├── .env ← Konfiguration (neu erstellt)
|
|
├── database.sqlite ← SQLite-Datenbank im Hauptverzeichnis
|
|
├── public/ ← Laravel Document Root
|
|
├── app/ ← Laravel App
|
|
├── bootstrap/ ← Laravel Bootstrap
|
|
├── config/ ← Laravel Config
|
|
├── database/ ← Migrationen
|
|
├── resources/ ← Views, Assets
|
|
├── routes/ ← Routen
|
|
├── storage/ ← Speicher (777 Berechtigungen)
|
|
├── vendor/ ← Composer Dependencies
|
|
├── test.php ← PHP-Diagnose
|
|
├── laravel-test.php ← Laravel-Diagnose
|
|
├── fix-permissions.sh ← Berechtigungs-Script
|
|
├── setup-html-directory.sh ← Neues Setup-Script
|
|
└── env-production-example.txt ← Neue .env Vorlage
|
|
```
|
|
|
|
### Aktuelle .env Konfiguration
|
|
```env
|
|
APP_NAME="NeoNail DB"
|
|
APP_ENV=production
|
|
APP_KEY=base64:+LTZYPKjkZ+O3iFTgU2sS+9bNvxxvG8Kw8JSEPiG7Rs=
|
|
APP_DEBUG=false
|
|
APP_URL=http://192.168.30.81
|
|
|
|
DB_CONNECTION=sqlite
|
|
DB_DATABASE=database.sqlite # ✅ Korrekt - Datenbank im Hauptverzeichnis
|
|
|
|
# Weitere Standard-Laravel-Einstellungen...
|
|
```
|
|
|
|
## 🚨 Offene Probleme
|
|
|
|
### 1. ✅ DB_DATABASE Pfad geklärt
|
|
**Status:** Datenbank liegt im Hauptverzeichnis
|
|
- **Pfad:** `/html/database.sqlite` (oder `/var/www/html/database.sqlite`)
|
|
- **Konfiguration:** `DB_DATABASE=database.sqlite` ✅
|
|
|
|
### 2. ✅ Mail-System Problem behoben
|
|
**Status:** SMTP-Konfiguration korrigiert und getestet
|
|
- **SMTP-Server:** mail.selfhost.de:465 (SSL)
|
|
- **Credentials:** postmaster@hjzyyqdm.mail.selfhost.de / Ikmyra
|
|
- **From-Address:** neonail@vogt.de.com
|
|
- **Test:** Erfolgreich an oliver@vogt.de.com gesendet
|
|
- **Status:** User-Registrierung und Admin-Benachrichtigungen funktionieren
|
|
|
|
### 3. Deployment-Status
|
|
- ✅ Berechtigungen korrigiert (777 für storage/, bootstrap/cache/)
|
|
- ✅ APP_KEY generiert und gesetzt
|
|
- ✅ .htaccess Umleitung funktioniert
|
|
- ✅ SQLite-Datenbank-Pfad geklärt
|
|
- ✅ Composer install ausgeführt
|
|
- ✅ Migrationen ausgeführt (inkl. Hersteller-Feature)
|
|
- ✅ is_admin Spalte zur users Tabelle hinzugefügt
|
|
- ✅ Admin-User erstellt (admin@neonail.com / admin123)
|
|
- ✅ Hersteller-Feature vollständig implementiert und deployed
|
|
- ✅ Production-Probleme behoben (schwarzer Bildschirm, Login)
|
|
- ✅ Mail-System vollständig funktionsfähig
|
|
|
|
## 🔄 Nächste Schritte
|
|
|
|
### Sofortige Aktionen
|
|
1. ✅ **DB_DATABASE Pfad geklärt** - Datenbank im Hauptverzeichnis
|
|
2. ✅ **Composer install** ausgeführt
|
|
3. ✅ **Migrationen** ausgeführt: `php artisan migrate --force`
|
|
4. ✅ **is_admin Spalte** zur users Tabelle hinzugefügt
|
|
5. ✅ **Admin-User** erstellt (admin@neonail.com / admin123)
|
|
6. ✅ **Anwendung getestet** - Hersteller-Feature funktioniert
|
|
7. ✅ **HTTPS-Sicherheit** für alle Hersteller-Forms implementiert
|
|
8. ✅ **Production-Probleme** behoben (schwarzer Bildschirm, Login)
|
|
9. ✅ **Mail-System** konfiguriert und getestet (SMTP funktioniert)
|
|
|
|
### Admin-User erstellen
|
|
```bash
|
|
php artisan tinker
|
|
```
|
|
```php
|
|
use App\Models\User;
|
|
User::create([
|
|
'name' => 'Admin',
|
|
'email' => 'admin@neonail.com',
|
|
'password' => bcrypt('admin123'),
|
|
'is_admin' => true
|
|
]);
|
|
```
|
|
|
|
### Standard-Login-Daten
|
|
**Email:** `admin@neonail.com`
|
|
**Passwort:** `admin123`
|
|
|
|
## 📱 Anwendungs-Features
|
|
|
|
### User-Features
|
|
- **Meine Sammlung** - Eigene Lacke anzeigen/verwalten
|
|
- **Verfügbare Lacke** - Alle Lacke aus Hauptkatalog
|
|
- **Neuen Lack hinzufügen** - Erstellt Lack im Hauptkatalog + fügt zur eigenen Sammlung hinzu
|
|
- **Hersteller verwalten** - Hersteller erstellen, bearbeiten, löschen (für alle User)
|
|
- **Bild-Upload** - Handykamera-Unterstützung, automatische Optimierung
|
|
- **Suche** - Nach Name oder Nummer
|
|
|
|
### Admin-Features
|
|
- **Dashboard** - Übersicht über User, Lacke und Hersteller
|
|
- **User-Verwaltung** - User erstellen, bearbeiten, löschen
|
|
- **Nagellack-Verwaltung** - Alle Lacke verwalten
|
|
- **Hersteller-Verwaltung** - Alle Hersteller verwalten
|
|
- **Statistiken** - Anwendungs-Statistiken inkl. Hersteller
|
|
- **User-Sammlungen** - Sammlungen anderer User einsehen
|
|
|
|
## 🛠️ Wichtige Dateien
|
|
|
|
### Controllers
|
|
- `UserNailPolishController` - User-Sammlungen verwalten (erweitert um Hersteller)
|
|
- `NailPolishController` - Admin-Nagellack-Verwaltung
|
|
- `ManufacturerController` - Hersteller-Verwaltung für alle User
|
|
- `AdminController` - Admin-Dashboard und User-Verwaltung (erweitert um Hersteller-Statistiken)
|
|
- `LoginController` - Authentifizierung
|
|
|
|
### Views
|
|
- `user-nail-polishes/` - User-Sammlungs-Views (erweitert um Hersteller-Anzeige)
|
|
- `nail-polishes/` - Admin-Nagellack-Views (erweitert um Hersteller-Anzeige)
|
|
- `manufacturers/` - Hersteller-Verwaltungs-Views (index, create, edit, show)
|
|
- `admin/` - Admin-Interface-Views
|
|
- `auth/` - Login-Views
|
|
|
|
### Routes
|
|
```php
|
|
// User-Routes
|
|
/my-collection - Eigene Sammlung
|
|
/available - Verfügbare Lacke
|
|
/create-nail-polish - Neuen Lack erstellen
|
|
/add-to-collection/{id} - Lack zur Sammlung hinzufügen
|
|
/remove-from-collection/{id} - Lack aus Sammlung entfernen
|
|
|
|
// Hersteller-Routes (für alle User)
|
|
/manufacturers - Hersteller-Übersicht
|
|
/manufacturers/create - Neuen Hersteller erstellen
|
|
/manufacturers/{id} - Hersteller anzeigen
|
|
/manufacturers/{id}/edit - Hersteller bearbeiten
|
|
/manufacturers-search - AJAX-Suche nach Herstellern
|
|
|
|
// Admin-Routes
|
|
/admin/dashboard - Admin-Dashboard
|
|
/admin/users - User-Verwaltung
|
|
/nail-polishes - Nagellack-Verwaltung
|
|
/admin/statistics - Statistiken
|
|
```
|
|
|
|
## 🔒 Sicherheit
|
|
|
|
### Admin-Zugang
|
|
- **Email:** admin@neonail.com
|
|
- **Passwort:** Muss noch gesetzt werden
|
|
|
|
### Middleware
|
|
- `auth` - Authentifizierung erforderlich
|
|
- `admin` - Nur für admin@neonail.com
|
|
- `guest` - Nur für nicht-eingeloggte User
|
|
|
|
## 📊 Datenbank-Beziehungen
|
|
|
|
### Datenbank-Beziehungen
|
|
```php
|
|
// User Model
|
|
public function nailPolishes() {
|
|
return $this->belongsToMany(NailPolish::class, 'user_nail_polishes');
|
|
}
|
|
|
|
// Manufacturer Model
|
|
public function nailPolishes() {
|
|
return $this->hasMany(NailPolish::class);
|
|
}
|
|
|
|
// NailPolish Model
|
|
public function users() {
|
|
return $this->belongsToMany(User::class, 'user_nail_polishes');
|
|
}
|
|
|
|
public function manufacturer() {
|
|
return $this->belongsTo(Manufacturer::class);
|
|
}
|
|
```
|
|
|
|
### Pivot-Tabelle
|
|
```sql
|
|
user_nail_polishes (user_id, nail_polish_id, timestamps)
|
|
```
|
|
|
|
### Hersteller-Feature
|
|
- **Flexibilität:** Jeder User kann neue Hersteller erstellen
|
|
- **Eindeutigkeit:** Hersteller-Namen müssen eindeutig sein
|
|
- **Globale Verfügbarkeit:** Alle User können alle Hersteller nutzen
|
|
- **Automatische Erstellung:** Beim Nagellack-Erstellen falls nicht vorhanden
|
|
- **Referentielle Integrität:** Hersteller können nicht gelöscht werden, wenn Nagellacke zugeordnet sind
|
|
|
|
## 🎨 UI/UX Features
|
|
|
|
### Mobile-Optimierung
|
|
- Responsive Bootstrap 5 Design
|
|
- Touch-freundliche Buttons
|
|
- Handykamera-Integration (`capture="environment"`)
|
|
- Optimierte Bildgrößen (400x400px)
|
|
- Intelligente Hersteller-Auswahl mit JavaScript
|
|
|
|
### Design-Elemente
|
|
- Gradient-Hintergrund
|
|
- Glassmorphism-Effekte
|
|
- Font Awesome Icons
|
|
- Bootstrap Cards und Grid-System
|
|
|
|
## 🔧 Deployment-Scripts
|
|
|
|
### fix-permissions.sh
|
|
```bash
|
|
# Berechtigungen korrigieren
|
|
chmod -R 777 storage/
|
|
chmod -R 777 bootstrap/cache/
|
|
chmod 664 database.sqlite
|
|
chmod 644 .env
|
|
```
|
|
|
|
### deploy-manufacturer-feature.sh
|
|
```bash
|
|
# Hersteller-Feature Deployment
|
|
# - Migration-Reihenfolge korrigieren
|
|
# - Migrationen ausführen
|
|
# - Cache leeren
|
|
# - Autoload aktualisieren
|
|
# - Berechtigungen setzen
|
|
```
|
|
|
|
### fix-production-issues.sh
|
|
```bash
|
|
# Production-Issues Fix
|
|
# - Migration-Reihenfolge korrigieren
|
|
# - Migrationen ausführen
|
|
# - Cache leeren
|
|
# - Autoload aktualisieren
|
|
# - Berechtigungen setzen
|
|
```
|
|
|
|
### fix-webspace-production.sh
|
|
```bash
|
|
# Webspace Production Fix
|
|
# - Migration-Reset und Neuausführung
|
|
# - Cache komplett leeren
|
|
# - Autoload optimieren
|
|
# - Datenbank-Tabellen prüfen
|
|
```
|
|
|
|
### fix-black-screen.sh
|
|
```bash
|
|
# Schwarzer Bildschirm Fix
|
|
# - Debug temporär aktivieren
|
|
# - Cache komplett leeren
|
|
# - Autoload neu generieren
|
|
# - Datenbank-Verbindung testen
|
|
```
|
|
|
|
### fix-user-login.sh
|
|
```bash
|
|
# User Login Fix
|
|
# - is_admin Spalte hinzufügen
|
|
# - Admin-User erstellen
|
|
# - Cache leeren
|
|
```
|
|
|
|
### test-mail-connection.sh
|
|
```bash
|
|
# Mail Connection Test
|
|
# - SMTP-Verbindung testen
|
|
# - Test-Mail an oliver@vogt.de.com senden
|
|
# - Mail-Konfiguration prüfen
|
|
# - Fehler-Diagnose
|
|
```
|
|
|
|
### fix-mail-config.sh
|
|
```bash
|
|
# Mail Configuration Fix
|
|
# - Mail-Konfiguration auf log-Modus setzen
|
|
# - Backup der .env erstellen
|
|
# - Cache leeren
|
|
# - Test-Mail senden
|
|
```
|
|
|
|
### setup-webspace.sh
|
|
```bash
|
|
# Vollständiges Setup
|
|
# - .env erstellen
|
|
# - Berechtigungen setzen
|
|
# - Composer install
|
|
# - Laravel Setup
|
|
```
|
|
|
|
### deploy-sqlite.sh
|
|
```bash
|
|
# SQLite-spezifisches Deployment
|
|
# - SQLite-Datenbank erstellen
|
|
# - Optimierte Einstellungen
|
|
```
|
|
|
|
## 🐛 Bekannte Probleme & Lösungen
|
|
|
|
### 1. "Permission denied" Fehler
|
|
**Lösung:** `chmod -R 777 storage/ bootstrap/cache/`
|
|
|
|
### 2. "APP_KEY" Fehler
|
|
**Lösung:** `php artisan key:generate` oder manueller Key
|
|
|
|
### 3. "Database connection failed"
|
|
**Lösung:** SQLite-Datei erstellen, Berechtigungen prüfen
|
|
|
|
### 4. "Class not found"
|
|
**Lösung:** `composer install` oder `composer dump-autoload`
|
|
|
|
### 5. "Images not displayed"
|
|
**Lösung:** `php artisan storage:link`
|
|
|
|
### 6. "no such table: manufacturers"
|
|
**Lösung:** Migrationen ausführen: `php artisan migrate --force`
|
|
|
|
### 7. "Migration-Reihenfolge Fehler"
|
|
**Lösung:** Migration `add_manufacturer_id_to_nail_polishes_table` nach `create_nail_polishes_table` verschieben
|
|
|
|
### 8. "Schwarzer Bildschirm in Production"
|
|
**Lösung:** `fix-black-screen.sh` ausführen oder manuell Debug aktivieren und Cache leeren
|
|
|
|
### 9. "User-Login funktioniert nicht nach Migrationen"
|
|
**Lösung:** `is_admin` Spalte zur users Tabelle hinzufügen und Admin-User erstellen
|
|
|
|
### 10. "E-Mails werden nicht versendet"
|
|
**Lösung:** SMTP-Konfiguration in .env prüfen und `test-mail-connection.sh` ausführen
|
|
|
|
## 🌐 Production-Deployment
|
|
|
|
### Production-Einstellungen (.env)
|
|
```env
|
|
APP_ENV=production
|
|
APP_DEBUG=false
|
|
APP_URL=https://neonail.vogt.de.com
|
|
```
|
|
|
|
### Standard-Login-Daten
|
|
**Email:** `admin@neonail.com`
|
|
**Passwort:** `admin123`
|
|
|
|
### Production-Fix Scripts
|
|
- `fix-production-issues.sh` - Allgemeine Production-Probleme
|
|
- `fix-webspace-production.sh` - Webspace-spezifische Probleme
|
|
- `fix-black-screen.sh` - Schwarzer Bildschirm Problem
|
|
- `fix-user-login.sh` - User-Login Problem
|
|
- `test-mail-connection.sh` - Mail-Verbindung testen
|
|
- `fix-mail-config.sh` - Mail-Konfiguration reparieren
|
|
|
|
### Manuelle Production-Fixes
|
|
```bash
|
|
# Schwarzer Bildschirm
|
|
sed -i 's/APP_DEBUG=false/APP_DEBUG=true/' .env
|
|
php artisan config:clear
|
|
# Cache leeren, Fehler beheben, dann APP_DEBUG=false setzen
|
|
|
|
# User-Login Problem
|
|
php artisan tinker --execute="use Illuminate\Database\Schema\Blueprint; use Illuminate\Support\Facades\Schema; Schema::table('users', function (Blueprint \$table) { \$table->boolean('is_admin')->default(false)->after('password'); });"
|
|
php artisan tinker --execute="use App\Models\User; use Illuminate\Support\Facades\Hash; User::create(['name' => 'Admin', 'email' => 'admin@neonail.com', 'password' => Hash::make('admin123'), 'is_admin' => true]);"
|
|
|
|
# Mail-System Problem
|
|
# .env korrekte SMTP-Daten:
|
|
MAIL_MAILER=smtp
|
|
MAIL_HOST=mail.selfhost.de
|
|
MAIL_PORT=465
|
|
MAIL_USERNAME=postmaster@hjzyyqdm.mail.selfhost.de
|
|
MAIL_PASSWORD=Ikmyra
|
|
MAIL_ENCRYPTION=SSL
|
|
MAIL_FROM_ADDRESS="neonail@vogt.de.com"
|
|
MAIL_FROM_NAME="${APP_NAME}"
|
|
|
|
# Cache leeren nach .env Änderung
|
|
php artisan config:clear
|
|
|
|
# Mail-Verbindung testen
|
|
php artisan tinker --execute="use Illuminate\Support\Facades\Mail; Mail::raw('Test-Mail von NeoNail DB - ' . now(), function(\$message) { \$message->to('oliver@vogt.de.com')->subject('NeoNail DB - SMTP Test')->from('neonail@vogt.de.com', 'NeoNail DB'); }); echo 'Test-Mail gesendet';"
|
|
```
|
|
|
|
## 📞 Support-Informationen
|
|
|
|
### Logs
|
|
- `storage/logs/laravel.log` - Laravel-Logs
|
|
- `storage/logs/` - Weitere Logs
|
|
|
|
### Debug-Modus
|
|
```env
|
|
APP_DEBUG=true # Für Fehlerdiagnose
|
|
```
|
|
|
|
### Test-Dateien
|
|
- `test.php` - PHP-Diagnose
|
|
- `laravel-test.php` - Laravel-spezifische Diagnose
|
|
- `test-mail-connection.sh` - Mail-Verbindung testen
|
|
- `smtp-mail-setup.md` - Mail-Konfiguration Anleitung
|
|
- `mail-configuration-fix.md` - Mail-Problem Lösung
|
|
|
|
## 🎯 Projekt-Ziele
|
|
|
|
### Erreicht ✅
|
|
- Kollaborative Datenbank
|
|
- Mobile-Optimierung
|
|
- Admin-Interface
|
|
- Bild-Upload
|
|
- Suchfunktion
|
|
- SQLite-Deployment
|
|
- Hersteller-Verwaltung für alle User
|
|
- HTTPS-Sicherheit für alle Forms
|
|
- Intelligente Hersteller-Auswahl
|
|
- Production-Ready Deployment
|
|
- Vollständige User-Authentifizierung
|
|
- Fehlerbehebung für alle Production-Probleme
|
|
- Vollständiges Mail-System (SMTP funktioniert)
|
|
- User-Registrierung mit E-Mail-Benachrichtigungen
|
|
- Admin-Benachrichtigungen bei neuen Usern
|
|
|
|
### Nächste Schritte 🚀
|
|
1. ✅ Webspace-Deployment abgeschlossen
|
|
2. ✅ Admin-User erstellt (admin@neonail.com / admin123)
|
|
3. ✅ Anwendung getestet (inkl. Hersteller-Feature)
|
|
4. ✅ Production-Probleme behoben
|
|
5. ✅ Mail-System vollständig funktionsfähig
|
|
6. User-Feedback sammeln
|
|
7. Weitere Features entwickeln
|
|
|
|
---
|
|
|
|
**Projekt-Status:** 100% abgeschlossen, Production-Ready
|
|
**Letzte Aktion:** Mail-System vollständig funktionsfähig, SMTP-Test erfolgreich
|
|
**Nächste Aktion:** User-Feedback sammeln und weitere Features entwickeln
|