import { ApiResponse } from "@/types/responseTypes";
/**
* HTTP 응답 관련 유틸리티 함수들
*/
export class ResponseUtils {
/**
* Response 객체를 ApiResponse 타입으로 파싱합니다.
* @param response Response 객체
* @returns ApiResponse 객체
*/
static async parseResponse(response: Response): Promise<ApiResponse> {
const data = await response.json();
if (!data || typeof data.code !== 'string' || typeof data.message !== 'string') {
throw new Error('Invalid API response format');
}
return data as ApiResponse;
}
/**
* API 에러를 처리하고 적절한 에러 메시지를 던집니다.
* @param response Response 객체
* @param context 에러가 발생한 컨텍스트
* @throws Error 항상 에러를 던집니다
*/
static async handleApiError(response: Response, context: string): Promise<never> {
let errorMessage = `${context} 중 서버 오류가 발생했습니다 (${response.status})`;
try {
const errorData = await response.json();
if (errorData.message) {
errorMessage = errorData.message;
}
} catch {
// JSON 파싱 실패 시 기본 메시지 사용
}
throw new Error(errorMessage);
}
/**
* HTTP 상태 코드가 성공 범위인지 확인합니다.
* @param status HTTP 상태 코드
* @returns 성공 상태 여부 (200-299)
*/
static isSuccessStatus(status: number): boolean {
return status >= 200 && status < 300;
}
/**
* HTTP 상태 코드가 클라이언트 에러인지 확인합니다.
* @param status HTTP 상태 코드
* @returns 클라이언트 에러 여부 (400-499)
*/
static isClientError(status: number): boolean {
return status >= 400 && status < 500;
}
/**
* HTTP 상태 코드가 서버 에러인지 확인합니다.
* @param status HTTP 상태 코드
* @returns 서버 에러 여부 (500-599)
*/
static isServerError(status: number): boolean {
return status >= 500 && status < 600;
}
}