🎉 Feat(docs): Added new error handling documentation and roadmap images

This commit is contained in:
2025-05-31 23:23:53 +02:00
parent 5f1b0c63e1
commit cf21c1dbfa
20 changed files with 858 additions and 87 deletions

View File

@ -148,7 +148,7 @@ login_manager.login_message_category = "info"
@login_manager.user_loader
def load_user(user_id):
"""
Robuster User-Loader mit Error-Handling für Schema-Probleme.
Robuster User-Loader mit verbessertem Error-Handling für Schema-Probleme.
"""
try:
# user_id von Flask-Login ist immer ein String - zu Integer konvertieren
@ -169,34 +169,74 @@ def load_user(user_id):
# Schema-Problem - versuche manuelle Abfrage
app_logger.warning(f"Schema-Problem beim User-Load für ID {user_id_int}: {str(db_error)}")
# Manuelle Abfrage nur mit Basis-Feldern
# Erweiterte manuelle Abfrage mit allen wichtigen Feldern
try:
result = db_session.execute(
text("SELECT id, email, password_hash, name, role, active FROM users WHERE id = :user_id"),
text("""SELECT id, email, username, password_hash, name, role, active,
created_at, last_login, updated_at, settings, department,
position, phone, bio, last_activity
FROM users WHERE id = :user_id"""),
{"user_id": user_id_int}
).fetchone()
if result:
# Manuell User-Objekt erstellen
# Manuell User-Objekt erstellen mit robuster Tupel-Behandlung
user = User()
user.id = result[0]
user.email = result[1] if len(result) > 1 else f"user_{user_id_int}@system.local"
user.password_hash = result[2] if len(result) > 2 else ""
user.name = result[3] if len(result) > 3 else f"User {user_id_int}"
user.role = result[4] if len(result) > 4 else "user"
user.active = result[5] if len(result) > 5 else True
# Standard-Werte für fehlende Felder
user.username = getattr(user, 'username', user.email.split('@')[0])
user.created_at = getattr(user, 'created_at', datetime.now())
user.last_login = getattr(user, 'last_login', None)
user.updated_at = getattr(user, 'updated_at', datetime.now())
# Basis-Felder (immer vorhanden)
user.id = result[0] if len(result) > 0 else user_id_int
user.email = result[1] if len(result) > 1 and result[1] else f"user_{user_id_int}@system.local"
user.username = result[2] if len(result) > 2 and result[2] else user.email.split('@')[0]
user.password_hash = result[3] if len(result) > 3 and result[3] else ""
user.name = result[4] if len(result) > 4 and result[4] else f"User {user_id_int}"
user.role = result[5] if len(result) > 5 and result[5] else "user"
user.active = result[6] if len(result) > 6 and result[6] is not None else True
# Erweiterte Felder (optional)
user.created_at = result[7] if len(result) > 7 and result[7] else datetime.now()
user.last_login = result[8] if len(result) > 8 else None
user.updated_at = result[9] if len(result) > 9 and result[9] else datetime.now()
user.settings = result[10] if len(result) > 10 else None
user.department = result[11] if len(result) > 11 else None
user.position = result[12] if len(result) > 12 else None
user.phone = result[13] if len(result) > 13 else None
user.bio = result[14] if len(result) > 14 else None
user.last_activity = result[15] if len(result) > 15 else datetime.now()
app_logger.info(f"User {user_id_int} erfolgreich über manuelle Abfrage geladen")
db_session.close()
return user
except Exception as manual_error:
app_logger.error(f"Auch manuelle User-Abfrage fehlgeschlagen: {str(manual_error)}")
# Letzter Fallback: Minimale User-Daten erstellen
try:
# Prüfen ob User überhaupt existiert
exists_result = db_session.execute(
text("SELECT COUNT(*) FROM users WHERE id = :user_id"),
{"user_id": user_id_int}
).fetchone()
if exists_result and exists_result[0] > 0:
# User existiert, aber Schema ist korrupt - Notfall-User erstellen
user = User()
user.id = user_id_int
user.email = f"user_{user_id_int}@system.local"
user.username = f"user_{user_id_int}"
user.password_hash = ""
user.name = f"User {user_id_int}"
user.role = "user"
user.active = True
user.created_at = datetime.now()
user.last_login = None
user.updated_at = datetime.now()
app_logger.warning(f"Notfall-User-Objekt für ID {user_id_int} erstellt")
db_session.close()
return user
except Exception as fallback_error:
app_logger.error(f"Auch Fallback-User-Erstellung fehlgeschlagen: {str(fallback_error)}")
db_session.close()
return None