# backend/app/connectors/calendar/__init__.py — 캘린더 읽기 커넥터 + phase-13 sync 프레임워크 # 읽기 경로는 CalEvent/Meeting 테이블을 직접 읽는다(Google sync 가 적재한 실데이터). # (sync 커넥터는 같은 패키지의 real_google.py/ics_import.py) from typing import Optional from sqlmodel import Session, select from ...models import CalEvent, Meeting from ..base import CalendarConnector class CalendarReadConnector(CalendarConnector): """캘린더 페이지 읽기 경로. CalEvent/Meeting 테이블을 그대로 읽는다. 실제 일정 유입은 Google Calendar sync(real_google.py)가 같은 테이블에 적재한다(메일과 동일).""" def list_events(self, s: Session, day: Optional[int] = None) -> list[dict]: q = select(CalEvent) if day is not None: q = q.where(CalEvent.day == day) rows = s.exec(q.order_by(CalEvent.day, CalEvent.start)).all() return [r.model_dump() for r in rows] def get_meeting(self, s: Session, meeting_id: str) -> Optional[dict]: m = s.get(Meeting, meeting_id) return m.model_dump() if m else None def write_event(self, s: Session, payload: dict) -> dict: ev = CalEvent(**payload) s.add(ev) s.commit() return ev.model_dump() def get_calendar_connector() -> CalendarReadConnector: return CalendarReadConnector()