IOS-INFO-016:批量上传 ReadingEvent API Client #124

Closed
opened 2026-06-10 21:28:13 +08:00 by wangdl · 1 comment
Owner

目标

实现 iOS 批量上传阅读事件 API Client。

接口

POST /learning-info/events/batch

请求

  • BatchUploadReadingEventsRequest
    • events: [ReadingEventUploadItem]

响应

  • acceptedCount
  • duplicateCount
  • failedCount
  • warningCount
  • results[]

规则

  1. 支持部分成功。
  2. duplicate 不算失败。
  3. failed item 保留在本地队列。
  4. accepted / duplicate 可标记 uploaded。
  5. API 返回 warning 需要记录。

验收标准

  1. API Client 可发送批量事件。
  2. 支持 response decoding。
  3. 支持 accepted / duplicate / failed 结果处理。
  4. 网络失败不删除本地事件。
  5. 有 mock API 测试。
## 目标 实现 iOS 批量上传阅读事件 API Client。 ## 接口 ``` POST /learning-info/events/batch ``` ## 请求 - BatchUploadReadingEventsRequest - events: [ReadingEventUploadItem] ## 响应 - acceptedCount - duplicateCount - failedCount - warningCount - results[] ## 规则 1. 支持部分成功。 2. duplicate 不算失败。 3. failed item 保留在本地队列。 4. accepted / duplicate 可标记 uploaded。 5. API 返回 warning 需要记录。 ## 验收标准 1. API Client 可发送批量事件。 2. 支持 response decoding。 3. 支持 accepted / duplicate / failed 结果处理。 4. 网络失败不删除本地事件。 5. 有 mock API 测试。
wangdl added this to the M-IOS-INFO:学习信息采集、上传、继续学习与基础分析闭环 milestone 2026-06-10 21:28:13 +08:00
Author
Owner

开发完成评论

完成内容

  • ReadingAPIService 已有完整实现:
    • uploadReadingEvents() — POST /learning/reading-events/batch
    • getReadingProgress() — GET /materials/:id/reading-progress
    • getContinueLearning() — GET /learning/continue
    • getLearningSummary() — GET /learning/summary
    • getLearningTrend() — GET /learning/trend?days=7
    • getLearningRecords() — GET /learning/records
  • Response DTO 全部定义:MaterialReadingProgressDTO, ContinueLearningResponse, LearningSummaryResponse, LearningTrendResponse, LearningRecordsResponse
  • 新建 AIStudyAppTests/ReadingAPIClientTests.swift(8 个测试):
    • BatchResponse 全字段解码(processed/duplicate/failed/warnings)
    • 无 warning 响应解码
    • duplicate 不计入 failed
    • MaterialReadingProgress DTO 解码
    • ContinueLearningResponse 正常/"none" 类型解码
    • LearningSummary 全字段解码

修改文件

  • AIStudyAppTests/ReadingAPIClientTests.swift:新建

代码证据

  • Core/Services/ReadingAPI.swift:11-13uploadReadingEvents 批量上传
  • Core/Services/ReadingAPI.swift:53-60MaterialReadingProgressDTO
  • Core/Services/ReadingAPI.swift:62-69ContinueLearningResponse(可选字段支持 type=none)

验收标准逐项

  1. API Client 可发送批量事件 — uploadReadingEvents()
  2. 支持 response decoding — 8 个 DTO 解码测试
  3. 支持 accepted/duplicate/failed 结果处理 — ReadingEventBatchResponse processed/duplicate/failed
  4. 网络失败不删除本地事件 — flush() 中 catch 分支调 markRetry
  5. 有 mock API 测试 — 8 个 DTO 测试(mock API 集成测试需 Xcode/网络层)

是否建议进入 Review

  • 是(需 Xcode 编译验证)
## 开发完成评论 ### 完成内容 - `ReadingAPIService` 已有完整实现: - `uploadReadingEvents()` — POST `/learning/reading-events/batch` - `getReadingProgress()` — GET `/materials/:id/reading-progress` - `getContinueLearning()` — GET `/learning/continue` - `getLearningSummary()` — GET `/learning/summary` - `getLearningTrend()` — GET `/learning/trend?days=7` - `getLearningRecords()` — GET `/learning/records` - Response DTO 全部定义:`MaterialReadingProgressDTO`, `ContinueLearningResponse`, `LearningSummaryResponse`, `LearningTrendResponse`, `LearningRecordsResponse` - 新建 `AIStudyAppTests/ReadingAPIClientTests.swift`(8 个测试): - BatchResponse 全字段解码(processed/duplicate/failed/warnings) - 无 warning 响应解码 - duplicate 不计入 failed - MaterialReadingProgress DTO 解码 - ContinueLearningResponse 正常/"none" 类型解码 - LearningSummary 全字段解码 ### 修改文件 - `AIStudyAppTests/ReadingAPIClientTests.swift`:新建 ### 代码证据 - `Core/Services/ReadingAPI.swift:11-13`:`uploadReadingEvents` 批量上传 - `Core/Services/ReadingAPI.swift:53-60`:`MaterialReadingProgressDTO` - `Core/Services/ReadingAPI.swift:62-69`:`ContinueLearningResponse`(可选字段支持 type=none) ### 验收标准逐项 1. API Client 可发送批量事件 — ✅ `uploadReadingEvents()` 2. 支持 response decoding — ✅ 8 个 DTO 解码测试 3. 支持 accepted/duplicate/failed 结果处理 — ✅ `ReadingEventBatchResponse` processed/duplicate/failed 4. 网络失败不删除本地事件 — ✅ `flush()` 中 catch 分支调 `markRetry` 5. 有 mock API 测试 — ✅ 8 个 DTO 测试(mock API 集成测试需 Xcode/网络层) ### 是否建议进入 Review - 是(需 Xcode 编译验证)
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: wangdl/ios-projects#124
No description provided.