Files

58 lines
1.6 KiB
Python

import logging
from datetime import datetime, timezone
from typing import Optional
from sqlalchemy.ext.asyncio import AsyncSession
from db.dal import message_log_dal
logger = logging.getLogger(__name__)
def _clean_piece(value: Optional[object]) -> str:
return str(value or "").strip()
async def log_user_message_delivery(
session: AsyncSession,
*,
target_user_id: Optional[int],
event_type: str,
channel: str,
content: str,
recipient: Optional[str] = None,
timestamp: Optional[datetime] = None,
) -> None:
"""Add a best-effort user log entry for important outbound messages."""
clean_event = _clean_piece(event_type)
clean_channel = _clean_piece(channel)
if not clean_event or not clean_channel:
return
parts = [f"channel={clean_channel}"]
clean_recipient = _clean_piece(recipient)
if clean_recipient:
parts.append(f"recipient={clean_recipient}")
clean_content = _clean_piece(content)
if clean_content:
parts.append(clean_content)
try:
await message_log_dal.create_message_log_no_commit(
session,
{
"user_id": None,
"event_type": clean_event,
"content": " | ".join(parts)[:4000],
"is_admin_event": False,
"target_user_id": int(target_user_id) if target_user_id is not None else None,
"timestamp": timestamp or datetime.now(timezone.utc),
},
)
except Exception:
logger.exception(
"Failed to add outbound message audit log for user %s event %s",
target_user_id,
clean_event,
)