From 1505bc9913dcdf5d8e417f2fd45c53fc792f1a3e Mon Sep 17 00:00:00 2001 From: shokollm <270575765+shokollm@users.noreply.github.com> Date: Sun, 12 Apr 2026 04:50:24 +0000 Subject: [PATCH] fix: serialize datetime objects to ISO format for JSON storage The signals contain datetime objects for created_at which can't be serialized to JSON directly. Convert them to ISO format strings before storing. --- src/backend/app/api/simulate.py | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/src/backend/app/api/simulate.py b/src/backend/app/api/simulate.py index db96b3d..1ccbc4c 100644 --- a/src/backend/app/api/simulate.py +++ b/src/backend/app/api/simulate.py @@ -39,6 +39,16 @@ def run_simulation_sync( # Run simulation (now synchronous - processes klines quickly) results = await engine.run() + # Serialize signals for JSON storage (convert datetime to string) + def serialize_signal(s): + created = s.get("created_at") + if hasattr(created, "isoformat"): + created = created.isoformat() + return { + **s, + "created_at": created + } + db = SessionLocal() try: simulation = ( @@ -46,7 +56,7 @@ def run_simulation_sync( ) if simulation: simulation.status = engine.status - simulation.signals = engine.signals + simulation.signals = [serialize_signal(s) for s in engine.signals] # Save klines for chart display (only time and close price) simulation.klines = [ {"time": k.get("time"), "close": k.get("close")} @@ -57,6 +67,10 @@ def run_simulation_sync( db.commit() for signal in engine.signals: + created_at = signal.get("created_at") + if hasattr(created_at, "isoformat"): + created_at = created_at.isoformat() + db_signal = Signal( id=signal["id"], bot_id=signal["bot_id"], @@ -67,7 +81,7 @@ def run_simulation_sync( confidence=signal.get("confidence"), reasoning=signal.get("reasoning"), executed=signal.get("executed", False), - created_at=signal["created_at"], + created_at=created_at, ) db.add(db_signal) db.commit()