from pydantic_settings import BaseSettings, SettingsConfigDict class Settings(BaseSettings): """Konfiguration aus Umgebungsvariablen (.env auf dem Zielsystem, nie committen).""" model_config = SettingsConfigDict(env_file=".env", extra="ignore") database_url: str = "postgresql+asyncpg://mabea:changeme@localhost:5432/mabea" jwt_secret_key: str = "change-me-to-a-long-random-value" jwt_algorithm: str = "HS256" access_token_expire_minutes: int = 480 # ID des systemknoten-Datensatzes mit typ='haupt' (Sprintplan E6). systemknoten_id: int = 1 # Karte 05 / Sprint 6: E-Mail-Benachrichtigung bei neuem Fehlbestand. # Leer (Default) = Versand wird übersprungen, nur geloggt (sicherer Default für # Entwicklung/Tests ohne konfigurierten Mailserver). smtp_host: str = "" smtp_port: int = 587 smtp_user: str = "" smtp_password: str = "" smtp_from: str = "mabea@example.org" smtp_use_tls: bool = True # Dokumente-Modul (Roadmap Phase 5): lokale Ablage, kein Cloud-Storage- # Zwang (Self-Hosting-Anforderung). Relativer Default reicht für # Entwicklung, Produktion setzt einen absoluten Pfad außerhalb des # Anwendungsverzeichnisses (z.B. /opt/mabea/uploads, siehe deploy/README.md). upload_dir: str = "./uploads" max_upload_size_mb: int = 25 settings = Settings()