bb3559bd51
- app/pay 域新增活动订单模型与事件服务,复用充值支付链路(JSAPI+回调验签+幂等+15 分钟过期+对账补单) - 0027: bookings 加 pay_status/order_no,events 加 price_fen(0=免费) - 运营端桥透传活动定价字段 Co-Authored-By: Claude <noreply@anthropic.com>
55 lines
2.7 KiB
Python
55 lines
2.7 KiB
Python
"""活动定价 + 报名支付(events.price_fen;bookings.pay_status/order_no;event_orders 表)
|
||
|
||
Revision ID: 0027_event_pricing
|
||
Revises: 0026_compute_recharge
|
||
Create Date: 2026-08-30
|
||
"""
|
||
from __future__ import annotations
|
||
|
||
import sqlalchemy as sa
|
||
from alembic import op
|
||
|
||
revision = "0027_event_pricing"
|
||
down_revision = "0026_compute_recharge"
|
||
branch_labels = None
|
||
depends_on = None
|
||
|
||
|
||
def upgrade() -> None:
|
||
# 活动:定价(分,0=免费)
|
||
op.add_column("events", sa.Column("price_fen", sa.Integer(), nullable=False, server_default="0"))
|
||
# 报名:支付状态(''|unpaid|paid)+ 关联订单号
|
||
op.add_column("bookings", sa.Column("pay_status", sa.String(), nullable=False, server_default=""))
|
||
op.add_column("bookings", sa.Column("order_no", sa.String(), nullable=False, server_default=""))
|
||
|
||
op.create_table(
|
||
"event_orders",
|
||
sa.Column("id", sa.String(), primary_key=True),
|
||
sa.Column("order_no", sa.String(), nullable=False, unique=True, index=True),
|
||
sa.Column("booking_id", sa.String(), nullable=False, server_default="", index=True),
|
||
sa.Column("event_id", sa.String(), nullable=False, server_default="", index=True),
|
||
sa.Column("event_title", sa.String(), nullable=False, server_default=""),
|
||
sa.Column("user_id", sa.String(), nullable=False, server_default="", index=True),
|
||
sa.Column("username", sa.String(), nullable=False, server_default="", index=True),
|
||
sa.Column("openid", sa.String(), nullable=False, server_default=""),
|
||
sa.Column("amount_fen", sa.Integer(), nullable=False, server_default="0"),
|
||
sa.Column("client_type", sa.String(), nullable=False, server_default="jsapi"),
|
||
sa.Column("appid", sa.String(), nullable=False, server_default=""),
|
||
sa.Column("status", sa.String(), nullable=False, server_default="pending", index=True),
|
||
sa.Column("prepay_id", sa.String(), nullable=False, server_default=""),
|
||
sa.Column("transaction_id", sa.String(), nullable=False, server_default="", index=True),
|
||
sa.Column("expires_at", sa.String(), nullable=False, server_default=""),
|
||
sa.Column("paid_at", sa.String(), nullable=False, server_default=""),
|
||
sa.Column("credited_at", sa.String(), nullable=False, server_default=""),
|
||
sa.Column("notify_payload", sa.Text(), nullable=False, server_default=""),
|
||
sa.Column("created_at", sa.String(), nullable=False, server_default="", index=True),
|
||
sa.Column("updated_at", sa.String(), nullable=False, server_default=""),
|
||
)
|
||
|
||
|
||
def downgrade() -> None:
|
||
op.drop_table("event_orders")
|
||
op.drop_column("bookings", "order_no")
|
||
op.drop_column("bookings", "pay_status")
|
||
op.drop_column("events", "price_fen")
|