From d85a1cb131a210f61f0e3778bad1ccd4a28ca8d4 Mon Sep 17 00:00:00 2001 From: Mark <348207283@qq.com> Date: Tue, 28 Apr 2026 13:41:46 +0800 Subject: [PATCH] [add] migration script --- .../versions/1f85dce125e5_202604271530.py | 42 +++++++++++++++++++ .../versions/e2d60c6d1a1a_202604281230.py | 34 +++++++++++++++ 2 files changed, 76 insertions(+) create mode 100644 api/migrations/versions/1f85dce125e5_202604271530.py create mode 100644 api/migrations/versions/e2d60c6d1a1a_202604281230.py diff --git a/api/migrations/versions/1f85dce125e5_202604271530.py b/api/migrations/versions/1f85dce125e5_202604271530.py new file mode 100644 index 00000000..cc0caa3a --- /dev/null +++ b/api/migrations/versions/1f85dce125e5_202604271530.py @@ -0,0 +1,42 @@ +"""202604271530 + +Revision ID: 1f85dce125e5 +Revises: 4e89970f9e7c +Create Date: 2026-04-27 15:30:35.614679 + +""" +from typing import Sequence, Union + +from alembic import op +import sqlalchemy as sa +from sqlalchemy.dialects import postgresql + +# revision identifiers, used by Alembic. +revision: str = '1f85dce125e5' +down_revision: Union[str, None] = '4e89970f9e7c' +branch_labels: Union[str, Sequence[str], None] = None +depends_on: Union[str, Sequence[str], None] = None + + +def upgrade() -> None: + # ### commands auto generated by Alembic - please adjust! ### + op.add_column('files', sa.Column('file_key', sa.String(length=512), nullable=True, comment='storage file key for FileStorageService')) + op.create_index(op.f('ix_files_file_key'), 'files', ['file_key'], unique=False) + op.alter_column('model_configs', 'capability', + existing_type=postgresql.ARRAY(sa.VARCHAR()), + comment="模型能力列表(如['vision', 'audio', 'video', 'thinking'])", + existing_comment="模型能力列表(如['vision', 'audio', 'video'])", + existing_nullable=False) + # ### end Alembic commands ### + + +def downgrade() -> None: + # ### commands auto generated by Alembic - please adjust! ### + op.alter_column('model_configs', 'capability', + existing_type=postgresql.ARRAY(sa.VARCHAR()), + comment="模型能力列表(如['vision', 'audio', 'video'])", + existing_comment="模型能力列表(如['vision', 'audio', 'video', 'thinking'])", + existing_nullable=False) + op.drop_index(op.f('ix_files_file_key'), table_name='files') + op.drop_column('files', 'file_key') + # ### end Alembic commands ### diff --git a/api/migrations/versions/e2d60c6d1a1a_202604281230.py b/api/migrations/versions/e2d60c6d1a1a_202604281230.py new file mode 100644 index 00000000..dc020104 --- /dev/null +++ b/api/migrations/versions/e2d60c6d1a1a_202604281230.py @@ -0,0 +1,34 @@ +"""202604281230 + +Revision ID: e2d60c6d1a1a +Revises: 1f85dce125e5 +Create Date: 2026-04-28 12:32:01.643954 + +""" +from typing import Sequence, Union + +from alembic import op +import sqlalchemy as sa +from sqlalchemy.dialects import postgresql + +# revision identifiers, used by Alembic. +revision: str = 'e2d60c6d1a1a' +down_revision: Union[str, None] = '1f85dce125e5' +branch_labels: Union[str, Sequence[str], None] = None +depends_on: Union[str, Sequence[str], None] = None + + +def upgrade() -> None: + # ### commands auto generated by Alembic - please adjust! ### + op.drop_column('tenants', 'api_ops_rate_limit') + op.drop_column('tenants', 'plan') + op.drop_column('tenants', 'plan_expired_at') + # ### end Alembic commands ### + + +def downgrade() -> None: + # ### commands auto generated by Alembic - please adjust! ### + op.add_column('tenants', sa.Column('plan_expired_at', postgresql.TIMESTAMP(), autoincrement=False, nullable=True)) + op.add_column('tenants', sa.Column('plan', sa.VARCHAR(length=50), autoincrement=False, nullable=True)) + op.add_column('tenants', sa.Column('api_ops_rate_limit', sa.VARCHAR(length=100), autoincrement=False, nullable=True)) + # ### end Alembic commands ###