import { json, type TypedResponse } from '@remix-run/node'; import type { ApiResponse } from '~/types/global'; /** * 创建标准化的 API 响应 * * @param data 响应数据 * @param message 响应消息 * @param status HTTP 状态码,默认为 200 * @returns 标准化的 API 响应 */ export function apiResponse( status: number = 200, data?: T, message?: string, success: boolean = true, headers?: HeadersInit, ): TypedResponse> { const finalSuccess = success ?? (status >= 200 && status < 300); const responseBody: ApiResponse = { success: finalSuccess, ...(data !== undefined ? { data } : {}), ...(message !== undefined ? { message } : {}), }; return json(responseBody, { status, headers }); } /** * 创建成功的 API 响应 * @param data 响应数据 * @param message 成功消息 * @returns 成功的 API 响应 */ export function successResponse( data?: T, message?: string, headers?: HeadersInit, ): TypedResponse> { return apiResponse(200, data, message, true, headers); } /** * 创建错误的 API 响应 * @param message 错误消息 * @param status HTTP 状态码,默认为 400 * @param data 额外的错误数据 * @returns 错误的 API 响应 */ export function errorResponse( status: number = 400, errorDetails?: string, headers?: HeadersInit, ): TypedResponse> { return apiResponse(status, undefined, errorDetails, false, headers); }