//
//  NetworkError.swift
//  HOLIX_iOS
//
//  Created by 정정욱 on 5/19/25.
//

import Foundation

enum NetworkError: Int, Error, CustomStringConvertible {
    var description: String { self.errorDescription }
    case invalidURL
    case requestEncodingError
    case responseDecodingError
    case responseError
    case unknownError
    case loginFailed = 400
    case notFoundError = 404
    case notAllowedMethod = 405
    case internalServerError = 500

    var errorDescription: String {
        switch self {
        case .invalidURL: return "잘못된 URL입니다."
        case .requestEncodingError: return "요청 인코딩에 실패했습니다."
        case .responseDecodingError: return "응답 디코딩에 실패했습니다."
        case .responseError: return "응답 오류가 발생했습니다."
        case .unknownError: return "알 수 없는 오류가 발생했습니다."
        case .loginFailed: return "로그인에 실패하였습니다."
        case .notFoundError: return "요청한 자원을 찾을 수 없습니다."
        case .notAllowedMethod: return "지원하지 않는 HTTP 메서드입니다."
        case .internalServerError: return "서버 내부 오류가 발생했습니다."
        }
    }
}

클라이언트(iOS)와 서버(API)는 서로 다른 레이어이기 때문에, 에러도 각자 책임과 역할이 있습니다.


에러는 두 종류로 나뉩니다

구분 설명 예시
서버에서 정의하는 에러 (서버 에러) API 응답 본문(code, message) 또는 HTTP 상태코드 HTTP 400, 401, 404, 500 {"code": 404, "message": "클럽을 찾을 수 없습니다."}
클라이언트에서 정의하는 에러 (클라 에러) URL이 잘못됨, 디코딩 실패, 로컬 캐시 실패 등 앱 내부 문제 .invalidURL, .responseDecodingError, .requestEncodingError, .noInternetConnection

예시로 이해하기

  1. 서버 에러 (서버가 준 오류)
HTTP 404 Not Found
{
  "code": 404,
  "message": "해당 클럽을 찾을 수 없습니다."
}

  1. 클라이언트 에러 (앱에서 자체적으로 발생)

이건 서버랑 상관없이 클라이언트 앱 안에서 발생하는 문제