"""会话与消息入库;仅存 public 可见内容,隔离内部信息。""" from sqlalchemy import select from sqlalchemy.ext.asyncio import AsyncSession from app.models import ChatSession, Message async def get_or_create_session( db: AsyncSession, external_user_id: str, external_name: str | None = None, ) -> ChatSession: r = await db.execute(select(ChatSession).where(ChatSession.external_user_id == external_user_id)) row = r.scalar_one_or_none() if row: if external_name is not None and row.external_name != external_name: row.external_name = external_name await db.flush() return row session = ChatSession(external_user_id=external_user_id, external_name=external_name or None) db.add(session) await db.flush() return session async def add_message(db: AsyncSession, session_id: int, role: str, content: str) -> Message: msg = Message(session_id=session_id, role=role, content=content) db.add(msg) await db.flush() return msg