refactor: запись хода занятия — один commit SessionStore на операцию вместо журнала и checkpoint

Правка балла с пульта и из отчёта идёт одной доменной операцией: раньше WS-путь не обновлял full_report живой сессии.
This commit is contained in:
gglamer 2026-09-26 22:48:24 +00:00
commit 47cb85ee02
30 changed files with 1406 additions and 1161 deletions

View file

@ -40,6 +40,7 @@ async def create_session(
owner_login: str | None = None,
backend_node_id: str | None = None,
before_commit: BeforeSessionCommit | None = None,
commit: bool = True,
) -> Session:
session = Session(
scenario_id=scenario_id,
@ -56,7 +57,10 @@ async def create_session(
if before_commit is not None:
await db.flush()
before_commit(db, session)
await db.commit()
if commit:
await db.commit()
else:
await db.flush()
return session
@ -72,6 +76,7 @@ async def ensure_session(
owner_login: str | None = None,
backend_node_id: str | None = None,
before_commit: BeforeSessionCommit | None = None,
commit: bool = True,
) -> Session:
"""Занятие, запущенное с пульта, должно иметь строку в журнале.
@ -98,8 +103,7 @@ async def ensure_session(
changed = True
if before_commit is not None:
before_commit(db, existing)
await db.commit()
elif changed:
if commit and (before_commit is not None or changed):
await db.commit()
return existing
@ -123,6 +127,7 @@ async def ensure_session(
owner_login=owner_login,
backend_node_id=backend_node_id,
before_commit=before_commit,
commit=commit,
)