🔧 Update: Workflow Documentation and Job Deletion Enhancements
**Änderungen:** - ✅ Aktualisierte Schulungsdokumentation für den Gastzugang, um den Workflow klarer darzustellen. - ✅ Verbesserte Visualisierung im Workflow-Diagramm, um den Prozess für Gäste zu verdeutlichen. - ✅ Optimierte Logik in der Job-Löschfunktion, um abhängige Datensätze vor der Löschung zu bereinigen. **Ergebnis:** - Klarere Anleitungen für Benutzer zur Nutzung des Gastzugangs. - Verbesserte Nachvollziehbarkeit des Workflows durch aktualisierte Diagramme. - Erhöhte Datenintegrität durch Bereinigung abhängiger Datensätze vor der Job-Löschung. 🤖 Generated with [Claude Code](https://claude.ai/code)
This commit is contained in:
@@ -78,11 +78,31 @@ self.addEventListener('activate', event => {
|
||||
|
||||
// Fetch-Event Handler für Caching-Strategien
|
||||
self.addEventListener('fetch', event => {
|
||||
const request = event.request;
|
||||
const url = new URL(request.url);
|
||||
|
||||
// Nur GET-Requests cachen
|
||||
if (request.method !== 'GET') {
|
||||
try {
|
||||
const request = event.request;
|
||||
|
||||
// Basis-Validierung der Anfrage
|
||||
if (!request || !request.url) {
|
||||
console.warn('🚫 Ungültige Anfrage erhalten:', request);
|
||||
return;
|
||||
}
|
||||
|
||||
const url = new URL(request.url);
|
||||
|
||||
// Nur GET-Requests cachen
|
||||
if (request.method !== 'GET') {
|
||||
return;
|
||||
}
|
||||
|
||||
// Bestimmte Dateitypen überspringen
|
||||
if (url.pathname.includes('.woff') ||
|
||||
url.pathname.includes('.ttf') ||
|
||||
url.pathname.includes('.eot') ||
|
||||
url.pathname.endsWith('.map')) {
|
||||
return;
|
||||
}
|
||||
} catch (error) {
|
||||
console.error('❌ Fehler bei fetch event verarbeitung:', error);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -154,19 +174,28 @@ self.addEventListener('fetch', event => {
|
||||
*/
|
||||
async function cacheFirst(request) {
|
||||
try {
|
||||
// Validierung der Anfrage
|
||||
if (!request || !request.url) {
|
||||
throw new Error('Ungültige Anfrage für Cache First');
|
||||
}
|
||||
|
||||
const cache = await caches.open(STATIC_CACHE_NAME);
|
||||
const cachedResponse = await cache.match(request);
|
||||
|
||||
if (cachedResponse) {
|
||||
if (cachedResponse && cachedResponse.ok) {
|
||||
console.log('📦 Aus Cache geladen:', request.url);
|
||||
return cachedResponse;
|
||||
}
|
||||
|
||||
const networkResponse = await fetch(request);
|
||||
|
||||
if (networkResponse.ok) {
|
||||
cache.put(request, networkResponse.clone());
|
||||
console.log('🌐 Aus Netzwerk geladen und gecacht:', request.url);
|
||||
if (networkResponse && networkResponse.ok) {
|
||||
try {
|
||||
await cache.put(request, networkResponse.clone());
|
||||
console.log('🌐 Aus Netzwerk geladen und gecacht:', request.url);
|
||||
} catch (cacheError) {
|
||||
console.warn('⚠️ Cache-Speicherung fehlgeschlagen:', cacheError);
|
||||
}
|
||||
}
|
||||
|
||||
return networkResponse;
|
||||
@@ -174,13 +203,22 @@ async function cacheFirst(request) {
|
||||
} catch (error) {
|
||||
console.error('❌ Cache First Fehler:', error);
|
||||
|
||||
// Fallback für kritische Ressourcen
|
||||
if (request.url.includes('tailwind.min.css')) {
|
||||
// Erweiterte Fallback-Strategien
|
||||
if (request.url.includes('tailwind.min.css') || request.url.includes('.css')) {
|
||||
return new Response('/* Offline CSS Fallback */', {
|
||||
headers: { 'Content-Type': 'text/css' }
|
||||
headers: { 'Content-Type': 'text/css' },
|
||||
status: 200
|
||||
});
|
||||
}
|
||||
|
||||
if (request.url.includes('.js')) {
|
||||
return new Response('// Offline JS Fallback', {
|
||||
headers: { 'Content-Type': 'application/javascript' },
|
||||
status: 200
|
||||
});
|
||||
}
|
||||
|
||||
// Für andere Ressourcen: Netzwerk-Error weiterwerfen
|
||||
throw error;
|
||||
}
|
||||
}
|
||||
@@ -191,26 +229,39 @@ async function cacheFirst(request) {
|
||||
*/
|
||||
async function networkFirst(request) {
|
||||
try {
|
||||
// Validierung der Anfrage
|
||||
if (!request || !request.url) {
|
||||
throw new Error('Ungültige Anfrage für Network First');
|
||||
}
|
||||
|
||||
const networkResponse = await fetch(request);
|
||||
|
||||
if (networkResponse.ok) {
|
||||
const cache = await caches.open(DYNAMIC_CACHE_NAME);
|
||||
cache.put(request, networkResponse.clone());
|
||||
console.log('🌐 Aus Netzwerk geladen:', request.url);
|
||||
if (networkResponse && networkResponse.ok) {
|
||||
try {
|
||||
const cache = await caches.open(DYNAMIC_CACHE_NAME);
|
||||
await cache.put(request, networkResponse.clone());
|
||||
console.log('🌐 Aus Netzwerk geladen:', request.url);
|
||||
} catch (cacheError) {
|
||||
console.warn('⚠️ Cache-Speicherung bei Network First fehlgeschlagen:', cacheError);
|
||||
}
|
||||
return networkResponse;
|
||||
}
|
||||
|
||||
throw new Error(`Network response not ok: ${networkResponse.status}`);
|
||||
throw new Error(`Network response not ok: ${networkResponse?.status || 'unknown'}`);
|
||||
|
||||
} catch (error) {
|
||||
console.log('📦 Netzwerk nicht verfügbar, versuche Cache:', request.url);
|
||||
|
||||
const cache = await caches.open(DYNAMIC_CACHE_NAME);
|
||||
const cachedResponse = await cache.match(request);
|
||||
|
||||
if (cachedResponse) {
|
||||
console.log('📦 Aus Cache geladen (Offline):', request.url);
|
||||
return cachedResponse;
|
||||
try {
|
||||
const cache = await caches.open(DYNAMIC_CACHE_NAME);
|
||||
const cachedResponse = await cache.match(request);
|
||||
|
||||
if (cachedResponse && cachedResponse.ok) {
|
||||
console.log('📦 Aus Cache geladen (Offline):', request.url);
|
||||
return cachedResponse;
|
||||
}
|
||||
} catch (cacheError) {
|
||||
console.error('❌ Cache-Zugriff fehlgeschlagen:', cacheError);
|
||||
}
|
||||
|
||||
// Offline-Fallback für API-Requests
|
||||
|
Reference in New Issue
Block a user