backend.main
FastAPI application entry point.
Creates the fastapi.FastAPI instance, registers all middleware
(CORS, GZip, rate limiting), mounts all API routers and defines the
core endpoints that do not belong to a specific sub-resource:
POST /login– password-based login, returns access + refresh tokensPOST /refresh– exchange a refresh token for a new access tokenPOST /logout– revoke tokens and clear cookiesGET /me– return the authenticated user’s profilePUT /update_user– update own user profilePUT /change_password– change own passwordGET /user_list– list all users (authenticated)GET /user_todo_list– personal to-do and feedback listGET /app_info– application metadataGET /db_health– database connectivity probe
- async backend.main.global_exception_handler(request, exc)[Quellcode]
Excepts all unhandled exceptions, logs them and returns a generic error message
- async backend.main.http_exception_handler(request, exc)[Quellcode]
Specific handler for HTTPExceptions with logging
- async backend.main.startup_event()[Quellcode]
Führe Token-Cleanup bei Startup aus
- async backend.main.periodic_token_cleanup()[Quellcode]
Background Task für periodisches Token-Cleanup (alle 24h)
- async backend.main.start_background_tasks()[Quellcode]
Starte Background Tasks
- backend.main.get_todo_list(user_name, db)[Quellcode]
- backend.main.login(request, data, db=Depends(dependency=<function get_db>, use_cache=True, scope=None))[Quellcode]
- backend.main.refresh_token(request, refresh_data, db=Depends(dependency=<function get_db>, use_cache=True, scope=None))[Quellcode]
Refresh Token aus Request Body lesen und neuen Access Token generieren. Erwartet: { „refresh_token“: „…“ }
Multi-Device Support: Der Refresh Token wird NICHT rotiert/revoked, damit mehrere Geräte gleichzeitig eingeloggt bleiben können.
- backend.main.logout(request, logout_data=None, db=Depends(dependency=<function get_db>, use_cache=True, scope=None))[Quellcode]
Logout: Blacklist Access Token und revoke Refresh Token. Token wird aus Authorization Header gelesen.
- backend.main.get_me(current=Depends(dependency=<function get_current_user>, use_cache=True, scope=None), db=Depends(dependency=<function get_db>, use_cache=True, scope=None))[Quellcode]
- backend.main.update_user(request, user, current=Depends(dependency=<function get_current_user>, use_cache=True, scope=None), db=Depends(dependency=<function get_db>, use_cache=True, scope=None))[Quellcode]
- backend.main.change_password(request, data, current=Depends(dependency=<function get_current_user>, use_cache=True, scope=None), db=Depends(dependency=<function get_db>, use_cache=True, scope=None))[Quellcode]
- backend.main.get_users_list(current=Depends(dependency=<function get_current_user>, use_cache=True, scope=None), db=Depends(dependency=<function get_db>, use_cache=True, scope=None))[Quellcode]
- backend.main.get_user_todo(current=Depends(dependency=<function get_current_user>, use_cache=True, scope=None), db=Depends(dependency=<function get_db>, use_cache=True, scope=None))[Quellcode]
- backend.main.set_user_todo_done(request, todo, current=Depends(dependency=<function get_current_user>, use_cache=True, scope=None), db=Depends(dependency=<function get_db>, use_cache=True, scope=None))[Quellcode]
- backend.main.get_version_dict()[Quellcode]
- backend.main.health_check(db=Depends(dependency=<function get_db>, use_cache=True, scope=None))[Quellcode]
Überprüft ob API und DB erreichbar sind