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 tokens

  • POST /refresh – exchange a refresh token for a new access token

  • POST /logout – revoke tokens and clear cookies

  • GET  /me – return the authenticated user’s profile

  • PUT  /update_user – update own user profile

  • PUT  /change_password – change own password

  • GET  /user_list – list all users (authenticated)

  • GET  /user_todo_list – personal to-do and feedback list

  • GET  /app_info – application metadata

  • GET  /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