47d74273c9
新增 coupon_daily_completion 表:按 (device_id, 自然日) 记"今天是否已跑完 整轮领券(到 done 帧)"。客户端据此把首页「去领取」卡置灰、不可点。 口径(用户决策 A 方案):到 done 即算,不管单券成败 —— 失败/跳过常是无障碍/ 环境问题,重复点也补不回来。判断维度 device_id,与 engagement/claim 一致。 - model CouponDailyCompletion(uq device+complete_date,仿 CouponPromptEngagement) - repo has_completed_today / mark_completed_today(幂等 upsert + IntegrityError 兜底) - schema CouponCompletedTodayOut(completed: bool) - coupon_step 透传链路在 action.command=="done" 那帧 best-effort 写完成记录 (pricebot 只在整轮全跑完才保留 command=="done",故无需再判 continue) - GET /api/v1/coupon/completed-today?device_id= 供首页查询 - alembic 迁移 coupon_daily_completion(down_revision=0cf18d590b1d 当前 head) 合并后需 alembic upgrade head,否则 /completed-today 500。 Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
32 lines
1.5 KiB
Python
32 lines
1.5 KiB
Python
"""所有 ORM model 必须在这里 import 一次,Alembic / metadata 才能扫到。"""
|
|
from app.models.ad_ecpm import AdEcpmRecord # noqa: F401
|
|
from app.models.ad_feed_reward import AdFeedRewardRecord # noqa: F401
|
|
from app.models.ad_reward import AdRewardRecord # noqa: F401
|
|
from app.models.ad_watch_log import AdWatchLog # noqa: F401
|
|
from app.models.admin import AdminAuditLog, AdminUser # noqa: F401
|
|
from app.models.app_config import AppConfig # noqa: F401
|
|
from app.models.comparison import ComparisonRecord # noqa: F401
|
|
from app.models.comparison_milestone import ComparisonMilestoneClaim # noqa: F401
|
|
from app.models.coupon_state import ( # noqa: F401
|
|
CouponClaimRecord,
|
|
CouponDailyCompletion,
|
|
CouponPromptEngagement,
|
|
)
|
|
from app.models.feedback import Feedback # noqa: F401
|
|
from app.models.invite import InviteRelation # noqa: F401
|
|
from app.models.meituan_coupon import MeituanCoupon # noqa: F401
|
|
from app.models.ops_marquee_seed import OpsMarqueeSeed # noqa: F401
|
|
from app.models.ops_stat_config import OpsStatConfig # noqa: F401
|
|
from app.models.price_observation import PriceObservation # noqa: F401
|
|
from app.models.price_report import PriceReport # noqa: F401
|
|
from app.models.savings import SavingsRecord # noqa: F401
|
|
from app.models.signin import SigninBoostRecord, SigninRecord # noqa: F401
|
|
from app.models.task import UserTask # noqa: F401
|
|
from app.models.user import User # noqa: F401
|
|
from app.models.wallet import ( # noqa: F401
|
|
CashTransaction,
|
|
CoinAccount,
|
|
CoinTransaction,
|
|
WithdrawOrder,
|
|
)
|