diff --git a/app/models.py b/app/models.py index 980030d..665a8cd 100644 --- a/app/models.py +++ b/app/models.py @@ -446,15 +446,19 @@ class CsvFormatTemplate(Base): id: Mapped[int] = mapped_column(_PK, primary_key=True, autoincrement=True) fingerprint: Mapped[str] = mapped_column(String(64), unique=True, nullable=False) - headers: Mapped[list] = mapped_column(JSON, nullable=False) - sample_row: Mapped[list] = mapped_column(JSON, nullable=False) - mapping: Mapped[dict] = mapped_column(JSON, nullable=False) + headers: Mapped[list[str]] = mapped_column(JSON, nullable=False) + sample_row: Mapped[list[str]] = mapped_column(JSON, nullable=False) + mapping: Mapped[dict[str, str | None]] = mapped_column(JSON, nullable=False) preamble_rows: Mapped[int] = mapped_column(Integer, nullable=False, default=0) delimiter: Mapped[str] = mapped_column(String(1), nullable=False, default=",") broker_label: Mapped[str | None] = mapped_column(String(128)) first_seen_at: Mapped[datetime] = mapped_column( DateTime(timezone=True), nullable=False, default=utcnow, ) + # use_count and last_used_at are application-managed: parse_with_llm + # increments use_count and sets last_used_at = utcnow() on every cache hit. + # No onupdate hook — we don't want unrelated writes (e.g. broker_label edits) + # to re-stamp last_used_at. use_count: Mapped[int] = mapped_column(Integer, nullable=False, default=1) last_used_at: Mapped[datetime] = mapped_column( DateTime(timezone=True), nullable=False, default=utcnow,