🎉 Feat(docs): Added new error handling documentation and roadmap images
This commit is contained in:
@ -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
|
||||
|
Reference in New Issue
Block a user