feat: Implementierung von Benachrichtigungen und sozialen Funktionen; Hinzufügen von API-Endpunkten für Benachrichtigungen, Benutzer-Follows und soziale Interaktionen; Verbesserung des Logging-Systems zur besseren Nachverfolgbarkeit von Systemereignissen.

This commit is contained in:
2025-05-28 22:08:56 +02:00
parent 1f4394e9b6
commit f5c2e70a11
31 changed files with 9294 additions and 591 deletions

View File

@@ -1,17 +1,17 @@
#!/usr/bin/env python
# -*- coding: utf-8 -*-
from flask import current_app
from sqlalchemy.exc import SQLAlchemyError
from sqlalchemy import text
import time
def check_db_connection(db):
def check_db_connection(db, app=None):
"""
Überprüft die Datenbankverbindung und versucht ggf. die Verbindung wiederherzustellen
Args:
db: SQLAlchemy-Instanz
app: Flask-App-Instanz (optional, falls nicht im App-Kontext)
Returns:
bool: True, wenn die Verbindung erfolgreich ist, sonst False
@@ -22,7 +22,11 @@ def check_db_connection(db):
while retry_count < max_retries:
try:
# Führe eine einfache Abfrage durch, um die Verbindung zu testen
with current_app.app_context():
if app:
with app.app_context():
db.session.execute(text('SELECT 1'))
else:
# Versuche ohne expliziten App-Kontext (falls bereits im Kontext)
db.session.execute(text('SELECT 1'))
return True
except SQLAlchemyError as e:
@@ -38,42 +42,60 @@ def check_db_connection(db):
db.session.rollback()
except:
pass
except Exception as e:
print(f"Allgemeiner Fehler bei DB-Check: {str(e)}")
retry_count += 1
if retry_count < max_retries:
time.sleep(1)
return False
def initialize_db_if_needed(db, initialize_function=None):
def initialize_db_if_needed(db, initialize_function=None, app=None):
"""
Initialisiert die Datenbank, falls erforderlich
Args:
db: SQLAlchemy-Instanz
initialize_function: Funktion, die aufgerufen wird, um die Datenbank zu initialisieren
app: Flask-App-Instanz (optional, falls nicht im App-Kontext)
Returns:
bool: True, wenn die Datenbank bereit ist, sonst False
"""
# Prüfe die Verbindung
if not check_db_connection(db):
if not check_db_connection(db, app):
return False
# Prüfe, ob die Tabellen existieren
try:
with current_app.app_context():
# Führe eine Testabfrage auf einer Tabelle durch
if app:
with app.app_context():
# Führe eine Testabfrage auf einer Tabelle durch
db.session.execute(text('SELECT COUNT(*) FROM user'))
else:
# Versuche ohne expliziten App-Kontext
db.session.execute(text('SELECT COUNT(*) FROM user'))
except SQLAlchemyError:
# Tabellen existieren nicht, erstelle sie
try:
with current_app.app_context():
if app:
with app.app_context():
db.create_all()
# Rufe die Initialisierungsfunktion auf, falls vorhanden
if initialize_function and callable(initialize_function):
initialize_function()
else:
db.create_all()
# Rufe die Initialisierungsfunktion auf, falls vorhanden
if initialize_function and callable(initialize_function):
initialize_function()
return True
return True
except Exception as e:
print(f"Fehler bei DB-Initialisierung: {str(e)}")
return False
except Exception as e:
print(f"Fehler beim Prüfen der Datenbank-Tabellen: {str(e)}")
return False
return True