Files
server-core/alembic/versions/0027_event_pricing.py
T
Pine bb3559bd51 feat(pay): 微信支付子应用与活动定价报名(event_orders/EV_ 前缀/支付后自动确认)
- app/pay 域新增活动订单模型与事件服务,复用充值支付链路(JSAPI+回调验签+幂等+15 分钟过期+对账补单)
- 0027: bookings 加 pay_status/order_no,events 加 price_fen(0=免费)
- 运营端桥透传活动定价字段

Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-31 20:36:16 +08:00

55 lines
2.7 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
"""活动定价 + 报名支付(events.price_fenbookings.pay_status/order_noevent_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")