Block a user
[M-MEMBER-01] 将 AI、Chat、OCR、Vision、存储和知识库接入统一额度
[M-MEMBER-01] 实现 EffectiveQuota、额度预占返还与 Legacy/Shadow/Enforced
[M-MEMBER-01] 实现 App Store Server Notifications V2 Durable Inbox 与生命周期投影
[M-MEMBER-01] 实现 App Store JWS 交易验证与幂等会员发放
[M-MEMBER-01] 实现 EffectiveMembership 与普通用户会员只读 API
[M-MEMBER-01] 新增不可变 App Store 交易、通知 Inbox 与 Payload 审计模型
[M-MEMBER-01] Expand 账号令牌、商品映射、会员 Grant 与 PlanQuota Schema
[M-MEMBER-01] 冻结 App Store 商品、Premium 权益数值与额度窗口
[M-QUIZ-01-GATE] Quiz 跨端答题闭环最终验收
GATE E2E 测试文件已创建
文件
test/m-quiz-01-gate.e2e-spec.ts — 17 场景 / 18 tests
场景覆盖
[M-QUIZ-01] 接入 Quiz 题型维度学习分析
开发完成评论
完成内容
aggregateByQuestionType 新增
- 从
QuizAnswer(已完成 Attempt)+QuizQuestion.type聚合题型维度正确率 - 数据源:服务端写入…
[M-QUIZ-01] 冻结 choice、fill、judge 跨端契约并完善 fill 题型
1. 创建共享契约模块
开发完成评论
完成内容
1. 创建共享契约模块 quiz-type.contract.ts
- TypeScript
QuestionTypeunion 类型(`"choice"
[M-QUIZ-01] iOS 题目加载与 Attempt 生命周期对接
N1 修复:choice 题型答案显示索引 → 选项文本
问题
choice 题型的 userAnswer 和 answer 存储的是索引字符串(如 "0"),结果页直接显示索引数字…
[M-QUIZ-01] iOS 题目加载与 Attempt 生命周期对接
开发完成评论
完成内容
QuizService — 新 Attempt API
createAttempt(quizId:)→POST /quizzes/:id/attemptsgetAttemptQuestions(attemptId:)→ `GET /quizzes/attem…
[M-QUIZ-01] 提交原子性与幂等控制
N1 修复:updateMany 写锁替代 findUnique 快照读
问题
MySQL REPEATABLE READ 下,findUnique 读取的是事务开始时的快照。两个并发事务可能同时读到…
[M-QUIZ-01] 提交原子性与幂等控制
开发完成评论
完成内容
原子提交($transaction)
submit()整体包裹在prisma.$transaction中- CAS:事务内重新读取 Attempt,
finishedAt作为乐观…
[M-QUIZ-01] Attempt 生命周期与答案可见性控制
N2/N3 修复:统一跨用户信息泄漏模式
修改
- N2
getAttemptQuestions:userId进入 Prisma 查询条件,删除独立ForbiddenException,跨用户统一 404 -…