Files
shaguabijia-app-server/alembic/versions/order_record_table.py
T
xianze ee6c2e4710 feat(记账): 比价省钱记账后端 + 此前未提交的归因订单基础
本次(M1 记账): savings_record 升级为记账唯一真相表(新增 源平台原价/比价价/支付渠道/平台包名/源平台名/源链接/幂等键/device_id, 加 user_id+client_event_id 唯一约束); /api/v1/order/report 改为写 savings_record(source=compare), 省额=源平台原价 减 实付, 按 client_event_id 幂等; 统计与明细改为 有真实记录用真实、否则 demo 兜底; 修复 dishes 列 JSONB 改 with_variant 兼容 SQLite 测试库; 新增 tests/test_order_savings.py, 全量 pytest 54 passed

一并纳入(此前工作区已有、未提交, 非本次改动): order_record 归因订单 模型/repo/api/迁移, 及 main.py、models/__init__ 注册等改动

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-05-31 21:30:30 +08:00

43 lines
1.4 KiB
Python

"""order record table (归因订单)
Revision ID: order_record_table
Revises: f01db5d77dac
"""
from __future__ import annotations
from alembic import op
import sqlalchemy as sa
revision = "order_record_table"
down_revision = "f01db5d77dac"
branch_labels = None
depends_on = None
def upgrade() -> None:
op.create_table(
"order_record",
sa.Column("id", sa.Integer(), primary_key=True, autoincrement=True),
sa.Column("user_id", sa.Integer(), sa.ForeignKey("user.id"), nullable=False, index=True),
sa.Column("client_event_id", sa.String(length=64), nullable=False),
sa.Column("platform", sa.String(length=32), nullable=False),
sa.Column("platform_package", sa.String(length=128), nullable=True),
sa.Column("pay_channel", sa.String(length=16), nullable=False),
sa.Column("compared_price_cents", sa.Integer(), nullable=False),
sa.Column("paid_amount_cents", sa.Integer(), nullable=False),
sa.Column("device_id", sa.String(length=128), nullable=True),
sa.Column("source", sa.String(length=32), nullable=False),
sa.Column(
"created_at",
sa.DateTime(timezone=True),
server_default=sa.func.now(),
nullable=False,
),
sa.UniqueConstraint("user_id", "client_event_id", name="uq_order_user_event"),
)
def downgrade() -> None:
op.drop_table("order_record")