M-CHAT-A1 P0 | listSessions 响应格式不匹配,iOS 解码 crash #55

Closed
opened 2026-06-06 17:52:49 +08:00 by wangdl · 1 comment
Owner

发现

审查 Batch 1 发现致命问题。

原因

后端 #100 将 listSessions 改为返回 { data, meta }

{ "data": [...], "meta": { "page": 1, "limit": 20, "total": 42 } }

但 ResponseInterceptor 会再包一层:

{ "success": true, "data": { "data": [...], "meta": {...} }, "timestamp": "..." }

iOS APIClient 解码流程:

  1. 检测到 "data" key → 走 APIEnvelope 路径
  2. 解码 APIEnvelope<[ChatSession]>
  3. .data{ data: [...], meta: {...} } (对象)
  4. 尝试将对象解码为 [ChatSession] 数组 → FAIL / nil

影响

  • sessions sheet 打不开
  • load() 中的 listSessions 调用失败
  • 整个会话列表功能不可用

修复方案

  1. iOS: listSessions 返回类型改为 PaginatedResponse<[ChatSession]>
  2. 所有调用点取 .data 获取数组
  3. 或者后端 listSessions 直接返回数组(去掉 pagination wrapper)

涉及文件

文件 变更
APIService.swift listSessions 返回 PaginatedResponse
AIChatPage.swift sessions sheet 取 .data
AIChatViewModel.swift load() 中 listSessions 取 .data
## 发现 审查 Batch 1 发现致命问题。 ### 原因 后端 #100 将 listSessions 改为返回 `{ data, meta }`: ```json { "data": [...], "meta": { "page": 1, "limit": 20, "total": 42 } } ``` 但 ResponseInterceptor 会再包一层: ```json { "success": true, "data": { "data": [...], "meta": {...} }, "timestamp": "..." } ``` iOS APIClient 解码流程: 1. 检测到 "data" key → 走 APIEnvelope<T> 路径 2. 解码 APIEnvelope<[ChatSession]> 3. `.data` 是 `{ data: [...], meta: {...} }` (对象) 4. 尝试将对象解码为 [ChatSession] 数组 → **FAIL / nil** ### 影响 - sessions sheet 打不开 - load() 中的 listSessions 调用失败 - 整个会话列表功能不可用 ### 修复方案 1. iOS: listSessions 返回类型改为 PaginatedResponse<[ChatSession]> 2. 所有调用点取 `.data` 获取数组 3. 或者后端 listSessions 直接返回数组(去掉 pagination wrapper) ### 涉及文件 | 文件 | 变更 | |------|------| | APIService.swift | listSessions 返回 PaginatedResponse | | AIChatPage.swift | sessions sheet 取 .data | | AIChatViewModel.swift | load() 中 listSessions 取 .data |
wangdl added this to the M-CHAT:AI 会话 Scope 系统重构(iOS 侧) milestone 2026-06-06 17:52:49 +08:00
Author
Owner

修复

  • APIService.listSessions 返回类型改为 PaginatedResponse 再取 .data
  • 适配后端 #100 改后的 { data, meta } 响应格式

涉及: APIService.swift

## 修复 - APIService.listSessions 返回类型改为 PaginatedResponse<ChatSession> 再取 .data - 适配后端 #100 改后的 { data, meta } 响应格式 涉及: APIService.swift
Sign in to join this conversation.
No description provided.