Fix async loading bugs and add test results

Critical Fixes:
- Fix async context manager usage in fastapi_app.py (async for -> async with)
- Add broadcast() method to WebSocketService
- Initialize BackgroundLoaderService properly in lifespan function

Testing:
- Execute manual testing (Tests 1, 5, 8, 9)
- Create comprehensive test results document
- Verify API endpoints return 202 Accepted
- Confirm database persistence works
- Validate startup incomplete series check

Test Results:
- Response time: 61ms (target: < 500ms) 
- 4 series found with missing data on startup
- Database fields properly persisted
- All critical bugs fixed

Files:
- check_db.py: Database inspection utility
- docs/MANUAL_TESTING_RESULTS.md: Comprehensive test results
- src/server/fastapi_app.py: Fixed async context manager, initialized BackgroundLoaderService
- src/server/services/websocket_service.py: Added broadcast() method
This commit is contained in:
2026-01-19 08:49:28 +01:00
parent 8b0a4abca9
commit 0bbdd46fc7
6 changed files with 413 additions and 82 deletions

View File

@@ -56,7 +56,7 @@ async def _check_incomplete_series_on_startup(background_loader) -> None:
from src.server.database.connection import get_db_session
from src.server.database.service import AnimeSeriesService
async for db in get_db_session():
async with get_db_session() as db:
try:
# Get all series from database
series_list = await AnimeSeriesService.get_all(db)
@@ -98,8 +98,6 @@ async def _check_incomplete_series_on_startup(background_loader) -> None:
except Exception as e:
logger.error(f"Error checking incomplete series: {e}", exc_info=True)
break # Exit after first iteration
except Exception as e:
logger.error(f"Failed to check incomplete series on startup: {e}", exc_info=True)
@@ -218,8 +216,17 @@ async def lifespan(_application: FastAPI):
logger.info("Download service initialized and queue restored")
# Initialize background loader service
from src.server.utils.dependencies import get_background_loader_service
background_loader = get_background_loader_service()
from src.server.services.background_loader_service import (
init_background_loader_service,
)
from src.server.utils.dependencies import get_series_app
series_app_instance = get_series_app()
background_loader = init_background_loader_service(
websocket_service=ws_service,
anime_service=anime_service,
series_app=series_app_instance
)
await background_loader.start()
logger.info("Background loader service started")

View File

@@ -443,6 +443,14 @@ class WebSocketService:
"""Disconnect a WebSocket client."""
await self._manager.disconnect(connection_id)
async def broadcast(self, message: Dict[str, Any]) -> None:
"""Broadcast a message to all connected clients.
Args:
message: Dictionary message to broadcast to all clients
"""
await self._manager.broadcast(message)
async def broadcast_download_progress(
self, download_id: str, progress_data: Dict[str, Any]
) -> None: