import os from typing import Optional from pydantic_settings import BaseSettings, SettingsConfigDict class DatabaseSettings(BaseSettings): database_url: str = "postgresql+psycopg://postgres:postgres@postgres:5432/xiaoxia_saas" pool_size: int = 20 max_overflow: int = 40 pool_timeout: int = 30 pool_recycle: int = 3600 model_config = SettingsConfigDict( env_file=".env", env_file_encoding="utf-8", case_sensitive=False, extra="ignore", ) _settings: Optional[DatabaseSettings] = None def get_database_settings() -> DatabaseSettings: global _settings if _settings is None: env = os.getenv("APP_ENV", "development") env_file = f".env.{env}" if env != "development" else ".env" if os.path.exists(env_file): _settings = DatabaseSettings(_env_file=env_file) else: _settings = DatabaseSettings() return _settings