Files
meijiaka-zy/python-api/alembic/versions/d0a7c5a375c6_add_app_update_tables.py
T
小鱼开发 cb56698836 feat: 应用自动更新系统 + 草稿箱删除 + 分类缓存优化
- 新增 Tauri 自动更新(updater 插件)
  - Rust: 集成 tauri-plugin-updater + tauri-plugin-process
  - 后端: app_releases / release_packages 表 + /update/check API
  - 前端: UpdateDialog 组件 + useUpdater hook + SystemUpdate 手动检查
  - 发版脚本: scripts/publish_release.py(扫描 .sig → 上传七牛云 → 写入数据库)
  - 配置 test 环境域名 dev.tapi.meijiaka.cn

- 草稿箱删除功能
  - DraftListItem 添加删除按钮
  - MyWorks 添加删除确认弹窗 + localProjectApi.deleteProject 调用

- 创作主题分类本地缓存
  - scriptApi.getCategoriesCached() 先读 localStorage 再静默刷新

- TermsModal tab 居中

- 更新应用图标(Big Sur 风格圆角矩形)

- 清理: 删除未使用文件 create_user.py / video-replace-mvp.py / DEPS_*.md
2026-05-15 16:41:57 +08:00

63 lines
2.4 KiB
Python

"""
add app update tables
Revision ID: d0a7c5a375c6
Revises: e02c96e264d9
Create Date: 2026-05-11 09:30:00.000000
"""
from typing import Sequence, Union
from alembic import op
import sqlalchemy as sa
# revision identifiers, used by Alembic.
revision: str = "d0a7c5a375c6"
down_revision: Union[str, None] = "e02c96e264d9"
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.create_table(
"app_releases",
sa.Column("id", sa.Integer(), autoincrement=True, nullable=False),
sa.Column("version", sa.String(length=20), nullable=False),
sa.Column("release_date", sa.DateTime(timezone=True), nullable=False),
sa.Column("notes", sa.Text(), nullable=False),
sa.Column("mandatory", sa.Boolean(), nullable=False, server_default=sa.text("false")),
sa.Column("created_at", sa.DateTime(timezone=True), nullable=False),
sa.PrimaryKeyConstraint("id"),
sa.UniqueConstraint("version"),
)
op.create_index("ix_app_releases_version", "app_releases", ["version"], unique=False)
op.create_table(
"release_packages",
sa.Column("id", sa.Integer(), autoincrement=True, nullable=False),
sa.Column("release_id", sa.Integer(), nullable=False),
sa.Column("platform", sa.String(length=20), nullable=False),
sa.Column("architecture", sa.String(length=20), nullable=False),
sa.Column("filename", sa.String(length=255), nullable=False),
sa.Column("file_url", sa.String(length=500), nullable=False),
sa.Column("file_size", sa.BigInteger(), nullable=False),
sa.Column("signature", sa.Text(), nullable=False),
sa.Column("download_count", sa.Integer(), nullable=False, server_default=sa.text("0")),
sa.Column("created_at", sa.DateTime(timezone=True), nullable=False),
sa.ForeignKeyConstraint(["release_id"], ["app_releases.id"], ondelete="CASCADE"),
sa.PrimaryKeyConstraint("id"),
sa.UniqueConstraint("release_id", "platform", "architecture", name="uix_pkg_platform_arch"),
)
# ### end Alembic commands ###
def downgrade() -> None:
# ### commands auto generated by Alembic - please adjust! ###
op.drop_table("release_packages")
op.drop_index("ix_app_releases_version", table_name="app_releases")
op.drop_table("app_releases")
# ### end Alembic commands ###