Merge pull request 'refactor: enhance JSON serialization in AuditLog service' (#156) from fix/company into development

Reviewed-on: ADUANASOFT/anexo76#156
This commit is contained in:
2026-02-20 17:55:38 +00:00

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,