refactor: enhance JSON serialization in AuditLog service

This commit is contained in:
2026-02-20 11:54:40 -06:00
parent 90a0be105f
commit f0a7d5e1f2

View File

@@ -1,7 +1,9 @@
"""
Audit Log Service
"""
from datetime import datetime, timedelta
from datetime import datetime, timedelta, date, time
from decimal import Decimal
import uuid
import pytz
from typing import Optional, List, Dict, Any
from sqlalchemy.orm import Session
@@ -11,6 +13,29 @@ from core.security import verify_token # keep if needed or simpler just remove i
# We don't need security import here anymore as context is passed explicitly or handled by events
def _make_json_safe(obj: Any) -> Any:
"""Recursively convert non-JSON-serializable types to serializable equivalents."""
if obj is None:
return None
if isinstance(obj, dict):
return {k: _make_json_safe(v) for k, v in obj.items()}
if isinstance(obj, (list, tuple)):
return [_make_json_safe(v) for v in obj]
if isinstance(obj, datetime):
return obj.isoformat()
if isinstance(obj, date):
return obj.isoformat()
if isinstance(obj, time):
return obj.isoformat()
if isinstance(obj, Decimal):
return float(obj)
if isinstance(obj, uuid.UUID):
return str(obj)
if isinstance(obj, bytes):
return obj.decode("utf-8", errors="replace")
return obj
class AuditService:
@staticmethod
@@ -56,8 +81,8 @@ class AuditService:
table_name=table_name,
record_id=record_id,
operation_type=operation_type,
old_values=old_values,
new_values=new_values,
old_values=_make_json_safe(old_values),
new_values=_make_json_safe(new_values),
changed_fields=changed_fields,
ip_address=ip_address,
user_agent=user_agent,