import { LogHelper } from '../log/LogHelper'; import { Result } from './ApiBaseRepository'; /** * API 通用响应结构 */ export interface ApiCommonResult { code: number; data: T; msg: string; } /** * API 响应解析器 * * 统一处理 API 响应格式,自动解析 code、data、msg * 统一错误处理和业务错误码处理 * * 使用方式: * ```typescript * const response = await networkManager.post>(url, data); * const result = ApiResponseParser.handleResponse(response, "获取用户信息失败"); * if (result.isSuccess) { * const userInfo = result.getOrThrow(); * } * ``` */ export class ApiResponseParser { /** * 成功状态码(根据实际后端定义调整) */ private static readonly SUCCESS_CODE = 0; /** * 处理 API 响应 * * @param response API 响应(ApiCommonResult 格式) * @param errorMessage 错误消息前缀 * @param tag 日志标签 * @returns Result */ static handleResponse( response: ApiCommonResult, errorMessage: string = '请求失败', tag: string = 'ApiResponseParser' ): Result { if (response.code === ApiResponseParser.SUCCESS_CODE) { if (response.data !== undefined && response.data !== null) { LogHelper.d(tag, '请求成功'); return Result.success(response.data); } else { const error = new Error('响应数据为空'); LogHelper.e(tag, `${errorMessage}: 响应数据为空`); return Result.failure(error); } } else { const errorMsg = response.msg || errorMessage; const error = new Error(errorMsg); LogHelper.e(tag, `${errorMessage}: ${errorMsg} (code: ${response.code})`); return Result.failure(error); } } /** * 处理可空数据的 API 响应 * * 用于处理服务器可能返回 null 的情况 * * @param response API 响应 * @param errorMessage 错误消息前缀 * @param tag 日志标签 * @returns Result */ static handleNullableResponse( response: ApiCommonResult, errorMessage: string = '请求失败', tag: string = 'ApiResponseParser' ): Result { if (response.code === ApiResponseParser.SUCCESS_CODE) { LogHelper.d(tag, '请求成功(可空数据)'); return Result.success(response.data ?? null); } else { const errorMsg = response.msg || errorMessage; const error = new Error(errorMsg); LogHelper.e(tag, `${errorMessage}: ${errorMsg} (code: ${response.code})`); return Result.failure(error); } } /** * 检查响应是否成功 */ static isSuccess(response: ApiCommonResult): boolean { return response.code === ApiResponseParser.SUCCESS_CODE; } /** * 获取错误消息 */ static getErrorMessage(response: ApiCommonResult, defaultMessage: string = '请求失败'): string { return response.msg || defaultMessage; } }