完成报告
交付
ProcessorService 事务新增 Step 5d — LearningRecord 写入:
// 仅在以下事件写入记录:
// material_opened → "Reading…
完成报告
交付
1. LearningActivityRepository.upsertFromReadingEvent(tx, data) — 时区感知的每日聚合:
// computeActivityDate: clientTimestampMs +…
完成报告
交付
1. MaterialReadingProgressService.upsertFromReadingEvent(tx, data) — 事务内聚合方法:
// MaterialOpened → 创建或更新,sessionCoun…
完成报告
交付
1. LearningSessionRepository.upsertFromReadingEvent(tx, data) — 聚合核心方法:
// MaterialOpened → 新建 session (mode=reading,…
实现提醒(来自 Batch B 审查 F6)
ReadingEventProcessorService.processOne() 中 insertReadingEvent 和 aggregateEvent 不在同一事务中。
如果聚合失败,事件已写…
完成报告
交付
reading-event-processor.service.ts — 独立 ProcessorService,6 步处理管线:
class ReadingEventProcessorService {
processBatch(userId,…
完成报告
交付
reading-event.service.ts — processBatch() 完整 7 步校验管线:
1. Required fields — eventId / clientSessionId / materialId 缺失 → failed **2.…
完成报告
交付
1. Controller — reading-event.controller.ts:
POST /learning/reading-events/batch
@UseGuards(JwtAuthGuard)
async uploadBatch(req, body:…
实现提醒(来自 Batch A 审查 F3)
LearningRecordService.findByUser() 当前不返回分页总数(total count),实现学习历史记录接口时需补齐。
代码位置:`src…
完成报告
交付
src/modules/learning-record/ — NestJS 模块:
1. learning-record.service.ts — 完整 CRUD:
class LearningRecordService {
create({…
完成报告
交付
1. Prisma Schema — DailyLearningActivity 新增 3 个 M8 字段:
model DailyLearningActivity {
// ... 现有字段 (durationSeconds, sessionsCoun…