Merge pull request 'ws-user-id-fix: пишем для сессии бд пользователя' (#50) from ws-user-id-fix into test

Reviewed-on: #50
Reviewed-by: Raykov-MS <RaykovMS@avt.rshb.ru>
This commit is contained in:
tsygankoviva 2026-06-17 12:05:03 +03:00
commit 5b6cda18b2

View File

@ -11,6 +11,7 @@ from sqlalchemy.exc import IntegrityError
from fastapi import APIRouter, WebSocket, WebSocketDisconnect, status from fastapi import APIRouter, WebSocket, WebSocketDisconnect, status
from sqlalchemy.ext.asyncio import AsyncSession from sqlalchemy.ext.asyncio import AsyncSession
from src.repository.user_repository import UserRepository
from src.services.budget_line_service import BudgetLineService from src.services.budget_line_service import BudgetLineService
from src.api.v1.deps import get_user_by_token from src.api.v1.deps import get_user_by_token
from src.db.models.app_user import AppUser from src.db.models.app_user import AppUser
@ -25,10 +26,13 @@ from src.services.user_service import UserService
@asynccontextmanager @asynccontextmanager
async def get_db_session(): async def get_db_session(user_id: int | None = None):
"""Контекстный менеджер для получения сессии базы данных.""" """Контекстный менеджер для получения сессии базы данных."""
db = SessionLocal() db = SessionLocal()
try: try:
if user_id is not None:
user_repo = UserRepository(db)
await user_repo.set_app_user_id(user_id=user_id)
yield db yield db
finally: finally:
await db.close() await db.close()
@ -603,8 +607,6 @@ async def login(websocket: WebSocket, **kwargs) -> int:
return user.id return user.id
def resolve_cell_key(event_data: dict) -> dict | None: def resolve_cell_key(event_data: dict) -> dict | None:
data = event_data.get("data") data = event_data.get("data")
@ -738,7 +740,7 @@ async def process_websocket(
case _: case _:
pass pass
async with get_db_session() as db: async with get_db_session(user_id=user_id) as db:
processor = processor_cls(db) processor = processor_cls(db)
data["result"] = await processor.process( data["result"] = await processor.process(
event_data=data, event_data=data,