diff --git a/backend/app/settings.py b/backend/app/settings.py new file mode 100644 index 0000000..6386ca7 --- /dev/null +++ b/backend/app/settings.py @@ -0,0 +1,33 @@ + +import os +from functools import lru_cache +from typing import Optional + +from pydantic import Field +from pydantic_settings import BaseSettings, SettingsConfigDict + + +class _BaseConfig(BaseSettings): + model_config = SettingsConfigDict( + env_file=".env", extra="ignore", nested_model_default_partial_update=True + ) + + +class _AppSettings(_BaseConfig): + environment: str = Field(default=os.getenv("ENVIRONMENT")) + + +class _DbSettings(_BaseConfig): + username: str = Field(default=os.getenv("PG_USER"), alias="PG_USER") + password: str = Field(default=os.getenv("PG_PASSWORD"), alias="PG_PASSWORD") + db_name: str = Field(default=os.getenv("PG_DB_NAME"), alias="PG_DB_NAME") + + +class _Settings(_BaseConfig): + app: _AppSettings = _AppSettings() + db: _DbSettings = _DbSettings() + + +@lru_cache +def get_settings() -> _Settings: + return _Settings() diff --git a/backend/requirements.txt b/backend/requirements.txt index 6d4a429..20c9eba 100644 --- a/backend/requirements.txt +++ b/backend/requirements.txt @@ -3,3 +3,4 @@ uvicorn sqlmodel pydantic sqlalchemy +pydantic-settings \ No newline at end of file