Commit Graph

40 Commits

Author SHA1 Message Date
zerosaturation
3407e30395 refactor(assetService): CreateMintOrder 3-phase txn + orphan reconciliation (P0-2)
- CreateMintOrder 拆三段: txn1(PENDING→PROCESSING,不调RPC/不写asset)
  → 事务外 UpdateCrystalBalance 扣水晶 → txn2(建asset+registry→SUCCESS);
  消除 DB 事务内嵌跨服务 gRPC(连接池占用+跨服务事务风险)。
- 任一步失败 markMintOrderFailed 独立事务标 FAILED(不回滚已扣水晶=审计流水,
  重试靠 Task1 source_id 幂等 + Task2 入口短路防双扣); nil-cause 防御。
- 孤儿订单对账 ReconcileStuckMintOrders: 扫陈旧 PROCESSING 单,查 mint_cost 流水—
  已扣未建→FOR UPDATE 行锁下幂等补完 SUCCESS(串行化并发防双建),未扣→FAILED,绝不退款。
- main.go 接线周期 worker(MINT_RECONCILE_INTERVAL_SEC 默认600s,0关,优雅退出)。
- 测试: RPC失败落FAILED / 对账未扣→FAILED / 已扣未建→补完(含幂等二次跑)。

Co-Authored-By: Claude <noreply@anthropic.com>
2026-07-23 12:28:57 +08:00
zerosaturation
878bd46399 fix(backend): financial correctness — settlement/hours/mint idempotency (batch 1)
- settlement(1.1): exhibition_revenue_records 加 UNIQUE(exhibition_id,cycle_start_time)
  + CreateRevenueRecord ON CONFLICT DO NOTHING; MQ 用 settled_at 替代复用 is_processed;
  恢复扫描器过滤改 settled_at IS NULL; created_at 统一毫秒; 删死代码 cleanup_worker.go。
- hours(1.2): 新增 exhibition_hours_log/asset_exhibition_hours_log(source_id 唯一)幂等表;
  fan_profile/assetLevel 的 AddExhibitionHours 按 sourceID 幂等(事务包裹); 存量重算脚本。
- mint(1.4/1.5/1.6): crystal_transaction_records (source_id,change_type) 部分唯一索引
  + UpdateCrystalBalance/CreateMintOrder 幂等; 保底改 crypto/rand; 下线伪 tx_hash;
  doMint Redis Lua 原子限流。
- migrations 001/002/003; 各服务单测(自包含, 缺 DB t.Skip)。

