614804a0a6
- 活动三维标签(区域/类型/模式)+ 发布范围(本园区/公开)+ 审核流(0031):C 端仅展示 approved,园区活动仅本园区可见
- 独立字段:富文本介绍 body、注意事项 notice(0032)、外链报名 signup_mode/external_url、发布者信息
- 审核端点 /api/events/{eid}/review 双身份(operator 任意 / carrier 限本园区)+ /api/events/mine
- 报名生命周期闭环(0033):未支付/待审核=删除,待参加=取消,结束未签到=爽约可申诉,未支付 15 分钟自动关闭删除
Co-Authored-By: Claude <noreply@anthropic.com>
35 lines
1.2 KiB
Python
35 lines
1.2 KiB
Python
"""报名生命周期:爽约与申诉(bookings 加 appeal_status/appeal_reason/appeal_at)
|
||
|
||
状态语义(本迁移后完整闭环):
|
||
未支付(unpaid) → 15 分钟未付自动关闭并删除报名
|
||
待审核(audit pending, 免费人工审) → 可删除报名
|
||
待参加(approved) → 免费可取消;已支付不可取消
|
||
已结束(done) → 已签到=已完成;未签到=爽约(可申诉)
|
||
已取消(cancelled)
|
||
|
||
Revision ID: 0033_booking_lifecycle
|
||
Revises: 0032_event_notice
|
||
Create Date: 2026-08-31
|
||
"""
|
||
from __future__ import annotations
|
||
|
||
import sqlalchemy as sa
|
||
from alembic import op
|
||
|
||
revision = "0033_booking_lifecycle"
|
||
down_revision = "0032_event_notice"
|
||
branch_labels = None
|
||
depends_on = None
|
||
|
||
|
||
def upgrade() -> None:
|
||
op.add_column("bookings", sa.Column("appeal_status", sa.String(), nullable=True, server_default="")) # ''|pending|approved|rejected
|
||
op.add_column("bookings", sa.Column("appeal_reason", sa.Text(), nullable=True, server_default=""))
|
||
op.add_column("bookings", sa.Column("appeal_at", sa.String(), nullable=True, server_default=""))
|
||
|
||
|
||
def downgrade() -> None:
|
||
op.drop_column("bookings", "appeal_at")
|
||
op.drop_column("bookings", "appeal_reason")
|
||
op.drop_column("bookings", "appeal_status")
|