"""启动确认窗兜底样本落库:单条 insert(都上报、不去重,by design)。""" from __future__ import annotations import logging from typing import Optional from sqlalchemy.orm import Session from app.models.launch_confirm_sample import LaunchConfirmSample from app.schemas.launch_confirm_sample import LaunchConfirmSampleIn logger = logging.getLogger("shagua.launch_confirm") def _trunc(s: Optional[str], n: int) -> Optional[str]: """截断到列长上限(PG varchar 超长会报错;繁体长标题等需要)。空 → None。""" return s[:n] if s else None def insert_sample(db: Session, payload: LaunchConfirmSampleIn) -> int: """写入一条样本,返回新行 id。""" row = LaunchConfirmSample( trace_id=_trunc(payload.trace_id, 64), device_id=_trunc(payload.device_id, 64), host_package=_trunc(payload.host_package, 128), target_app=_trunc(payload.target_app, 128), system_locale=_trunc(payload.system_locale, 32), exec_success=bool(payload.exec_success), dialog_title=_trunc(payload.dialog_title, 256), payload=payload.payload, ) db.add(row) db.commit() db.refresh(row) return row.id