"""init database with SQLite Block storage Revision ID: 001_init_database Revises: Create Date: 2026-07-03 初始化数据库,包含 SQLite Block 存储方案的表结构 """ from alembic import op import sqlalchemy as sa revision = "001_init_database" down_revision = None branch_labels = None depends_on = None def upgrade() -> None: # ========== documents 表 ========== op.create_table( "documents", sa.Column("id", sa.String(64), primary_key=True), sa.Column("content_db_path", sa.String(1024), nullable=False), sa.Column("session_id", sa.String(128), nullable=True), sa.Column("created_by", sa.String(128), nullable=True), sa.Column( "created_at", sa.DateTime(timezone=True), server_default=sa.func.now(), nullable=False, ), sa.Column( "updated_at", sa.DateTime(timezone=True), server_default=sa.func.now(), onupdate=sa.func.now(), nullable=False, ), ) op.create_index("ix_documents_session_id", "documents", ["session_id"]) op.create_index("ix_documents_created_by", "documents", ["created_by"]) # ========== export_records 表 ========== op.create_table( "export_records", sa.Column("id", sa.String(64), primary_key=True), sa.Column("user_id", sa.String(128), nullable=False), sa.Column("file_name", sa.String(512), nullable=False), sa.Column("file_path", sa.String(1024), nullable=False), sa.Column("file_size", sa.BigInteger(), nullable=False, server_default="0"), sa.Column("download_url", sa.String(1024), nullable=False), sa.Column("document_id", sa.String(64), nullable=True), sa.Column("style_id", sa.String(64), nullable=False, server_default="default"), sa.Column( "created_at", sa.DateTime(timezone=True), server_default=sa.func.now(), nullable=False, ), ) op.create_index("ix_export_records_user_id", "export_records", ["user_id"]) op.create_index("ix_export_records_document_id", "export_records", ["document_id"]) def downgrade() -> None: # 删除 export_records 表 op.drop_index("ix_export_records_document_id", table_name="export_records") op.drop_index("ix_export_records_user_id", table_name="export_records") op.drop_table("export_records") # 删除 documents 表 op.drop_index("ix_documents_created_by", table_name="documents") op.drop_index("ix_documents_session_id", table_name="documents") op.drop_table("documents")