🔧 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:
2025-06-16 01:18:31 +02:00
parent 83d3ca5e28
commit b1ae9523a9
155 changed files with 1189 additions and 199 deletions

View File

@@ -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