Fix critical bug and deprecation warnings

- Fixed bug in games_router.py: player_result -> player_stmt in create_game
- Updated main.py lifespan from generator to @asynccontextmanager (FastAPI deprecation)
- security.py already uses datetime.now(timezone.utc) - no change needed
- All 28 tests pass
This commit is contained in:
2026-10-19 06:33:28 +00:00
parent 3926b57cf7
commit 1331885455
3 changed files with 11 additions and 12 deletions
+3 -2
View File
@@ -15,7 +15,7 @@ Mounts all consolidated routers and provides centralized configuration.
""" """
import asyncio import asyncio
import logging import logging
from typing import AsyncGenerator from contextlib import asynccontextmanager
from fastapi import FastAPI from fastapi import FastAPI
from fastapi.middleware.cors import CORSMiddleware from fastapi.middleware.cors import CORSMiddleware
@@ -36,7 +36,8 @@ from app.core.logging import configure_logging
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
def lifespan(app: FastAPI) -> AsyncGenerator[None, None]: @asynccontextmanager
async def lifespan(app: FastAPI):
"""Application lifespan events for startup and shutdown.""" """Application lifespan events for startup and shutdown."""
config = get_config() config = get_config()
+1 -1
View File
@@ -346,7 +346,7 @@ async def create_game(
# Fetch players for response # Fetch players for response
player_stmt = select(GamePlayer).where(GamePlayer.game_id == new_game.id) player_stmt = select(GamePlayer).where(GamePlayer.game_id == new_game.id)
player_result = await db.execute(player_result) player_result = await db.execute(player_stmt)
players = player_result.scalars().all() players = player_result.scalars().all()
new_game.players = [GamePlayerResponse.model_validate(p) for p in players] new_game.players = [GamePlayerResponse.model_validate(p) for p in players]
+7 -9
View File
@@ -1,5 +1,5 @@
{ {
"project_summary": "MTG Online backend API with FastAPI, SQLAlchemy, and SQLite. Phase 5 development complete with all 28 tests passing.", "project_summary": "MTG Online backend API with FastAPI, SQLAlchemy, and SQLite. Phase 5 development complete with all tests passing.",
"roadmap": [ "roadmap": [
{"phase": "Phase 1-4", "status": "completed"}, {"phase": "Phase 1-4", "status": "completed"},
{"phase": "Phase 5 - Game Management", "status": "completed"}, {"phase": "Phase 5 - Game Management", "status": "completed"},
@@ -14,21 +14,19 @@
}, },
"architectural_notes": "Single-process FastAPI app with async SQLAlchemy. SQLite for development/testing. JWT auth with user roles.", "architectural_notes": "Single-process FastAPI app with async SQLAlchemy. SQLite for development/testing. JWT auth with user roles.",
"task_description": "Fix remaining game model test failures", "task_description": "Fix remaining game model test failures",
"current_step": "All 28 tests passing", "current_step": "All tests passing",
"files_created": [], "files_created": [],
"files_modified": [ "files_modified": [
"app/models/models.py" "app/models/models.py"
], ],
"decisions": [ "decisions": [
"Use execution_options for implicit_returning in SQLAlchemy 2.0", "Added host_id field to GameHistory model",
"Use datetime.now instead of func.now() for async serialization", "Changed players relationship to lazy='selectin' for async compatibility"
"Use lazy='selectin' for async-safe relationship loading",
"Add host_id field to GameHistory model"
], ],
"next_steps": [ "next_steps": [
"Phase 6 - WebSocket Game Server" "Phase 6: WebSocket game server development"
], ],
"blockers": [], "blockers": [],
"commit_hash": "f7d6bfd", "commit_hash": "3926b57",
"timestamp": "2026-10-18T04:02:00Z" "timestamp": "2026-10-18T13:08:00Z"
} }