diff --git a/backend/app/config.py b/backend/app/config.py new file mode 100644 index 0000000..2eaa3a7 --- /dev/null +++ b/backend/app/config.py @@ -0,0 +1,13 @@ +from pydantic_settings import BaseSettings, SettingsConfigDict + + +class Settings(BaseSettings): + model_config = SettingsConfigDict(env_file=".env", extra="ignore") + + database_url: str + ollama_base_url: str + session_secret: str + port: int = 7777 + + +settings = Settings() diff --git a/backend/app/db.py b/backend/app/db.py new file mode 100644 index 0000000..fa51df5 --- /dev/null +++ b/backend/app/db.py @@ -0,0 +1,16 @@ +from sqlalchemy.ext.asyncio import AsyncSession, async_sessionmaker, create_async_engine +from sqlalchemy.orm import DeclarativeBase + +from app.config import settings + +engine = create_async_engine(settings.database_url, echo=False) +async_session_maker = async_sessionmaker(engine, expire_on_commit=False) + + +class Base(DeclarativeBase): + pass + + +async def get_db() -> AsyncSession: + async with async_session_maker() as session: + yield session diff --git a/backend/tests/conftest.py b/backend/tests/conftest.py new file mode 100644 index 0000000..ae63c4c --- /dev/null +++ b/backend/tests/conftest.py @@ -0,0 +1,8 @@ +import os + + +def pytest_configure(config): + """Set up minimal environment variables for tests before any imports.""" + os.environ.setdefault("DATABASE_URL", "postgresql+asyncpg://test:test@localhost/test") + os.environ.setdefault("OLLAMA_BASE_URL", "http://localhost:11434") + os.environ.setdefault("SESSION_SECRET", "test-secret-key") diff --git a/backend/tests/test_config.py b/backend/tests/test_config.py new file mode 100644 index 0000000..0c4d628 --- /dev/null +++ b/backend/tests/test_config.py @@ -0,0 +1,11 @@ +from app.config import Settings + + +def test_settings_load_from_env(monkeypatch): + monkeypatch.setenv("DATABASE_URL", "postgresql+asyncpg://u:p@host/db") + monkeypatch.setenv("OLLAMA_BASE_URL", "http://10.30.20.107:11434") + monkeypatch.setenv("SESSION_SECRET", "test-secret") + settings = Settings(_env_file=None) + assert settings.database_url == "postgresql+asyncpg://u:p@host/db" + assert settings.ollama_base_url == "http://10.30.20.107:11434" + assert settings.port == 7777