TeamSparker / Spark-iOS

아요는🗿🔪슈슉..슈슉,,,슉...스...스파크🎇
64 stars 6 forks source link

[Refactor] JudgeStatus 메서드 개선 #620

Open L-j-h-c opened 2 years ago

L-j-h-c commented 2 years ago

🛠 Issue

이번에 4차과제를 하면서 반복되는 judgeStatus 메서드를 하나로 통일할 수 있도록 아래와 같이 만들어봤는데 어떻게 생각하시나용? @hyun99999 @yangsubinn

    func myRoomCertiChangeFetch(roomID: Int, lastID: Int, size: Int, completion: @escaping (NetworkResult<Any>) -> Void) {
        userProvider.request(.myRoomCertiChangeFetch(roomID: roomID, lastID: lastID, size: size)) { (result) in
            switch result {
            case .success(let response):
                let statusCode = response.statusCode
                let data = response.data

                let networkResult = self.judeStatus(by: statusCode, data, type:  MyRoomCertification.self)
                completion(networkResult)

            case .failure(let err):
                print(err)
            }
        }
    }

    private func judgeStatus<T: Codable>(by statusCode: Int, _ data: Data, type: T.Type) -> NetworkResult<Any> {
        let decoder = JSONDecoder()
        guard let decodedData = try? decoder.decode(GenericResponse<T>.self, from: data)
        else { return .pathErr }
        switch statusCode {
        case 200:
            return .success(decodedData.data ?? "None-Data")
        case 400..<500:
            return .requestErr(decodedData.message)
        case 500:
            return .serverErr
        default:
            return .networkFail
        }
    }

📝 To-do

hyun99999 commented 2 years ago

너무 좋네요! 확실한 리펙입니당 지금 200 혹은 201 일때 성공하는 경우가 있을 수도 있고 400 이랑 500 사이에 분기처리가 있는 경우도 있어요! 유의해서 진행하면 좋을거 같네용 준호 멋집니당🙈

yangsubinn commented 2 years ago

좋슴니다 ! 훨씬 더 효율적일 것 같아요 🤓