bindbox-game/.trae/documents/批量积分_优惠券_奖励:安全与闭环改造实施计划.md
邹方成 87ad4177b1
Some checks failed
Build docker and publish / linux (1.24.5) (push) Failing after 39s
feat(工作台): 实现管理端工作台接口并优化数据展示
feat(抽奖动态): 修复抽奖动态未渲染问题并优化文案展示
fix(用户概览): 修复用户概览无数据显示问题
feat(新用户列表): 在新用户列表显示称号明细
refactor(待办事项): 移除代办模块并全宽展示实时动态
feat(批量操作): 限制为单用户操作并在批量时提醒
fix(称号分配): 防重复分配称号的改造计划
perf(接口性能): 优化新用户和抽奖动态接口性能
feat(订单漏斗): 优化订单转化漏斗指标计算
docs(测试计划): 完善盲盒运营API核查与闭环测试计划
2025-11-16 14:00:29 +08:00

64 lines
4.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

## 目标
- 为运营提供可控的批量操作能力:批量增加积分、批量发送优惠券、批量发放奖励。
- 满足权限、配额、上限、幂等与审计要求,闭环验证整个盲盒系统运营流程。
## 问题与现状
- 现有单用户接口:`POST /api/admin/users/:user_id/points/add``/coupons/add``/item_cards``/rewards/grant`;缺少批量维度与风控保护。
- 已加固优惠券发放需超管internal/api/admin/users_admin.go:596-616、发放配额与持有上限internal/service/user/coupon_add.go、道具卡数量与持有上限internal/service/user/item_card_add.go
- 仍缺:批量接口、幂等、审计与限流。
## API 设计
- 批量积分:`POST /api/admin/users/batch/points/add`
- Body`{ users: number[], amount: number, reason?: string, idempotency_key?: string }`
- 校验:超管;`amount > 0``users.length <= 5000`;可选日累计上限(防爆刷)。
- 行为:逐用户执行加分(重用现有服务层),支持幂等(按 `op_type+idempotency_key+users+amount` 去重)。
- 返回:`{ success: number, failed: number, details: Array<{user_id,status,msg}> }`
- 批量优惠券:`POST /api/admin/users/batch/coupons/add`
- Body`{ users: number[], coupon_id: number, quantity_per_user?: number, idempotency_key?: string }`
- 校验:超管;模板启用与有效期;配额与单用户持有上限(已在服务层);`quantity_per_user` 上限(<=5
- 行为:逐用户发券(重用 `AddCoupon`),事务分片(每批 100~200记录逐项状态幂等去重。
- 返回:同上。
- 批量奖励:`POST /api/admin/users/batch/rewards/grant`
- Body`{ users: number[], reward_id: number, quantity?: number, idempotency_key?: string }` 或按活动期:`POST /api/admin/activities/:activity_id/issues/:issue_id/rewards/batch_grant` `{ users: number[], reward_id: number, quantity?: number }`
- 校验:超管;奖励模板/库存;单用户持有上限(可与道具卡同策略);数量上限(<=10
- 行为:逐用户入库,事务分片,幂等去重。
- 返回:同上。
## 权限与风控
- 仅超管可调用批量接口;非超管拒绝。
- 限流:每分钟调用次数限制(可在拦截器或中间件层实现)。
- 上限请求用户数上限5000单用户数量上限模板配额检查用户持有上限已存在的加固沿用
- 幂等:支持 `idempotency_key`;服务层保存批次指纹,重复提交直接返回历史结果。
- 审计:记录批量操作日志(操作者、时间、对象数量、成功/失败明细摘要与请求指纹)。
## 后端改造点
- 路由:`internal/router/router.go`
- 新增:`POST /api/admin/users/batch/points/add``/batch/coupons/add``/batch/rewards/grant`
- 处理器:`internal/api/admin/users_admin.go`
- 新增批量处理 Handler结构体 Request/Response、超管校验、参数绑定、分片循环、调用服务层、汇总返回
- 服务层:`internal/service/user/*`
- 新增批量方法或在 Handler 中循环调用现有单个方法(推荐服务层添加批量封装,带事务与幂等指纹)。
- 中间件:可选全局限流与审计记录入口(日志/Audit DAO
## 前端(管理端)
- 称号运营页或用户管理页新增“批量操作”入口,支持:
- 用户选择(列表多选/CSV导入
- 操作类型(积分/优惠券/奖励)与参数(金额/模板/数量)
- 幂等键(可选自动生成)
- 执行后展示分项结果与失败原因下载。
## 测试与验收
- Postman 集合扩展三条批量接口;注入 admin 令牌后按顺序回归。
- 验收标准:
- 权限校验:非超管拒绝。
- 配额/上限:超量拒绝;成功/失败计数正确。
- 幂等:重复提交返回相同结果,不重复写入。
- 审计:生成批次日志记录(至少在系统日志中可查)。
## 交付
- 批量接口与处理器实现、服务层封装、路由挂载。
- 集合/脚本更新与验收报告(问题清单与修复项)。
确认后我将开始实现并提交对应代码与测试集合更新。