This commit is contained in:
Dusan Vojacek
2026-03-20 14:30:03 +01:00
parent 2cc5ccfda7
commit 897b95f728
48 changed files with 4034 additions and 842 deletions

35
backend/app/db_json.py Normal file
View File

@@ -0,0 +1,35 @@
"""asyncpg Record → JSON-serializovatelný dict."""
from __future__ import annotations
from datetime import date, datetime, timezone
from decimal import Decimal
from typing import Any
from uuid import UUID
import asyncpg
def record_to_dict(r: asyncpg.Record) -> dict[str, Any]:
out: dict[str, Any] = {}
for k in r.keys():
v = r[k]
if v is None:
out[k] = None
elif isinstance(v, datetime):
if v.tzinfo is None:
v = v.replace(tzinfo=timezone.utc)
out[k] = v.isoformat()
elif isinstance(v, date):
out[k] = v.isoformat()
elif isinstance(v, Decimal):
out[k] = float(v)
elif isinstance(v, UUID):
out[k] = str(v)
elif isinstance(v, (dict, list, str, int, float, bool)):
out[k] = v
elif isinstance(v, (bytes, memoryview)):
out[k] = bytes(v).decode("utf-8", errors="replace")
else:
out[k] = str(v)
return out