diff --git a/api/alembic/versions/0019_backfill_missing_columns.py b/api/alembic/versions/0019_backfill_missing_columns.py deleted file mode 100644 index 70640bd..0000000 --- a/api/alembic/versions/0019_backfill_missing_columns.py +++ /dev/null @@ -1,51 +0,0 @@ -"""补建缺失列:segments.audio_duration_seconds, conversations.deleted_at - -0001 用 create_all 建表,对已有表不会 ALTER 追加列。 -本迁移补齐 ORM 模型中存在但生产库缺失的两列。 - -Revision ID: 0019_backfill_missing_columns -Revises: 0018_users_language_preference -""" - -from typing import Sequence, Union - -import sqlalchemy as sa - -from alembic import op - -revision: str = "0019_backfill_missing_columns" -down_revision: Union[str, None] = "0018_users_language_preference" -branch_labels: Union[str, Sequence[str], None] = None -depends_on: Union[str, Sequence[str], None] = None - - -def _column_names(table_name: str) -> set[str]: - bind = op.get_bind() - inspector = sa.inspect(bind) - return {column["name"] for column in inspector.get_columns(table_name)} - - -def upgrade() -> None: - seg_cols = _column_names("segments") - if "audio_duration_seconds" not in seg_cols: - op.add_column( - "segments", - sa.Column("audio_duration_seconds", sa.Integer(), nullable=True), - ) - - conv_cols = _column_names("conversations") - if "deleted_at" not in conv_cols: - op.add_column( - "conversations", - sa.Column("deleted_at", sa.DateTime(timezone=True), nullable=True), - ) - - -def downgrade() -> None: - conv_cols = _column_names("conversations") - if "deleted_at" in conv_cols: - op.drop_column("conversations", "deleted_at") - - seg_cols = _column_names("segments") - if "audio_duration_seconds" in seg_cols: - op.drop_column("segments", "audio_duration_seconds") diff --git a/api/alembic/versions/0020_add_tts_audio_urls_column.py b/api/alembic/versions/0020_add_tts_audio_urls_column.py deleted file mode 100644 index ae22575..0000000 --- a/api/alembic/versions/0020_add_tts_audio_urls_column.py +++ /dev/null @@ -1,66 +0,0 @@ -"""补建所有 ORM 模型中存在但数据库缺失的列 - -0001 用 create_all 建表,对已有表不会 ALTER 追加列。 -本迁移自动内省 ORM 元数据与实际数据库 schema 的差异, -为每张已有表补齐缺失列(不含 FK 约束,仅补列定义)。 - -Revision ID: 0020_backfill_all_missing_columns -Revises: 0019_backfill_missing_columns -""" - -from __future__ import annotations - -from typing import Sequence, Union - -import sqlalchemy as sa - -from alembic import op - -revision: str = "0020_backfill_missing_schema" -down_revision: Union[str, None] = "0019_backfill_missing_columns" -branch_labels: Union[str, Sequence[str], None] = None -depends_on: Union[str, Sequence[str], None] = None - - -def _import_all_models() -> None: - from app.features.asset import models as _asset # noqa: F401 - from app.features.auth import models as _auth # noqa: F401 - from app.features.conversation import models as _conv # noqa: F401 - from app.features.evaluation import models as _eval # noqa: F401 - from app.features.memory import models as _memory # noqa: F401 - from app.features.memoir import models as _memoir # noqa: F401 - from app.features.payment import models as _payment # noqa: F401 - from app.features.story import models as _story # noqa: F401 - from app.features.user import models as _user # noqa: F401 - - -def upgrade() -> None: - from app.core.db import Base - - _import_all_models() - - bind = op.get_bind() - inspector = sa.inspect(bind) - existing_tables = set(inspector.get_table_names()) - - for table in Base.metadata.sorted_tables: - if table.name not in existing_tables: - continue - - db_cols = {c["name"] for c in inspector.get_columns(table.name)} - - for col in table.columns: - if col.name in db_cols: - continue - - kwargs: dict = {"nullable": True} - - if col.server_default is not None: - kwargs["server_default"] = col.server_default.arg - - new_col = sa.Column(col.name, col.type, **kwargs) - op.add_column(table.name, new_col) - - -def downgrade() -> None: - pass