"""灵核情绪状态数据访问(设计 §11.4)。""" from sqlalchemy.ext.asyncio import AsyncSession from app.models.personality_emotion import CharacterEmotionState async def get_state(session: AsyncSession, character_id: str) -> CharacterEmotionState | None: """读取某角色当前情绪状态(单行 per character)。""" return await session.get(CharacterEmotionState, character_id) async def upsert_state( session: AsyncSession, state: CharacterEmotionState ) -> CharacterEmotionState: """写入情绪状态(存在则更新字段,不存在则插入)。 跨方言(SQLite + Postgres)ORM 层 upsert,不依赖 ON CONFLICT。 ``updated_at`` 由 SQLAlchemy ``onupdate`` 自动刷新。 """ existing = await session.get(CharacterEmotionState, state.character_id) if existing is not None: existing.mood = state.mood existing.intensity = state.intensity existing.baseline_mood = state.baseline_mood existing.baseline_intensity = state.baseline_intensity existing.last_trigger_event_id = state.last_trigger_event_id return existing session.add(state) await session.flush() return state