import { ApiResponse } from "@/types/responseTypes"; /** * HTTP 응답 관련 유틸리티 함수들 */ export class ResponseUtils { /** * Response 객체를 ApiResponse 타입으로 파싱합니다. * @param response Response 객체 * @returns ApiResponse 객체 */ static async parseResponse(response: Response): Promise { 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 { 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; } }