diff --git a/7project/backend/app/app.py b/7project/backend/app/app.py index f312bb7..e692435 100644 --- a/7project/backend/app/app.py +++ b/7project/backend/app/app.py @@ -40,14 +40,6 @@ sentry_sdk.init( fastApi = FastAPI() -@fastApi.on_event("startup") -async def on_startup(): - # Ensure DB schema is created for tests/dev - from sqlalchemy.ext.asyncio import AsyncEngine - from sqlalchemy import text - async with engine.begin() as conn: - await conn.run_sync(Base.metadata.create_all) - # CORS for frontend dev server fastApi.add_middleware( CORSMiddleware, diff --git a/7project/backend/app/core/db.py b/7project/backend/app/core/db.py index 5a20cb1..1186352 100644 --- a/7project/backend/app/core/db.py +++ b/7project/backend/app/core/db.py @@ -1,35 +1,27 @@ import os -from urllib.parse import urlparse from sqlalchemy.ext.asyncio import create_async_engine, async_sessionmaker from app.core.base import Base -# Determine DATABASE_URL with sensible defaults for local testing DATABASE_URL = os.getenv("DATABASE_URL") if not DATABASE_URL: - mariadb_host = os.getenv("MARIADB_HOST") + mariadb_host = os.getenv("MARIADB_HOST", "localhost") mariadb_port = os.getenv("MARIADB_PORT", "3306") - mariadb_db = os.getenv("MARIADB_DB") - mariadb_user = os.getenv("MARIADB_USER") - mariadb_password = os.getenv("MARIADB_PASSWORD") + mariadb_db = os.getenv("MARIADB_DB", "group_project") + mariadb_user = os.getenv("MARIADB_USER", "root") + mariadb_password = os.getenv("MARIADB_PASSWORD", "strongpassword") if mariadb_host and mariadb_db and mariadb_user and mariadb_password: DATABASE_URL = f"mysql+asyncmy://{mariadb_user}:{mariadb_password}@{mariadb_host}:{mariadb_port}/{mariadb_db}" else: - # Default to local SQLite for tests/development when nothing is configured - DATABASE_URL = os.getenv("SQLITE_URL", "sqlite+aiosqlite:///./test.db") + raise Exception("Only MariaDB is supported. Please set the DATABASE_URL environment variable.") # Load all models to register them from app.models.user import User from app.models.transaction import Transaction from app.models.categories import Category -# Configure connect args based on backend -parsed = urlparse(DATABASE_URL) -scheme = parsed.scheme -connect_args = {} -if scheme.startswith("mysql"): - host_env = os.getenv("MARIADB_HOST", parsed.hostname or "localhost") - ssl_enabled = host_env not in {"localhost", "127.0.0.1"} - connect_args = {"ssl": {"ssl": True}} if ssl_enabled else {} +host_env = os.getenv("MARIADB_HOST", "localhost") +ssl_enabled = host_env not in {"localhost", "127.0.0.1"} +connect_args = {"ssl": {"ssl": True}} if ssl_enabled else {} engine = create_async_engine( DATABASE_URL, diff --git a/7project/backend/app/services/db.py b/7project/backend/app/services/db.py index 65d1dae..606af8d 100644 --- a/7project/backend/app/services/db.py +++ b/7project/backend/app/services/db.py @@ -3,20 +3,11 @@ from fastapi import Depends from sqlalchemy.ext.asyncio import AsyncSession from fastapi_users.db import SQLAlchemyUserDatabase -from ..core.db import async_session_maker, engine -from ..core.base import Base +from ..core.db import async_session_maker from ..models.user import User, OAuthAccount -_initialized = False - async def get_async_session() -> AsyncGenerator[AsyncSession, None]: - global _initialized - if not _initialized: - # Lazily ensure tables exist; helpful for test runs without migrations - async with engine.begin() as conn: - await conn.run_sync(Base.metadata.create_all) - _initialized = True async with async_session_maker() as session: yield session diff --git a/7project/backend/tests/conftest.py b/7project/backend/tests/conftest.py index 0f29b38..596aced 100644 --- a/7project/backend/tests/conftest.py +++ b/7project/backend/tests/conftest.py @@ -19,9 +19,8 @@ def fastapi_app(): return app -@pytest.fixture(scope="function") +@pytest.fixture(scope="session") def client(fastapi_app): - # Function-scoped to avoid leaking loop-bound resources into async tests return TestClient(fastapi_app, raise_server_exceptions=True)