169 lines
4.7 KiB
Markdown
169 lines
4.7 KiB
Markdown
# JavaScript-Fehler-Behebungen für MYP System
|
|
|
|
## 🔧 Durchgeführte Korrekturen
|
|
|
|
### 1. **DoNotDisturb Manager - suppressNotification Methode**
|
|
|
|
**Problem:**
|
|
```javascript
|
|
TypeError: window.dndManager.suppressNotification is not a function
|
|
```
|
|
|
|
**Ursache:**
|
|
Die DoNotDisturbManager Klasse hatte keine `suppressNotification` Methode, aber die Notification-Manager versuchten diese aufzurufen.
|
|
|
|
**Lösung:**
|
|
```javascript
|
|
// Methode hinzugefügt zu DoNotDisturbManager
|
|
suppressNotification(message, type) {
|
|
if (!this.isEnabled) return false;
|
|
|
|
// Wichtige Nachrichten (Fehler) nicht unterdrücken
|
|
if (type === 'error' || type === 'danger') return false;
|
|
|
|
// Nachricht zur Liste der unterdrückten hinzufügen
|
|
this.suppressedMessages.push({
|
|
message,
|
|
type,
|
|
timestamp: new Date().toISOString()
|
|
});
|
|
|
|
this.incrementSuppressedCount();
|
|
console.log(`🔕 Benachrichtigung unterdrückt: ${message}`);
|
|
return true;
|
|
}
|
|
```
|
|
|
|
**Betroffene Dateien:**
|
|
- `backend/templates/base.html`
|
|
- `backend/templates/base-optimized.html`
|
|
|
|
### 2. **Session Status API - Unauthentifizierte Benutzer**
|
|
|
|
**Problem:**
|
|
```javascript
|
|
SyntaxError: Unexpected token '<', "<!DOCTYPE "... is not valid JSON
|
|
```
|
|
|
|
**Ursache:**
|
|
Der `/api/session/status` Endpoint leitete nicht-authentifizierte Benutzer zur Login-Seite um (HTML) anstatt JSON zurückzugeben.
|
|
|
|
**Lösung:**
|
|
```python
|
|
@app.route("/api/session/status", methods=["GET"])
|
|
def api_session_status(): # Kein @login_required mehr
|
|
"""API-Endpunkt für Session-Status"""
|
|
try:
|
|
# Für nicht-authentifizierte Benutzer
|
|
if not current_user.is_authenticated:
|
|
return jsonify({
|
|
"success": False,
|
|
"authenticated": False,
|
|
"message": "Nicht angemeldet"
|
|
})
|
|
# ... Rest der Funktion
|
|
```
|
|
|
|
**Betroffene Dateien:**
|
|
- `backend/app.py`
|
|
|
|
### 3. **Drucker-Anzeige - Offline Drucker**
|
|
|
|
**Problem:**
|
|
Offline oder inaktive Drucker wurden nicht angezeigt.
|
|
|
|
**Ursache:**
|
|
Die API filterte nur aktive Drucker (`Printer.active == True`).
|
|
|
|
**Lösung:**
|
|
```python
|
|
# Vorher:
|
|
total_printers = db_session.query(Printer).filter(Printer.active == True).count()
|
|
|
|
# Nachher:
|
|
total_printers = db_session.query(Printer).count() # Alle Drucker
|
|
active_printers = db_session.query(Printer).filter(Printer.active == True).count() # Zusätzlich
|
|
```
|
|
|
|
**Betroffene Dateien:**
|
|
- `backend/app.py` - `/api/stats` Endpoint
|
|
|
|
## 📋 Test-Schritte
|
|
|
|
### 1. DoNotDisturb Manager testen:
|
|
```javascript
|
|
// In der Browser-Konsole:
|
|
window.dndManager.toggle(); // DND aktivieren
|
|
window.showToast("Test-Nachricht", "info"); // Sollte unterdrückt werden
|
|
window.showToast("Fehler!", "error"); // Sollte NICHT unterdrückt werden
|
|
```
|
|
|
|
### 2. Session Status testen:
|
|
```javascript
|
|
// Nicht angemeldet:
|
|
fetch('/api/session/status')
|
|
.then(r => r.json())
|
|
.then(data => console.log(data));
|
|
// Sollte JSON mit authenticated: false zurückgeben
|
|
```
|
|
|
|
### 3. Drucker-Anzeige testen:
|
|
```javascript
|
|
// Alle Drucker abrufen:
|
|
fetch('/api/printers')
|
|
.then(r => r.json())
|
|
.then(data => console.log(`${data.count} Drucker gefunden`));
|
|
// Sollte ALLE Drucker anzeigen, auch offline
|
|
```
|
|
|
|
## 🚀 Weitere Empfehlungen
|
|
|
|
### 1. **JavaScript Error Handling verbessern:**
|
|
```javascript
|
|
// Global Error Handler hinzufügen
|
|
window.addEventListener('error', function(event) {
|
|
console.error('Global Error:', event.error);
|
|
// Optional: An Server senden für Monitoring
|
|
});
|
|
```
|
|
|
|
### 2. **API Response Konsistenz:**
|
|
- Alle API-Endpoints sollten konsistente Response-Strukturen haben
|
|
- Immer JSON zurückgeben, auch bei Fehlern
|
|
- Keine HTML-Redirects in API-Endpoints
|
|
|
|
### 3. **Frontend Resilience:**
|
|
```javascript
|
|
// Bessere Fehlerbehandlung in API-Calls
|
|
async function apiCall(url, options = {}) {
|
|
try {
|
|
const response = await fetch(url, options);
|
|
|
|
// Prüfe Content-Type
|
|
const contentType = response.headers.get("content-type");
|
|
if (!contentType || !contentType.includes("application/json")) {
|
|
throw new Error("Server returned non-JSON response");
|
|
}
|
|
|
|
const data = await response.json();
|
|
|
|
if (!response.ok) {
|
|
throw new Error(data.error || `HTTP ${response.status}`);
|
|
}
|
|
|
|
return data;
|
|
} catch (error) {
|
|
console.error(`API Error for ${url}:`, error);
|
|
throw error;
|
|
}
|
|
}
|
|
```
|
|
|
|
## ✅ Status
|
|
|
|
Alle drei Hauptprobleme wurden behoben:
|
|
1. ✅ DoNotDisturb Manager - `suppressNotification` Methode hinzugefügt
|
|
2. ✅ Session Status API - JSON für nicht-authentifizierte Benutzer
|
|
3. ✅ Drucker-Anzeige - Alle Drucker werden angezeigt
|
|
|
|
Das System sollte jetzt ohne JavaScript-Fehler funktionieren. |