Co-Authored-By: Claude <noreply@anthropic.com>
2026-07-23 01:11:54 +08:00
zerosaturation
d554d7be83 feat:修改周边验证 2026-07-17 16:53:57 +08:00
zerosaturation
d900c0d8b2 feat:增加验证真伪访问次数和首次验证 2026-07-13 14:24:42 +08:00
zerosaturation
74853800b6 feat:增加二维码验证真伪的功能 2026-07-13 11:22:56 +08:00
zerosaturation
d12a84c1f0 feat:增加队列修改收益方面把轮询改为MQ队列,修改数据看板的数据问题出错 2026-07-03 12:34:55 +08:00
946e204573 feat:修改canvas合成图 2026-06-26 17:58:37 +08:00
zerosaturation
2032246fd0 feat:增加分享界面,完善的保存图片功能 2026-06-26 16:45:29 +08:00
zerosaturation
7074546959 feat:新增通知系统 2026-06-16 21:30:58 +08:00
zerosaturation
271e0350c7 feat:重构code状态码 2026-06-15 16:28:35 +08:00
zerosaturation
dfb79af4b1 feat: 铸造菜单改为动态配置 2026-06-09 12:38:12 +08:00
zerosaturation
0029fb8cc8 feat(statistic): T9-T12 dashboard 7 RPCs - additional business-side service modifications
Modifications to 5 existing business services for TrackEvent integration:
- socialService/asset_like_service.go: TrackEvent(asset.like) after LikeAsset
- galleryService/exhibition_service.go: TrackEvent(exhibition.start) + (exhibition.end with duration)
- taskService/revenue_service.go: TrackEvent(exhibition.revenue) after OnExhibitionCompleted
- assetService/mint_service.go: TrackEvent(asset.mint) after CreateMintOrder
- assetService/asset_level_service.go: TrackEvent(asset.level_up) in logLevelChange
- userService/user_service.go: fireCrystalChangeEvent wrapper (call site TBD by service owner)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-08 17:20:53 +08:00
liulong
6ff8743c72 feat:修复合并问题 2026-06-03 23:25:08 +08:00
liulong
b9527bee70 feat:合并新 2026-06-03 22:41:19 +08:00
4aa11903f4 fix: 样式修复、创作者头像修复 2026-06-03 18:13:16 +08:00
zerosaturation
5e33bbb031 feat: 修改用户经验bug和收益记录bug 2026-05-31 20:38:58 +08:00
zerosaturation
d5a645eaea feat: 给榜单增加字段 2026-05-29 19:47:09 +08:00
liulong
889c9232fb feat:镭射新链路,旧链路清理,迁移脚本 2026-05-29 12:35:37 +08:00
zerosaturation
e545f41c3b feat:修改类型为复合类型 2026-05-25 19:03:36 +08:00
zerosaturation
0852f96436 feat:去掉重复的点赞约束 2026-05-25 19:03:35 +08:00
zerosaturation
7c5d5a7275 feat:修改藏品等级硬编码改为根据数据库的配置来定义 2026-05-25 19:03:32 +08:00
zerosaturation
edfa5f1449 test: add asset level service unit tests
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-25 19:03:32 +08:00
zerosaturation
bee30a1824 feat: integrate asset level system with existing services
- mintService: Add AssetLevelService field and call GetOrCreateRecord after asset creation
- assetLikeService: Add AssetLevelService and call AddLikes/RemoveLikes in LikeAsset/UnlikeAsset
- revenueService: Add AssetLevelService and call AddExhibitionHours in OnExhibitionCompleted

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-25 19:03:31 +08:00
zerosaturation
11a59b0632 feat: add asset level service with upgrade/downgrade logic
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-25 19:03:31 +08:00
zerosaturation
2855cd512d feat: 修改自动领取收益关闭,修复下架时间的bug,修改的光栅卡陀螺仪 2026-05-25 11:08:35 +08:00
zerosaturation
ce4fd85926 fea: 修改下架移除点赞记录删除 2026-05-22 18:49:34 +08:00
zerosaturation
ee0433464f feat: 修改铸造消耗确认框和新增批量购买道具的功能,修改回退按钮的颜色 2026-05-22 00:14:28 +08:00
zerosaturation
0d1631263e feat: 修改当前点赞逻辑 2026-05-20 13:21:00 +08:00
zerosaturation
02598db333 feat: 修改当前点赞逻辑 2026-05-20 12:36:58 +08:00
zerosaturation
9ac75d034b 修改每小时收益的字段类型可以为小数 2026-05-19 12:38:12 +08:00
zerosaturation
ca832abb2c feat: 新增每小时的收益字段 2026-05-19 12:17:57 +08:00
zerosaturation
2450fc1368 feat: 修改各种小bug 2026-05-17 23:33:45 +08:00
zerosaturation
45d3adc373 feat:添加光栅卡的选择 2026-05-17 19:03:34 +08:00
zerosaturation
cf8671b5bb 修改经验问题和光栅卡铸造bug修改 2026-05-16 04:32:43 +08:00
zerosaturation
afb235afd3 feat: 合并代码,解决冲突 2026-05-16 02:42:32 +08:00
zerosaturation
baf56d5ecf feat: 完善minimax调用图生图功能 2026-04-08 01:30:58 +08:00
zerosaturation
76a5eaaad9 fix: 修复解压炸弹漏洞和goroutine泄漏
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-08 01:30:57 +08:00
zerosaturation
f43b06e13d fix: 修复 minimax_service 安全隐患和数据竞争
- 添加 HTTP 响应状态码检查,防止状态错误被忽略
- 添加 HTTP Client 结构体复用,避免每次创建新客户端
- 在 compressImageIfNeeded 中使用带 Timeout 的 Client
- 添加 URL scheme 校验,防止 SSRF 攻击
- 使用 LimitedReader 限制下载图片大小(10MB)
- 修复 GetJob 数据竞争,复制数据后返回

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-08 01:30:57 +08:00
zerosaturation
d09f1122ce fix: minimax_service 修复编译错误
- 使用 resize.Lanczos3 替代不存在的 resize.Lanczos
- 使用 os.Getenv 替代缺失的 config 方法

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-08 01:30:57 +08:00
zerosaturation
ed2acc3268 feat: 添加 MiniMax 图生图服务和任务管理
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-08 01:30:57 +08:00