diff --git a/backend/app/models/knowledge_base_document.py b/backend/app/models/knowledge_base_document.py index e613260d..c7844329 100644 --- a/backend/app/models/knowledge_base_document.py +++ b/backend/app/models/knowledge_base_document.py @@ -19,7 +19,7 @@ class KnowledgeBaseDocument(Base): status: Mapped[str] = mapped_column(String(32), default="indexed") source_type: Mapped[Optional[str]] = mapped_column(String(64), nullable=True, index=True) authority: Mapped[Optional[str]] = mapped_column(String(255), nullable=True) - effective_date: Mapped[Optional[str]] = mapped_column(String(32), nullable=True) + effective_date: Mapped[Optional[str]] = mapped_column(String(128), nullable=True) region: Mapped[Optional[str]] = mapped_column(String(120), nullable=True, index=True) tags_json: Mapped[Optional[list[str]]] = mapped_column(JSON, nullable=True) content_excerpt: Mapped[Optional[str]] = mapped_column(Text, nullable=True) diff --git a/backend/migrations/versions/20260516_0021_widen_knowledge_document_effective_date.py b/backend/migrations/versions/20260516_0021_widen_knowledge_document_effective_date.py new file mode 100644 index 00000000..ec22e760 --- /dev/null +++ b/backend/migrations/versions/20260516_0021_widen_knowledge_document_effective_date.py @@ -0,0 +1,45 @@ +"""widen knowledge document effective date metadata""" + +from alembic import op +import sqlalchemy as sa + + +revision = "20260516_0021" +down_revision = "20260513_0020" +branch_labels = None +depends_on = None + + +def _table_names(inspector: sa.Inspector) -> set[str]: + return set(inspector.get_table_names()) + + +def _column_by_name(inspector: sa.Inspector, table_name: str, column_name: str): + for column in inspector.get_columns(table_name): + if column["name"] == column_name: + return column + return None + + +def upgrade() -> None: + bind = op.get_bind() + inspector = sa.inspect(bind) + if "knowledge_base_documents" not in _table_names(inspector): + return + column = _column_by_name(inspector, "knowledge_base_documents", "effective_date") + if column is None: + return + current_length = getattr(column["type"], "length", None) + if current_length is None or current_length < 128: + op.alter_column( + "knowledge_base_documents", + "effective_date", + existing_type=sa.String(length=current_length or 32), + type_=sa.String(length=128), + existing_nullable=True, + ) + + +def downgrade() -> None: + # Keep the wider column on downgrade so already absorbed multi-source metadata is not truncated. + return