zerosaturation
|
a9ce281d5e
|
feat(asset): emit task:event on mint success (fix daily_mint 悬空)
assetService 接入 MQ producer:铸造成功时 emit `task:event { event_type: daily_mint }`,
由 taskService consumer 异步调 ProcessTaskEvent 完成判定。
- main.go: 初始化 MQ (Asynq producer-only),沿用 galleryService 模式;
失败仅 Warn 不阻塞主路径
- service/mint_service.go: CreateMintOrder 成功分支 fire-and-forget emit
- mq/producer.go: 新增 EnqueueTaskEvent helper,封装 TaskEventPayload marshal +
adapter.TaskProducer.Enqueue
配套:spec §4 / Phase F.1 / impl plan Phase D。
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
2026-07-27 15:45:42 +08:00 |
|
zerosaturation
|
8a767fb400
|
fix(backend): service stability — batch 3 accumulated (bcrypt off-txn / login anti-enum / MQ stub / aiChat / event reliability / gateway aggregate)
- 3.1 bcrypt 移出事务 (Register): repository.HashPassword 前移到 db.Transaction 之前。
- 3.2 Login 消除用户枚举 + 限流 + timing 抹平: pkg/errors 加 ErrInvalidCredential / ErrTooManyLoginAttempts;
user-not-found 跑 dummy bcrypt 抹平 ~100ms 时序差; mobile 5次/ip 20次 per 15min 限流 (Redis, fail-open 降级)。
- 3.3 MQ streams adapter 停用 → stub: 0 业务调用方, noop EventProducer.Publish; Init 不再装配 streams;
11 处硬编码 'gallery'/'default' 抽常量到 pkg/queue/consts (值不变, 消漂移)。
- 3.5 JWT 密钥治理: pkg/jwt MustInit fail-fast + atomic.Value, 50-goroutine race_test 零告警;
MustInit 调用点 gateway main + auth_provider + loadgen 同步更新。
- 3.6 aiChat 健壮性: SaveContext 用 persona.ID(非 req.PersonaId); Redis/memory 错误 记 WARN 不静默;
Dify err 映射稳定用户文案。
- 3.7 statistic.Client 重构: TrackEvent 改 buffered channel (cap 1024) + dispatchLoop worker。
- 3.8 网关聚合: StarCache (60s TTL, singleflight) 替换 GetFanIdentities 链式调用;
DeleteAccount 改网关直调 userService.DeleteAccount(避免改 hand-written triple.go);
铸造双写改异步 channel+consumer (3 retry)。
- 大量单测: 各子项 TDD (RED→GREEN), 关键并发 race_test (50 goroutine)。
- .env.example JWT_SECRET 改为 ≥32 字节 base64 示例(原为空, 被 MustInit 立即拒)。
Co-Authored-By: Claude <noreply@anthropic.com>
|
2026-07-24 14:03:21 +08:00 |
|
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
|
d12a84c1f0
|
feat:增加队列修改收益方面把轮询改为MQ队列,修改数据看板的数据问题出错
|
2026-07-03 12:34:55 +08:00 |
|
|
|
c02e53fc0e
|
feat:修改h5地址
|
2026-06-26 18:10:51 +08:00 |
|
zerosaturation
|
2032246fd0
|
feat:增加分享界面,完善的保存图片功能
|
2026-06-26 16:45:29 +08:00 |
|
zerosaturation
|
dfb79af4b1
|
feat: 铸造菜单改为动态配置
|
2026-06-09 12:38:12 +08:00 |
|
liulong
|
b9527bee70
|
feat:合并新
|
2026-06-03 22:41:19 +08:00 |
|
liulong
|
10168f8e6b
|
feat:实现AI生成镭射卡功能
|
2026-06-03 22:19:22 +08:00 |
|
zerosaturation
|
d5a645eaea
|
feat: 给榜单增加字段
|
2026-05-29 19:47:09 +08:00 |
|
zerosaturation
|
8dce6ae11a
|
fix: add new models to autoMigrate and start season reset worker
|
2026-05-25 19:03:32 +08:00 |
|
zerosaturation
|
2a0db41dbf
|
fix: wire AssetLevelService into existing service constructors
|
2026-05-25 19:03:32 +08:00 |
|
zerosaturation
|
afb235afd3
|
feat: 合并代码,解决冲突
|
2026-05-16 02:42:32 +08:00 |
|
zerosaturation
|
74182ad662
|
feat: 新增经济系统
|
2026-05-14 15:59:07 +08:00 |
|
zerosaturation
|
e5a09194ad
|
feat: 展览选择藏品进行分类功能
|
2026-04-20 19:31:42 +08:00 |
|
zerosaturation
|
bcaa743446
|
feat: 新增星册类型选择
|
2026-04-20 16:00:10 +08:00 |
|
zerosaturation
|
a5e3008819
|
feat: 增加health健康检查和替换前端跳转路由api
|
2026-04-14 00:10:24 +08:00 |
|
zerosaturation
|
656c8fefac
|
feat: oss修改key
|
2026-04-08 13:43:11 +08:00 |
|
zerosaturation
|
06f4038a75
|
提交后端代码
|
2026-04-07 22:29:48 +08:00 |
|