feat(redpacket): 红包与游戏横幅全量实现 (#19~#24)

- #19 fix: SendRedEnvelopeUseCase 动态取 currencyType(workspaceId>0 取
  workspace.currency,修复 iOS 硬编码 PEA → 150001 错误)
- #20: RedEnvelopeBubble typ=8,四态(橙色领取/已领/过期/抢完)+ 领取按钮
- #21: ReceiveRedEnvelopeUseCase POST /app/api/wallet/rp/receive,
  typed JSON body(避免 code=30007),SnackBar 反馈
- #22: SendRedEnvelopeSheet BottomSheet,STANDARD_RP + LUCKY_RP,
  发送成功后构建 typ=8 content JSON 回调给 ChatPage
- #23: BannerViewModel Notifier,Group.topic 双格式解析(JSON object/string),
  FetchBannerUseCase + Timer 倒计时 + applyNewRound WS 接口
- #24: BannerView 游戏横幅条(状态/倒计时/上期结果),
  MiniAppFloatButton 悬浮按钮(hasGame 显示/隐藏,onTap TODO #25)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
pp-bot
2026-03-23 23:11:29 +09:00
parent 83774f5f61
commit d9539d391c
12 changed files with 1616 additions and 0 deletions

View File

@@ -32,6 +32,17 @@ class ApiPaths {
static const accountStoreGet = '/app/api/account/store/get-store';
static const accountStoreUpdate = '/app/api/account/store/update-store';
// ── Red Envelope ──
static const rpSend = '/payment/rp/send';
static const rpReceive = '/app/api/wallet/rp/receive';
static const rpConfigGet = '/payment/rp-config/get';
// ── Game Banner ──
static const bannerGet = '/lucky/banner/get';
// ── Workspace ──
static const workspaceGet = '/workspace/workspace/get';
// ── Upload ──
static const uploadFile = '/app/api/upload/file';