| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104 |
- import { LogHelper } from '../log/LogHelper';
- import { Result } from './ApiBaseRepository';
- /**
- * API 通用响应结构
- */
- export interface ApiCommonResult<T> {
- code: number;
- data: T;
- msg: string;
- }
- /**
- * API 响应解析器
- *
- * 统一处理 API 响应格式,自动解析 code、data、msg
- * 统一错误处理和业务错误码处理
- *
- * 使用方式:
- * ```typescript
- * const response = await networkManager.post<ApiCommonResult<UserInfo>>(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<T>
- */
- static handleResponse<T>(
- response: ApiCommonResult<T>,
- errorMessage: string = '请求失败',
- tag: string = 'ApiResponseParser'
- ): Result<T> {
- 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<T | null>
- */
- static handleNullableResponse<T>(
- response: ApiCommonResult<T>,
- errorMessage: string = '请求失败',
- tag: string = 'ApiResponseParser'
- ): Result<T | null> {
- 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<T>(response: ApiCommonResult<T>): boolean {
- return response.code === ApiResponseParser.SUCCESS_CODE;
- }
-
- /**
- * 获取错误消息
- */
- static getErrorMessage<T>(response: ApiCommonResult<T>, defaultMessage: string = '请求失败'): string {
- return response.msg || defaultMessage;
- }
- }
|