73970087ff
Co-authored-by: guke <guke@wonderable.ai> Co-authored-by: 左辰勇 <exinglang@gmail.com> Reviewed-on: #154 Co-authored-by: zuochenyong <zuochenyong@wonderable.ai> Co-committed-by: zuochenyong <zuochenyong@wonderable.ai>
48 lines
2.0 KiB
Python
48 lines
2.0 KiB
Python
"""ad_reward_record.boost_round_id(金币膨胀「本轮累计」标签)
|
|
|
|
看完一条激励视频后客户端要弹「本轮累计获得 N 金币」,N 必须等于这一轮实际到账之和(否则用户
|
|
会认为少发了钱)。单条到账额 reward-result 已经能给,但「一轮」的边界只有客户端知道(点「放弃
|
|
赚钱」才算结束),客户端自己累加又会在进程被杀后丢失。
|
|
|
|
解法:客户端把轮次 id 随 mediaExtra 透传,穿山甲 S2S 原样带回,发奖时打在记录上;
|
|
reward-result 按 (user_id, boost_round_id) 对 granted 记录求和返回 round_coin。
|
|
|
|
本列是**纯标签**:不参与发奖判定,发多少/发不发完全不受影响。客户端就算一直复用同一个 id,
|
|
也只是把展示数字滚大,不产生任何新入账(求和的是已发生的发奖记录),无资损风险。
|
|
|
|
Revision ID: ad_reward_boost_round_id
|
|
Revises: comparison_llm_cost
|
|
Create Date: 2026-07-20
|
|
"""
|
|
from collections.abc import Sequence
|
|
|
|
import sqlalchemy as sa
|
|
|
|
from alembic import op
|
|
|
|
revision: str = "ad_reward_boost_round_id"
|
|
down_revision: str | Sequence[str] | None = "comparison_llm_cost"
|
|
branch_labels: str | Sequence[str] | None = None
|
|
depends_on: str | Sequence[str] | None = None
|
|
|
|
|
|
def upgrade() -> None:
|
|
# 可空、无默认:SQLite 原生支持 ADD COLUMN,不需要 batch_alter_table(同 comparison_llm_cost)。
|
|
# 存量行留 NULL = 「不属于任何一轮」,求和时天然不参与,老客户端行为不变。
|
|
op.add_column(
|
|
"ad_reward_record",
|
|
sa.Column("boost_round_id", sa.String(length=64), nullable=True),
|
|
)
|
|
# 求和恒带 user_id(轮 id 是客户端生成的,不能跨用户信任),故建复合索引而非单列
|
|
op.create_index(
|
|
"ix_ad_reward_user_boost_round",
|
|
"ad_reward_record",
|
|
["user_id", "boost_round_id"],
|
|
unique=False,
|
|
)
|
|
|
|
|
|
def downgrade() -> None:
|
|
op.drop_index("ix_ad_reward_user_boost_round", table_name="ad_reward_record")
|
|
op.drop_column("ad_reward_record", "boost_round_id")
|