mirror of
https://github.com/open-webui/open-webui.git
synced 2025-12-13 21:05:19 +00:00
72 lines
2.6 KiB
Python
72 lines
2.6 KiB
Python
"""Add precharge fields to billing_log
|
||
|
||
Revision ID: 240e45fa2f01
|
||
Revises: f8c9d0e4a3b2
|
||
Create Date: 2025-12-06 18:00:00.000000
|
||
|
||
添加预扣费相关字段到billing_log表:
|
||
- precharge_id: 预扣费事务ID(UUID)
|
||
- status: 记录状态(precharge | settled | refunded)
|
||
- estimated_tokens: 预估tokens总数
|
||
- refund_amount: 退款金额(毫)
|
||
"""
|
||
|
||
from alembic import op
|
||
import sqlalchemy as sa
|
||
|
||
|
||
revision = "240e45fa2f01"
|
||
down_revision = "f8c9d0e4a3b2"
|
||
branch_labels = None
|
||
depends_on = None
|
||
|
||
|
||
def upgrade():
|
||
"""升级数据库:添加预扣费字段"""
|
||
connection = op.get_bind()
|
||
is_sqlite = connection.dialect.name == "sqlite"
|
||
|
||
if is_sqlite:
|
||
# SQLite: 使用batch模式
|
||
with op.batch_alter_table("billing_log") as batch_op:
|
||
batch_op.add_column(sa.Column("precharge_id", sa.String(), nullable=True))
|
||
batch_op.add_column(
|
||
sa.Column("status", sa.String(20), nullable=True, server_default="settled")
|
||
)
|
||
batch_op.add_column(sa.Column("estimated_tokens", sa.Integer(), nullable=True))
|
||
batch_op.add_column(sa.Column("refund_amount", sa.Integer(), nullable=True))
|
||
batch_op.create_index("ix_billing_log_precharge_id", ["precharge_id"])
|
||
else:
|
||
# PostgreSQL: 直接操作
|
||
op.add_column("billing_log", sa.Column("precharge_id", sa.String(), nullable=True))
|
||
op.add_column(
|
||
"billing_log",
|
||
sa.Column("status", sa.String(20), nullable=True, server_default="settled"),
|
||
)
|
||
op.add_column(
|
||
"billing_log", sa.Column("estimated_tokens", sa.Integer(), nullable=True)
|
||
)
|
||
op.add_column(
|
||
"billing_log", sa.Column("refund_amount", sa.Integer(), nullable=True)
|
||
)
|
||
op.create_index("ix_billing_log_precharge_id", "billing_log", ["precharge_id"])
|
||
|
||
|
||
def downgrade():
|
||
"""降级数据库:删除预扣费字段"""
|
||
connection = op.get_bind()
|
||
is_sqlite = connection.dialect.name == "sqlite"
|
||
|
||
if is_sqlite:
|
||
with op.batch_alter_table("billing_log") as batch_op:
|
||
batch_op.drop_index("ix_billing_log_precharge_id")
|
||
batch_op.drop_column("refund_amount")
|
||
batch_op.drop_column("estimated_tokens")
|
||
batch_op.drop_column("status")
|
||
batch_op.drop_column("precharge_id")
|
||
else:
|
||
op.drop_index("ix_billing_log_precharge_id", table_name="billing_log")
|
||
op.drop_column("billing_log", "refund_amount")
|
||
op.drop_column("billing_log", "estimated_tokens")
|
||
op.drop_column("billing_log", "status")
|
||
op.drop_column("billing_log", "precharge_id")
|