from __future__ import annotations from datetime import datetime from typing import Any from sqlalchemy import DateTime, JSON, String, Text, func from sqlalchemy.orm import Mapped, mapped_column from app.core.database import Base class GenerationCache(Base): __tablename__ = "generation_cache" cache_key: Mapped[str] = mapped_column(String(160), primary_key=True) task_type: Mapped[str] = mapped_column(String(80), index=True, nullable=False) provider: Mapped[str] = mapped_column(String(80), index=True, nullable=False) input_hash: Mapped[str] = mapped_column(String(128), index=True, nullable=False) output_json: Mapped[dict[str, Any] | None] = mapped_column(JSON, nullable=True) output_text: Mapped[str | None] = mapped_column(Text, nullable=True) output_file_path: Mapped[str | None] = mapped_column(String(1000), nullable=True) metadata_json: Mapped[dict[str, Any]] = mapped_column(JSON, default=dict, nullable=False) created_at: Mapped[datetime] = mapped_column( DateTime(timezone=True), server_default=func.now(), nullable=False, ) expires_at: Mapped[datetime | None] = mapped_column(DateTime(timezone=True), nullable=True)