39 lines
1.2 KiB
Python
Executable File
39 lines
1.2 KiB
Python
Executable File
from typing import Generator, Optional, Dict, Any
|
|
from fastapi import Request
|
|
from app.db.session import get_conn
|
|
|
|
def _set_config(cur, key: str, value: str) -> None:
|
|
cur.execute("SELECT set_config(%s, %s, false);", (key, value))
|
|
|
|
def db_tx(request: Request) -> Generator[Dict[str, Any], None, None]:
|
|
"""
|
|
Egységes DB tranzakció + session context:
|
|
BEGIN
|
|
set_config(app.tenant_org_id, app.account_id, app.is_platform_admin)
|
|
COMMIT/ROLLBACK
|
|
"""
|
|
conn = get_conn()
|
|
try:
|
|
cur = conn.cursor()
|
|
cur.execute("BEGIN;")
|
|
|
|
claims: Optional[dict] = getattr(request.state, "claims", None)
|
|
if claims:
|
|
org_id = claims.get("org_id") or ""
|
|
account_id = claims.get("sub") or ""
|
|
is_platform_admin = claims.get("is_platform_admin", False)
|
|
|
|
# Fontos: set_config stringeket vár
|
|
_set_config(cur, "app.tenant_org_id", str(org_id))
|
|
_set_config(cur, "app.account_id", str(account_id))
|
|
_set_config(cur, "app.is_platform_admin", "true" if is_platform_admin else "false")
|
|
|
|
yield {"conn": conn, "cur": cur}
|
|
|
|
conn.commit()
|
|
except Exception:
|
|
conn.rollback()
|
|
raise
|
|
finally:
|
|
conn.close()
|