hailin
bcfa5143e3
fix(mining-app): C2C订单详情页自动刷新,列表刷新间隔缩短
...
- 订单详情 Provider 活跃状态(PENDING/MATCHED/PAID)每10秒自动刷新
过期/完成/取消后停止刷新,节省资源
- 市场订单和我的订单列表刷新间隔从1分钟缩短到30秒
- 离开订单详情页时立即刷新市场和我的订单列表
确保过期恢复的新PENDING订单及时在列表中显示
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-01 02:23:21 -08:00
hailin
33dda98e81
fix(c2c): 修复过期恢复的竞态条件,SELL订单保持冻结避免资金窗口
...
- SELL MATCHED/PAID 订单过期恢复时,不再先解冻再重新冻结
- 保持 maker 的冻结不变,直接转给新 PENDING 订单
- 消除了解冻→重新冻结之间的竞态窗口(余额可能被其他操作消耗)
- 恢复失败时补充解冻,防止 maker 资金被永久冻结
- BUY 订单恢复时不复制上一个 taker 的 sellerKavaAddress
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-01 02:11:47 -08:00
hailin
7f2479d995
fix(mining-app): 更新弹窗不可点击外部关闭,订单详情按买卖角色显示不同倒计时文案
...
- 更新提示弹窗 barrierDismissible 始终为 false,防止用户误触关闭
- 订单详情页根据买家/卖家角色显示不同的倒计时提示文案
- 买方:你需要在xx:xx内完成付款 / 等待卖方确认收款
- 卖方:对方将在xx:xx内完成付款 / 请在xx:xx内确认收款
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-01 01:58:53 -08:00
hailin
4e4a876341
fix(c2c): MATCHED/PAID订单过期后自动恢复为新PENDING订单
...
当部分成交的订单过期时,将过期数量恢复到市场:
- BUY单过期:直接为maker创建新PENDING BUY单
- SELL单过期:检查maker余额,重新冻结后创建新PENDING SELL单
- 恢复失败不影响过期流程(仅记录日志)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-01 01:37:00 -08:00
hailin
73a617b88c
fix(c2c): 单价和总金额单位改为绿积分,待付款提示改为对方
...
- C2C市场列表/接单弹窗中单价和总金额单位从"积分值"改为"绿积分"
- 订单详情待付款倒计时提示改为"对方将在xx:xx内完成付款"
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-01 00:57:30 -08:00
hailin
64d998c7b3
fix(trading): 卖出金额超过可用积分股时提示并禁用确认按钮
...
- 新增 _getSellValidationError 校验方法
- 输入金额反算的积分股数量 > 可用余额时显示红色提示
- 校验失败时禁用"确认交易"按钮(灰色)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-31 22:29:33 -08:00
hailin
b8f8831516
feat: PENDING订单自动过期、接单显示余额、积分股金额输入
...
1. C2C PENDING订单24小时自动过期并解冻冻结资产
- 新增 DEFAULT_PENDING_TIMEOUT_HOURS 常量
- findExpiredOrders 支持 PENDING 状态查询
- expireOrder 处理 PENDING 卖单解冻
2. C2C接单对话框显示卖方可用余额
- 确认出售时显示用户账户可用积分值(非订单数量)
- 新增订单数量行,方便对比
3. 积分股兑换页面新增金额输入
- 卖出时显示金额输入框(积分值),与数量双向联动
- 输入数量自动计算金额,输入金额自动反算数量
- 全部按钮同步更新两个字段
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-31 22:15:47 -08:00
hailin
83c29f8540
fix(c2c): 订单详情单价和总金额标签改为绿积分
...
- 单价: "积分值" → "绿积分/积分值"
- 总金额: "积分值" → "绿积分"(买方实际支付的绿积分数量)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-31 21:46:26 -08:00
hailin
6ec829a804
fix(c2c): 隐藏订单详情页的买入/卖出标签
...
订单信息卡片中移除"买入"/"卖出"类型标签,
仅保留"我发布的"标记(当用户是maker时显示)。
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-31 21:43:50 -08:00
hailin
6ccc192bc6
fix(c2c): 用户无交易账户时自动创建零余额账户
...
createOrder 和 takeOrder 中,如果用户没有交易账户,
自动创建零余额账户而非报错"交易账户不存在"。
买单不需要余额,不应因缺少账户而无法下单。
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-31 21:29:42 -08:00
hailin
a1c3657390
fix(c2c): 修复付款水单图片无法显示的问题
...
1. 后端: proofs 图片端点添加 @Public() 装饰器,
Image.network 无法携带 JWT token
2. 前端: paymentProofUrl 是相对路径,拼接 baseUrl
构建完整 URL 供 Image.network 加载
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-31 21:16:53 -08:00
hailin
f9835c388e
fix(c2c): 我的订单显示用户角色视角,修复详情页缓存
...
1. "我的"列表根据用户是maker/taker判断实际角色,
接买单(taker)时显示"卖出"而非"买入"
2. 订单详情 provider 改为 autoDispose,每次进入详情页
都从API获取最新数据,避免显示旧的数量和状态
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-31 21:02:04 -08:00
hailin
f1c99949ad
fix(c2c): 发布页绿积分输入框和预估卡片单位标签修正
...
- 第二个输入框后缀 "积分值" → "绿积分"
- 预估卡片第二行标签 "积分值数量" → "绿积分数量",单位 → "绿积分"
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-31 20:50:32 -08:00
hailin
5b1f4c82e6
fix(deploy): full-reset 时重建 1.0 source CDC connectors 以确保完整数据同步
...
问题:
执行 deploy-mining.sh full-reset 后,identity-postgres-connector 等 1.0 source
CDC connectors 保留了旧的 Debezium offset 和 replication slot,导致 Debezium
认为 initial snapshot 已完成而跳过重新快照。如果 connector 的 JSON 配置文件中
新增了表(如 identity-connector.json 中的 wallet_addresses),这些表的存量数据
永远不会被捕获到 Kafka topic,2.0 服务无法通过 CDC 同步到这些数据。
具体表现:Kafka topic cdc.identity.public.wallet_addresses 始终为空(0条消息),
2.0 auth-service 的 synced_wallet_addresses 表为空,用户 KAVA 地址未同步。
修复:
在 full_reset() 的 Step 4 中,除了处理 outbox connectors,还新增了对 1.0 source
CDC connectors (identity/referral/planting) 的处理:
1. 删除 connector(释放 replication slot)
2. 发送 tombstone 清除 debezium_offsets topic 中的偏移量
3. 调用 pg_drop_replication_slot() 删除 PostgreSQL replication slot
新增 Step 9:从 scripts/debezium/*.json 配置文件重新注册 source connectors,
因为 offset 和 slot 都已清除,snapshot.mode=initial 会触发全新的 initial snapshot,
确保所有配置表(包括新增的 wallet_addresses)的存量数据都被灌入 Kafka topic。
总步骤数从 18 调整为 19。
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-31 20:26:06 -08:00
hailin
6bcc571453
revert(c2c): 还原C2C市场页资产概览为原始状态
...
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-31 09:25:03 -08:00
hailin
0ad1136e48
fix(c2c): 修正资产概览显示,C2C只涉及积分值不涉及积分股
...
左栏改回"可用积分值",右栏改为"冻结积分值",消除重复显示。
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-31 09:23:59 -08:00
hailin
f60e3751b8
fix(c2c): 修复水单上传权限、手机号、卖方ID、资产显示
...
- Dockerfile: 用 su-exec 模式解决 Docker volume 权限问题
- JWT guard: 从 token 提取 phone 字段
- 订单详情: 新增卖方ID显示
- C2C市场页: 修复资产概览两列重复显示 availableCash,
改为左列显示可用积分股、右列显示可用积分值
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-31 09:19:38 -08:00
hailin
e783661002
fix(c2c): 修复水单上传权限、手机号显示、卖方ID显示
...
- Dockerfile 预创建 /app/uploads/c2c-proofs 并设置正确权限
- JWT guard 从 token payload 提取 phone 字段(之前仅提取 accountSequence)
- 订单详情页订单信息组新增卖方ID显示
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-31 09:13:46 -08:00
hailin
25ea0bf64e
fix(trading-service): 修复 Multer 类型缺失导致构建失败
...
使用内联类型替代 Express.Multer.File,避免 @types/multer 依赖
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-31 08:58:55 -08:00
hailin
ce173451f5
feat(c2c): 订单详情增强、付款水单上传、买单逻辑修复及schema对齐
...
- 订单详情页显示完整手机号和收款账号信息
- 新增付款水单上传功能(前后端全链路)
- 修复时间显示为本地时区格式
- 移除买单发布时的积分值余额验证(买方通过外部绿积分支付)
- 前端买单发布页隐藏余额卡片和"全部"按钮
- 补齐 Prisma migration 与 schema 差异(payment_proof_url、
bot_purchased索引、market_maker_deposits/withdraws表)
- docker-compose 新增 trading-uploads 卷用于水单持久化
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-31 08:54:05 -08:00
hailin
4df23b02b8
fix(trading-service): 添加做市商钱包环境变量,修复地址未配置问题
...
FUSDT/EUSDT_MARKET_MAKER_ADDRESS 和 USERNAME 只传给了
mining-blockchain-service,但 trading-service 初始化时也需要
读取这些变量写入数据库,导致前端显示"做市商钱包地址未配置"。
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-31 07:56:16 -08:00
hailin
c5126187d2
feat(mining-app): 二维码扫描支持从相册选择图片识别
...
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-31 07:21:56 -08:00
hailin
286b82c63b
fix(c2c): 修复 RangeError 崩溃及订单详情灰色页面问题
...
根因:多处 [0] 访问空列表/空字符串导致 RangeError 崩溃
- api_client.dart: 后端错误 message 为空数组时 ?[0] 崩溃,改为安全检查
- c2c_order_detail_page.dart: nickname 和 phone 均为 null 时 name[0] 崩溃,
添加 isNotEmpty 检查和 '未知用户' 回退
- c2c_market_page.dart: makerNickname 为空字符串时 [0] 崩溃,添加 isNotEmpty 检查
这是 C2C 买方"待付款灰色页面"的根本原因:页面在渲染交易双方信息时
因空用户名 RangeError 崩溃,导致整个页面无法显示
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-31 07:10:05 -08:00
hailin
8e63547a3e
fix(transfer): 修复积分股划转到分配账户失败问题
...
后端:
- transfer.service.ts: Error → BadRequestException,业务错误返回HTTP 400而非500
- transfer.controller.ts: Error → UnauthorizedException,正确返回HTTP 401
- 错误信息改为中文:余额不足、账户不存在等提示更明确
前端:
- asset_display.dart: 新增 tradingAvailableShares 计算属性(总可用 - 挖矿可用)
- trading_page.dart: 划转弹窗显示可用余额(扣除冻结)而非总余额
- trading_page.dart: 划转失败时显示后端具体错误信息而非通用提示
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-31 06:24:35 -08:00
hailin
3cbb874503
fix(auth-service): 返回完整手机号,修复QR码扫码失败
...
- login/profile 接口返回 user.phone.value 替代 user.phone.masked
- 根因:QR码编码脱敏号 199****9327,正则要求纯数字匹配失败
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-31 06:00:47 -08:00
hailin
0ffa875a85
fix(mining-app): 移除 debug applicationIdSuffix 修复升级后双图标
...
debug buildType 设置了 applicationIdSuffix = ".debug",导致
debug 包名为 com.rwadurian.mining_app.debug,release 包名为
com.rwadurian.mining_app。Android 将它们视为两个不同应用,
升级安装 release 包时不覆盖 debug 包,出现两个相同图标。
移除 applicationIdSuffix 后 debug/release 使用同一包名,
升级安装时会正确覆盖旧版本。versionNameSuffix 保留用于区分版本号。
注:用户手机上需手动卸载旧的 debug 包才能清除已存在的重复图标。
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-31 05:57:34 -08:00
hailin
03cc5bc324
fix(mining-app): QR码解析加固 + debugPrint排查
...
- 清除不可见字符(BOM/零宽空格)
- 三级宽松解析:正则→Uri.parse→兜底phone=提取
- 添加 [QR_SCAN] 调试日志定位实际扫码值
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-31 05:54:34 -08:00
hailin
8c31dee000
fix(c2c): 修复买方待付款页面灰色无法操作问题
...
根因: c2c_order_model.dart 的 _parsePaymentMethod 不识别 GREEN_POINTS,
导致 paymentMethod=null → hasPaymentInfo=false → 收款信息卡片隐藏 → 页面不可操作
前端修复:
- C2cPaymentMethod 枚举增加 greenPoints,解析器支持 GREEN_POINTS
- 支持逗号分隔的多支付方式字符串(取第一个作为主要方式)
- 订单详情页增加绿积分图标和卖方 Kava 地址显示(买方可复制)
后端修复:
- takeOrder() 接买单时自动获取卖方 Kava 地址写入 sellerKavaAddress
- 买方在订单详情页可看到卖方 Kava 地址用于转绿积分
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-31 05:41:14 -08:00
hailin
f167f1227c
Revert "fix(trading-service): C2C卖单不再强制要求Kava钱包地址"
...
This reverts commit 9b8f720915 .
2026-01-30 21:04:27 -08:00
hailin
9b8f720915
fix(trading-service): C2C卖单不再强制要求Kava钱包地址
...
executeTransfer不使用sellerKavaAddress,C2C交易是积分值划转+外部绿积分支付,
不涉及Kava链上操作。改为可选获取,失败不阻断订单创建。
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-30 21:03:59 -08:00
hailin
9e83127113
fix(mining-app): C2C"我的"列表待接单订单增加取消按钮
...
在我的订单卡片上直接显示取消按钮(PENDING状态),
弹出确认对话框后调用 cancelOrder API
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-30 20:46:50 -08:00
hailin
7c416adecd
feat(mining-app): P2P转出记录显示手续费及合计扣除
...
- P2pTransferModel 新增 fee 字段解析
- 转出卡片聚合显示:转账金额 + 手续费 + 合计扣除
- 转入卡片保持只显示转账金额
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-30 20:45:37 -08:00
hailin
7180e2ac27
fix(contribution): 算力记录按层级升序排列 L1→L2→...→L15
...
用户期望 L1 在前 L15 在后,将 levelDepth/bonusTier 排序从 DESC 改为 ASC
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-30 20:14:31 -08:00
hailin
7d548dac4e
fix(mining-app): C2C接单验证收款信息 + 数字显示优化
...
- 接BUY单时验证收款账号和姓名必填,仅绿积分时自动使用账户ID
- 所有C2C价格/数量/金额显示改用formatCompact,去掉多余小数位
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-30 14:31:08 -08:00
hailin
17f8a61bcf
feat(contribution-service): 贡献值明细按 L/T 降序排序
...
- 同伴下贡献值 (TEAM_LEVEL): 按 levelDepth DESC 排序 (L3, L2, L1)
- 同伴上贡献值 (TEAM_BONUS): 按 bonusTier DESC 排序 (T3, T2, T1)
- 全部/本人: 按 levelDepth DESC, bonusTier DESC, createdAt DESC
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-30 14:20:03 -08:00
hailin
a31fcaa9b8
fix(mining-admin): configValue → value,修复配置读取后 fallback 到默认值
...
Prisma 返回的字段是 value,controller 写成了 configValue,
导致 getP2pTransferFee / getTransferEnabled 永远返回默认值
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-30 14:18:13 -08:00
hailin
b50091eb1e
fix(mining-app): C2C 发布页"积分值金额"改为"绿积分数量"
...
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-30 14:09:17 -08:00
hailin
a0750fbd42
fix(mining-app): C2C 发布页单价单位改为"绿积分/积分值"
...
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-30 14:07:31 -08:00
hailin
d91550f704
fix(mining-app): FileProvider 使用 root-path 覆盖 Flutter app_flutter 目录
...
files-path 映射到 getFilesDir() 即 /data/data/<pkg>/files/,
但 Flutter getApplicationDocumentsDirectory() 返回 /data/data/<pkg>/app_flutter/,
两者是同级目录而非父子关系,files-path 无法覆盖。
使用 root-path 映射设备根路径 /,确保所有内部路径都能被 FileProvider 解析。
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-30 13:58:23 -08:00
hailin
45d038bd4b
fix(mining-app): FileProvider 添加 app_flutter 路径,修复 APK 安装 IllegalArgumentException
...
下载的 APK 保存在 getApplicationDocumentsDirectory() 即 /data/data/<pkg>/app_flutter/updates/,
但 file_paths.xml 只配置了 files-path(对应 /data/data/<pkg>/files/),
导致 FileProvider.getUriForFile() 找不到匹配的根路径。
添加 <files-path name="app_flutter" path="app_flutter/" /> 与 mobile-app 保持一致。
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-30 13:44:00 -08:00
hailin
a27ed0fa16
fix(mining-app): APK 安装后调用 finishAffinity() 退出旧应用,与 mobile-app 保持一致
...
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-30 13:30:42 -08:00
hailin
3507805005
fix(mining-admin): Docker uploads 目录权限修复,预创建 /app/uploads 并设置 nestjs 用户所有权
...
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-30 13:19:14 -08:00
hailin
6900905475
fix(mining-admin): APK下载URL指向localhost导致手机无法下载
...
问题:FileStorageService 默认 UPLOAD_BASE_URL 为 http://localhost:3020/downloads ,
手机端无法访问服务器的 localhost。
修复:
- docker-compose.2.0.yml: 添加 UPLOAD_BASE_URL=https://rwaapi.szaiai.com/mining-admin/downloads
- 添加 mining-admin-uploads volume 持久化上传的 APK 文件
- 修正默认端口 3020→3023(mining-admin-service 实际端口)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-30 12:56:40 -08:00
hailin
94d4524ee3
fix(c2c): 积分股→积分值,C2C交易对象修正为积分值(cash)
...
C2C交易的产品是积分值,支付方式是绿积分(外部1.0系统),与积分股无关。
前端:
- c2c_publish_page: 余额卡、数量输入、提示文案、确认弹窗全部改为积分值
- c2c_market_page: 余额概览(availableShares→availableCash)、订单数量标签、接单弹窗
- c2c_order_detail_page: 订单详情、划转提示、确认收款弹窗
后端 c2c.service.ts:
- createOrder SELL: freezeShares→freezeCash
- takeOrder BUY(taker=卖方): freezeShares→freezeCash
- takeOrder SELL(taker=买方): 移除冻结(买方通过外部支付绿积分)
- cancelOrder SELL: unfreezeShares→unfreezeCash
- expireOrder: unfreezeShares→unfreezeCash,SELL不再解冻taker
- executeTransfer: 统一BUY/SELL为单向积分值划转,assetType改为CASH
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-30 12:41:23 -08:00
hailin
49bcb96c4c
fix(trading): 补充 p2p_transfers 表遗漏的 fee 列
...
schema 中定义了 fee 字段但 0002 migration 遗漏,导致
prisma.p2pTransfer.create() 报错 "column fee does not exist"
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-30 12:24:50 -08:00
hailin
cfa0e2ca40
fix(mining-app): 更新弹窗点击"立即更新"无反应 — 进度流订阅竞态修复
...
问题根因:
SelfHostedUpdater._listenToProgress() 在 initState 和 _startDownload 中
订阅 UpdateService.downloadProgressStream,但该 getter 返回
_downloadManager?.progressStream —— _downloadManager 在 downloadUpdate()
调用前为 null,?.listen 无操作。downloadUpdate() 创建新 _downloadManager
后,其 progressStream 无人监听,进度事件全部丢失,UI 无任何反馈。
修复:
1. UpdateService 新增持久化广播流 _downloadProgressController,
downloadUpdate() 创建新 DownloadManager 后将其进度转发到此流
2. downloadProgressStream getter 改为返回持久化流(非 nullable)
3. SelfHostedUpdater 在 initState 中一次性订阅持久化流,
dispose 时取消订阅,_startDownload 不再重复订阅
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-30 12:24:47 -08:00
hailin
bde7f0c53b
fix(mining-app): 自动更新检查未触发 — 修复双重节流 + 添加调试日志
...
问题原因:
1. checkForUpdate() 未传 force:true,被 UpdateService 内部的60分钟
SharedPreferences 间隔二次节流,导致实际请求被跳过
2. 缺少日志输出,无法诊断检查流程是否执行
修复:
- checkForUpdate(force: true) 跳过内部60分钟限制,
因为 MainShell 已有自己的90-300秒随机冷却节流
- 在 initState / dispose / didChangeAppLifecycleState /
_checkForUpdateIfNeeded 各关键节点添加 debugPrint 日志,
方便 flutter run 控制台追踪完整检查流程
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-30 12:20:56 -08:00
hailin
53a2e64cad
feat(mining-app): 启动和切回前台自动检测升级
...
MainShell 从 StatelessWidget 转为 StatefulWidget + WidgetsBindingObserver,
参考 mobile-app HomeShellPage 模式,实现:
- initState 首帧后自动检查更新
- didChangeAppLifecycleState(resumed) 从后台恢复时自动检查
- 90-300秒随机冷却间隔防止频繁请求(static 变量跨 rebuild 保持)
- 延迟3秒启动检查,避免干扰用户操作
- 有更新时弹出 SelfHostedUpdater 对话框(支持强制更新)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-30 12:07:40 -08:00
hailin
f0c7cee94e
fix(auth): lookupByPhone 支持查询未迁移的 1.0 用户
...
P2P 转账验证手机号时,lookupByPhone 只查 users 表(V2 注册用户),
导致未登录过 2.0 的 1.0 老用户(CDC 同步在 synced_legacy_users 表)
被报"不存在"。修改为先查 users 表,未找到再查 synced_legacy_users。
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-30 11:41:58 -08:00
hailin
187b82e9ac
feat(c2c): 修复6项C2C交易问题 (#11-#16)
...
- #11 : 价格固定1:1,最小交易数量为1
- #12 : BUY买单不再冻结买方积分值(绿积分通过外部1.0系统支付)
- #13 : 支持部分成交,taker可指定数量,剩余自动拆分为新PENDING订单
- #14 : 发布页双向输入,积分股数量与积分值金额1:1联动
- #15 : 接BUY单时弹出收款信息输入(收款方式、账号、姓名)
- #16 : BUY单创建时验证积分值余额但不冻结
后端: cancelOrder/expireOrder/executeTransfer 均按BUY/SELL分别处理
前端: 发布页价格只读、市场页接单对话框增加数量和收款输入
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-30 11:36:57 -08:00