# backend/app/connectors/knowledge/mock.py — 시드 기반 knowledge sync (phase-13) from datetime import UTC, datetime from sqlmodel import Session from ..base import BaseConnector, NormalizedRecord, RawRecord from .normalize import normalize_knowledge, upsert_knowledge _SIM = [ { "id": "sim-k1", "type": "highlight", "title": "온보딩 리텐션 — 첫 7일이 전부다", "src": "Readwise", "excerpt": "신규 사용자의 80%는 첫 주에 이탈 여부가 결정된다…", "tags": ["온보딩", "리텐션"], } ] class MockKnowledgeConnector(BaseConnector): domain = "knowledge" entity_type = "knowledge_item" def fetch(self, session: Session, *, full: bool = False): for p in getattr(self, "_sim_payloads", []): yield RawRecord( external_id=p["id"], payload=p, etag=p.get("title", ""), external_updated_at=datetime.now(UTC), ) def simulate_new(self) -> "MockKnowledgeConnector": self._sim_payloads = _SIM return self def normalize(self, raw: RawRecord) -> NormalizedRecord: return normalize_knowledge(self.account, raw) def write(self, session: Session, norm: NormalizedRecord): return upsert_knowledge(session, norm) def event_for(self, norm, entity_id): return "knowledge.ingested"