From c29c20bcd87a3cda20c378f3ee0a20f1a3c9fa13 Mon Sep 17 00:00:00 2001 From: hyungyu Kim Date: Sat, 15 Jan 2022 14:33:23 +0900 Subject: [PATCH 1/3] =?UTF-8?q?[Feat]=20Moya=20=EC=B4=88=EA=B8=B0=EC=84=B8?= =?UTF-8?q?=ED=8C=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - URL 추가. baseURL 상수 생성 - 데이터 모델 예시 생성 - NetworkResult 생성 - GenericResult 생성 - API, service 생성 - 커스텀 moya plugin 생성 - TempModel, TempService 파일 샂게 --- Spark-iOS/Spark-iOS.xcodeproj/project.pbxproj | 60 +++++++++++++--- .../Spark-iOS/Resource/Constants/URL.swift | 14 ++++ .../NetworkModels/GenericResponse.swift | 18 +++++ .../Source/NetworkModels/Home/HabitRoom.swift | 30 ++++++++ .../Source/NetworkModels/NetworkResult.swift | 16 +++++ .../Source/NetworkModels/TempModel.swift | 8 --- .../Source/NetworkServices/Home/HomeAPI.swift | 8 +++ .../NetworkServices/Home/HomeService.swift | 8 +++ .../Plugin/MoyaLoggerPlugin.swift | 72 +++++++++++++++++++ .../Source/NetworkServices/TempService.swift | 8 --- 10 files changed, 218 insertions(+), 24 deletions(-) create mode 100644 Spark-iOS/Spark-iOS/Resource/Constants/URL.swift create mode 100644 Spark-iOS/Spark-iOS/Source/NetworkModels/GenericResponse.swift create mode 100644 Spark-iOS/Spark-iOS/Source/NetworkModels/Home/HabitRoom.swift create mode 100644 Spark-iOS/Spark-iOS/Source/NetworkModels/NetworkResult.swift delete mode 100644 Spark-iOS/Spark-iOS/Source/NetworkModels/TempModel.swift create mode 100644 Spark-iOS/Spark-iOS/Source/NetworkServices/Home/HomeAPI.swift create mode 100644 Spark-iOS/Spark-iOS/Source/NetworkServices/Home/HomeService.swift create mode 100644 Spark-iOS/Spark-iOS/Source/NetworkServices/Plugin/MoyaLoggerPlugin.swift delete mode 100644 Spark-iOS/Spark-iOS/Source/NetworkServices/TempService.swift diff --git a/Spark-iOS/Spark-iOS.xcodeproj/project.pbxproj b/Spark-iOS/Spark-iOS.xcodeproj/project.pbxproj index dbf9ca7e..9f06b829 100644 --- a/Spark-iOS/Spark-iOS.xcodeproj/project.pbxproj +++ b/Spark-iOS/Spark-iOS.xcodeproj/project.pbxproj @@ -49,8 +49,6 @@ F8096F3227841FE100B71D38 /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = F8096F3127841FE100B71D38 /* ViewController.swift */; }; F8096F34278420F100B71D38 /* TempView.swift in Sources */ = {isa = PBXBuildFile; fileRef = F8096F33278420F100B71D38 /* TempView.swift */; }; F8096F36278420FA00B71D38 /* TempProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = F8096F35278420FA00B71D38 /* TempProtocol.swift */; }; - F8096F382784210000B71D38 /* TempService.swift in Sources */ = {isa = PBXBuildFile; fileRef = F8096F372784210000B71D38 /* TempService.swift */; }; - F8096F3A2784210A00B71D38 /* TempModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = F8096F392784210A00B71D38 /* TempModel.swift */; }; F8096F3C2784211D00B71D38 /* UIColor+.swift in Sources */ = {isa = PBXBuildFile; fileRef = F8096F3B2784211D00B71D38 /* UIColor+.swift */; }; F8096F3E2784213700B71D38 /* UIFont+.swift in Sources */ = {isa = PBXBuildFile; fileRef = F8096F3D2784213700B71D38 /* UIFont+.swift */; }; F8096F442784221900B71D38 /* Xib.swift in Sources */ = {isa = PBXBuildFile; fileRef = F8096F432784221900B71D38 /* Xib.swift */; }; @@ -66,6 +64,13 @@ F82B2E0B278EBC4400219628 /* UserDefaultsKey.swift in Sources */ = {isa = PBXBuildFile; fileRef = F82B2E0A278EBC4400219628 /* UserDefaultsKey.swift */; }; F82B2E0E278ED01F00219628 /* Splash.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = F82B2E0D278ED01F00219628 /* Splash.storyboard */; }; F82B2E12278F54CD00219628 /* SplashVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = F82B2E11278F54CD00219628 /* SplashVC.swift */; }; + F82F57FB27928437003E4174 /* NetworkResult.swift in Sources */ = {isa = PBXBuildFile; fileRef = F82F57FA27928437003E4174 /* NetworkResult.swift */; }; + F82F57FD2792847D003E4174 /* GenericResponse.swift in Sources */ = {isa = PBXBuildFile; fileRef = F82F57FC2792847D003E4174 /* GenericResponse.swift */; }; + F82F57FF27928588003E4174 /* URL.swift in Sources */ = {isa = PBXBuildFile; fileRef = F82F57FE27928588003E4174 /* URL.swift */; }; + F82F5802279287FD003E4174 /* HabitRoom.swift in Sources */ = {isa = PBXBuildFile; fileRef = F82F5801279287FD003E4174 /* HabitRoom.swift */; }; + F82F580427928975003E4174 /* MoyaLoggerPlugin.swift in Sources */ = {isa = PBXBuildFile; fileRef = F82F580327928975003E4174 /* MoyaLoggerPlugin.swift */; }; + F82F5808279289B2003E4174 /* HomeAPI.swift in Sources */ = {isa = PBXBuildFile; fileRef = F82F5807279289B2003E4174 /* HomeAPI.swift */; }; + F82F580A279289C4003E4174 /* HomeService.swift in Sources */ = {isa = PBXBuildFile; fileRef = F82F5809279289C4003E4174 /* HomeService.swift */; }; F867B6B6278F86610024B1D4 /* UINavigationController+.swift in Sources */ = {isa = PBXBuildFile; fileRef = F867B6B5278F86610024B1D4 /* UINavigationController+.swift */; }; F8FAA9722790344D00C4190F /* HomeHabitCVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = F8FAA9702790344D00C4190F /* HomeHabitCVC.swift */; }; F8FAA9732790344D00C4190F /* HomeHabitCVC.xib in Resources */ = {isa = PBXBuildFile; fileRef = F8FAA9712790344D00C4190F /* HomeHabitCVC.xib */; }; @@ -120,8 +125,6 @@ F8096F3127841FE100B71D38 /* ViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewController.swift; sourceTree = ""; }; F8096F33278420F100B71D38 /* TempView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TempView.swift; sourceTree = ""; }; F8096F35278420FA00B71D38 /* TempProtocol.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TempProtocol.swift; sourceTree = ""; }; - F8096F372784210000B71D38 /* TempService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TempService.swift; sourceTree = ""; }; - F8096F392784210A00B71D38 /* TempModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TempModel.swift; sourceTree = ""; }; F8096F3B2784211D00B71D38 /* UIColor+.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UIColor+.swift"; sourceTree = ""; }; F8096F3D2784213700B71D38 /* UIFont+.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UIFont+.swift"; sourceTree = ""; }; F8096F432784221900B71D38 /* Xib.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Xib.swift; sourceTree = ""; }; @@ -137,6 +140,13 @@ F82B2E0A278EBC4400219628 /* UserDefaultsKey.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UserDefaultsKey.swift; sourceTree = ""; }; F82B2E0D278ED01F00219628 /* Splash.storyboard */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; path = Splash.storyboard; sourceTree = ""; }; F82B2E11278F54CD00219628 /* SplashVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SplashVC.swift; sourceTree = ""; }; + F82F57FA27928437003E4174 /* NetworkResult.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NetworkResult.swift; sourceTree = ""; }; + F82F57FC2792847D003E4174 /* GenericResponse.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GenericResponse.swift; sourceTree = ""; }; + F82F57FE27928588003E4174 /* URL.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = URL.swift; sourceTree = ""; }; + F82F5801279287FD003E4174 /* HabitRoom.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HabitRoom.swift; sourceTree = ""; }; + F82F580327928975003E4174 /* MoyaLoggerPlugin.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MoyaLoggerPlugin.swift; sourceTree = ""; }; + F82F5807279289B2003E4174 /* HomeAPI.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HomeAPI.swift; sourceTree = ""; }; + F82F5809279289C4003E4174 /* HomeService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HomeService.swift; sourceTree = ""; }; F8368FAA278F5DFF00110B74 /* Spark-iOS.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = "Spark-iOS.entitlements"; sourceTree = ""; }; F867B6B5278F86610024B1D4 /* UINavigationController+.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UINavigationController+.swift"; sourceTree = ""; }; F8FAA9702790344D00C4190F /* HomeHabitCVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HomeHabitCVC.swift; sourceTree = ""; }; @@ -346,6 +356,7 @@ F8096F432784221900B71D38 /* Xib.swift */, F8096F452784247100B71D38 /* Notification.swift */, F82B2E0A278EBC4400219628 /* UserDefaultsKey.swift */, + F82F57FE27928588003E4174 /* URL.swift */, ); path = Constants; sourceTree = ""; @@ -417,7 +428,8 @@ F8096F2027841DCC00B71D38 /* NetworkServices */ = { isa = PBXGroup; children = ( - F8096F372784210000B71D38 /* TempService.swift */, + F82F58052792897B003E4174 /* Plugin */, + F82F5806279289AC003E4174 /* Home */, ); path = NetworkServices; sourceTree = ""; @@ -425,7 +437,9 @@ F8096F2127841DD600B71D38 /* NetworkModels */ = { isa = PBXGroup; children = ( - F8096F392784210A00B71D38 /* TempModel.swift */, + F82F57FA27928437003E4174 /* NetworkResult.swift */, + F82F57FC2792847D003E4174 /* GenericResponse.swift */, + F82F5800279287EC003E4174 /* Home */, ); path = NetworkModels; sourceTree = ""; @@ -509,6 +523,31 @@ path = Splash; sourceTree = ""; }; + F82F5800279287EC003E4174 /* Home */ = { + isa = PBXGroup; + children = ( + F82F5801279287FD003E4174 /* HabitRoom.swift */, + ); + path = Home; + sourceTree = ""; + }; + F82F58052792897B003E4174 /* Plugin */ = { + isa = PBXGroup; + children = ( + F82F580327928975003E4174 /* MoyaLoggerPlugin.swift */, + ); + path = Plugin; + sourceTree = ""; + }; + F82F5806279289AC003E4174 /* Home */ = { + isa = PBXGroup; + children = ( + F82F5807279289B2003E4174 /* HomeAPI.swift */, + F82F5809279289C4003E4174 /* HomeService.swift */, + ); + path = Home; + sourceTree = ""; + }; F8FAA96B2790336E00C4190F /* Home */ = { isa = PBXGroup; children = ( @@ -666,7 +705,6 @@ 2B985205279031D000CE40A7 /* CreateRoomVC.swift in Sources */, 2B69E7E5278E22F4000F927F /* FeedHeaderView.swift in Sources */, F80A3E55278C1C1F00728E07 /* StorageVC.swift in Sources */, - F8096F3A2784210A00B71D38 /* TempModel.swift in Sources */, F8096F3C2784211D00B71D38 /* UIColor+.swift in Sources */, F867B6B6278F86610024B1D4 /* UINavigationController+.swift in Sources */, EB625E7F278F272300C43DE9 /* DoneStorageCVC.swift in Sources */, @@ -676,7 +714,9 @@ 2BC17270278F54DB00BA3029 /* WaitingVC.swift in Sources */, F8096F442784221900B71D38 /* Xib.swift in Sources */, EB625E8A278F29D300C43DE9 /* CarouselLayout.swift in Sources */, + F82F57FF27928588003E4174 /* URL.swift in Sources */, F80A3E4F278C18BA00728E07 /* MainTBC.swift in Sources */, + F82F57FD2792847D003E4174 /* GenericResponse.swift in Sources */, F80A3E57278C1C2700728E07 /* FeedVC.swift in Sources */, 2BC17277278F765C00BA3029 /* WaitingFriendCVC.swift in Sources */, 2B9851FD278FCBF400CE40A7 /* UILabel+.swift in Sources */, @@ -684,12 +724,16 @@ F8096F062784107D00B71D38 /* SceneDelegate.swift in Sources */, EB625E7B278F271400C43DE9 /* DoingStorageCVC.swift in Sources */, F816F125278E1C920008ED00 /* LoginVC.swift in Sources */, - F8096F382784210000B71D38 /* TempService.swift in Sources */, F8096F3E2784213700B71D38 /* UIFont+.swift in Sources */, + F82F580A279289C4003E4174 /* HomeService.swift in Sources */, EB625E95278F8E7200C43DE9 /* MoreStorageCVC.swift in Sources */, + F82F57FB27928437003E4174 /* NetworkResult.swift in Sources */, + F82F5802279287FD003E4174 /* HabitRoom.swift in Sources */, F82B2E12278F54CD00219628 /* SplashVC.swift in Sources */, + F82F580427928975003E4174 /* MoyaLoggerPlugin.swift in Sources */, F8096F2927841F1E00B71D38 /* Const.swift in Sources */, F8096F3027841F9200B71D38 /* HomeVC.swift in Sources */, + F82F5808279289B2003E4174 /* HomeAPI.swift in Sources */, EB625E8F278F8E1900C43DE9 /* StorageMoreListDataModel.swift in Sources */, F8096F462784247100B71D38 /* Notification.swift in Sources */, F8FAA9762790346000C4190F /* HomeWaitingCVC.swift in Sources */, diff --git a/Spark-iOS/Spark-iOS/Resource/Constants/URL.swift b/Spark-iOS/Spark-iOS/Resource/Constants/URL.swift new file mode 100644 index 00000000..404a9035 --- /dev/null +++ b/Spark-iOS/Spark-iOS/Resource/Constants/URL.swift @@ -0,0 +1,14 @@ +// +// URL.swift +// Spark-iOS +// +// Created by kimhyungyu on 2022/01/15. +// + +import Foundation + +extension Const { + struct URL { + static let baseURL = "https://asia-northeast3-we-sopt-spark.cloudfunctions.net/api" + } +} diff --git a/Spark-iOS/Spark-iOS/Source/NetworkModels/GenericResponse.swift b/Spark-iOS/Spark-iOS/Source/NetworkModels/GenericResponse.swift new file mode 100644 index 00000000..b284e44d --- /dev/null +++ b/Spark-iOS/Spark-iOS/Source/NetworkModels/GenericResponse.swift @@ -0,0 +1,18 @@ +// +// GenericResponse.swift +// Spark-iOS +// +// Created by kimhyungyu on 2022/01/15. +// + +import Foundation + +struct GenericResponse: Codable { + let statusCode: Int + let success, message: String + let data: T? + + enum CodingKeys: String, CodingKey { + case statusCode, success, message, data + } +} diff --git a/Spark-iOS/Spark-iOS/Source/NetworkModels/Home/HabitRoom.swift b/Spark-iOS/Spark-iOS/Source/NetworkModels/Home/HabitRoom.swift new file mode 100644 index 00000000..e736eca5 --- /dev/null +++ b/Spark-iOS/Spark-iOS/Source/NetworkModels/Home/HabitRoom.swift @@ -0,0 +1,30 @@ +// +// HabitRoom.swift +// Spark-iOS +// +// Created by kimhyungyu on 2022/01/15. +// + +import Foundation + +// MARK: - HabitRoom +struct HabitRoom: Codable { + let rooms: [Room] +} + +// MARK: - Room +struct Room: Codable { + let roomID: Int + let roomName: String + let leftDay: Int? + let profileImg: [String]? + let life: Int? + // isStarted: 습관방 시작했는지 여부. isDone: 인증 완료 여부. + let isStarted, isDone: Bool + let memberNum, doneMemberNum: Int? + + enum CodingKeys: String, CodingKey { + case roomID = "roomId" + case roomName, leftDay, profileImg, life, isStarted, isDone, memberNum, doneMemberNum + } +} diff --git a/Spark-iOS/Spark-iOS/Source/NetworkModels/NetworkResult.swift b/Spark-iOS/Spark-iOS/Source/NetworkModels/NetworkResult.swift new file mode 100644 index 00000000..bdfae387 --- /dev/null +++ b/Spark-iOS/Spark-iOS/Source/NetworkModels/NetworkResult.swift @@ -0,0 +1,16 @@ +// +// NetworkResult.swift +// Spark-iOS +// +// Created by kimhyungyu on 2022/01/15. +// + +import Foundation + +enum NetworkResult { + case success(T) // 서버 통신 성공 + case requestErr(T) // 요청 에러 발생 + case pathErr // 경로 에러 + case serverErr // 서버의 내부적 에러 + case networkFail // 네트워크 연결 실패 +} diff --git a/Spark-iOS/Spark-iOS/Source/NetworkModels/TempModel.swift b/Spark-iOS/Spark-iOS/Source/NetworkModels/TempModel.swift deleted file mode 100644 index 99b471fc..00000000 --- a/Spark-iOS/Spark-iOS/Source/NetworkModels/TempModel.swift +++ /dev/null @@ -1,8 +0,0 @@ -// -// TempModel.swift -// Spark-iOS -// -// Created by kimhyungyu on 2022/01/04. -// - -import Foundation diff --git a/Spark-iOS/Spark-iOS/Source/NetworkServices/Home/HomeAPI.swift b/Spark-iOS/Spark-iOS/Source/NetworkServices/Home/HomeAPI.swift new file mode 100644 index 00000000..3e9b34cb --- /dev/null +++ b/Spark-iOS/Spark-iOS/Source/NetworkServices/Home/HomeAPI.swift @@ -0,0 +1,8 @@ +// +// HomeAPI.swift +// Spark-iOS +// +// Created by kimhyungyu on 2022/01/15. +// + +import Foundation diff --git a/Spark-iOS/Spark-iOS/Source/NetworkServices/Home/HomeService.swift b/Spark-iOS/Spark-iOS/Source/NetworkServices/Home/HomeService.swift new file mode 100644 index 00000000..f9579413 --- /dev/null +++ b/Spark-iOS/Spark-iOS/Source/NetworkServices/Home/HomeService.swift @@ -0,0 +1,8 @@ +// +// HomeService.swift +// Spark-iOS +// +// Created by kimhyungyu on 2022/01/15. +// + +import Foundation diff --git a/Spark-iOS/Spark-iOS/Source/NetworkServices/Plugin/MoyaLoggerPlugin.swift b/Spark-iOS/Spark-iOS/Source/NetworkServices/Plugin/MoyaLoggerPlugin.swift new file mode 100644 index 00000000..75a8bf41 --- /dev/null +++ b/Spark-iOS/Spark-iOS/Source/NetworkServices/Plugin/MoyaLoggerPlugin.swift @@ -0,0 +1,72 @@ +// +// MoyaLoggerPlugin.swift +// Spark-iOS +// +// Created by kimhyungyu on 2022/01/15. +// + +import Foundation +import Moya + +final class MoyaLoggerPlugin: PluginType { + + // Request를 보낼 때 호출 + func willSend(_ request: RequestType, target: TargetType) { + guard let httpRequest = request.request else { + print("--> 유효하지 않은 요청") + return + } + let url = httpRequest.description + let method = httpRequest.httpMethod ?? "unknown method" + var log = "----------------------------------------------------\n[✅\(method)] \(url)\n----------------------------------------------------\n" + log.append("API: \(target)\n") + if let headers = httpRequest.allHTTPHeaderFields, !headers.isEmpty { + log.append("header: \(headers)\n") + } + if let body = httpRequest.httpBody, let bodyString = String(bytes: body, encoding: String.Encoding.utf8) { + log.append("\(bodyString)\n") + } + log.append("------------------- END \(method) --------------------------") + print(log) + } + + // Response가 왔을 때 + func didReceive(_ result: Result, target: TargetType) { + switch result { + case let .success(response): + onSuceed(response, target: target) + case let .failure(error): + onFail(error, target: target) + } + } + + func onSuceed(_ response: Response, target: TargetType) { + let request = response.request + let url = request?.url?.absoluteString ?? "nil" + let statusCode = response.statusCode + var log = "------------------- 네트워크 통신 성공 -------------------" + log.append("\n[✅\(statusCode)] \(url)\n----------------------------------------------------\n") + log.append("API: \(target)\n") +// response.response?.allHeaderFields.forEach { +// log.append("\($0): \($1)\n") +// } + if let reString = String(bytes: response.data, encoding: String.Encoding.utf8) { + log.append("\(reString)\n") + } + log.append("------------------- END HTTP -------------------") + print(log) + } + + func onFail(_ error: MoyaError, target: TargetType) { + if let response = error.response { + onSuceed(response, target: target) + return + } + var log = "네트워크 오류" + log.append("<-- \(error.errorCode) \(target)\n") + log.append("\(error.failureReason ?? error.errorDescription ?? "unknown error")\n") + log.append("<-- END HTTP") + print(log) + } +} + diff --git a/Spark-iOS/Spark-iOS/Source/NetworkServices/TempService.swift b/Spark-iOS/Spark-iOS/Source/NetworkServices/TempService.swift deleted file mode 100644 index f9acaa86..00000000 --- a/Spark-iOS/Spark-iOS/Source/NetworkServices/TempService.swift +++ /dev/null @@ -1,8 +0,0 @@ -// -// TempService.swift -// Spark-iOS -// -// Created by kimhyungyu on 2022/01/04. -// - -import Foundation From be867c5644cdf65af5b141bbad90458f9b5f1127 Mon Sep 17 00:00:00 2001 From: hyungyu Kim Date: Sat, 15 Jan 2022 14:43:22 +0900 Subject: [PATCH 2/3] =?UTF-8?q?[Feat]=20#49=20-=20=EC=BB=A4=EC=8A=A4?= =?UTF-8?q?=ED=85=80=20moya=20plugin=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../NetworkServices/Plugin/MoyaLoggerPlugin.swift | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/Spark-iOS/Spark-iOS/Source/NetworkServices/Plugin/MoyaLoggerPlugin.swift b/Spark-iOS/Spark-iOS/Source/NetworkServices/Plugin/MoyaLoggerPlugin.swift index 75a8bf41..26f7012d 100644 --- a/Spark-iOS/Spark-iOS/Source/NetworkServices/Plugin/MoyaLoggerPlugin.swift +++ b/Spark-iOS/Spark-iOS/Source/NetworkServices/Plugin/MoyaLoggerPlugin.swift @@ -18,7 +18,7 @@ final class MoyaLoggerPlugin: PluginType { } let url = httpRequest.description let method = httpRequest.httpMethod ?? "unknown method" - var log = "----------------------------------------------------\n[✅\(method)] \(url)\n----------------------------------------------------\n" + var log = "----------------------------------------------------\n✅[\(method)] \(url)\n----------------------------------------------------\n" log.append("API: \(target)\n") if let headers = httpRequest.allHTTPHeaderFields, !headers.isEmpty { log.append("header: \(headers)\n") @@ -26,7 +26,7 @@ final class MoyaLoggerPlugin: PluginType { if let body = httpRequest.httpBody, let bodyString = String(bytes: body, encoding: String.Encoding.utf8) { log.append("\(bodyString)\n") } - log.append("------------------- END \(method) --------------------------") + log.append("------------------- END \(method) -------------------") print(log) } @@ -45,13 +45,10 @@ final class MoyaLoggerPlugin: PluginType { let url = request?.url?.absoluteString ?? "nil" let statusCode = response.statusCode var log = "------------------- 네트워크 통신 성공 -------------------" - log.append("\n[✅\(statusCode)] \(url)\n----------------------------------------------------\n") - log.append("API: \(target)\n") -// response.response?.allHeaderFields.forEach { -// log.append("\($0): \($1)\n") -// } + log.append("\n✅[\(statusCode)] \(url)\n----------------------------------------------------\n") + log.append("✅API: \(target)\n") if let reString = String(bytes: response.data, encoding: String.Encoding.utf8) { - log.append("\(reString)\n") + log.append("✅\(reString)\n") } log.append("------------------- END HTTP -------------------") print(log) From 9300d7cf0f25cc3cb430a09564552361e970084e Mon Sep 17 00:00:00 2001 From: hyungyu Kim Date: Sat, 15 Jan 2022 15:42:22 +0900 Subject: [PATCH 3/3] =?UTF-8?q?[Feat]=20#49=20-=20Moya=20=EC=84=B8?= =?UTF-8?q?=ED=8C=85=20=EB=B0=8F=20=EC=98=88=EC=8B=9C=20=EC=84=9C=EB=B2=84?= =?UTF-8?q?=ED=86=B5=EC=8B=A0=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - HomeAPI, HomeService - 습관방 리스트 조회 서버 구현 --- Spark-iOS/Spark-iOS.xcodeproj/project.pbxproj | 4 ++ .../Spark-iOS/Resource/Constants/Const.swift | 2 + .../Spark-iOS/Resource/Constants/Header.swift | 18 ++++++ .../Source/NetworkServices/Home/HomeAPI.swift | 63 +++++++++++++++++++ .../NetworkServices/Home/HomeService.swift | 43 +++++++++++++ 5 files changed, 130 insertions(+) create mode 100644 Spark-iOS/Spark-iOS/Resource/Constants/Header.swift diff --git a/Spark-iOS/Spark-iOS.xcodeproj/project.pbxproj b/Spark-iOS/Spark-iOS.xcodeproj/project.pbxproj index 9f06b829..a1b404b3 100644 --- a/Spark-iOS/Spark-iOS.xcodeproj/project.pbxproj +++ b/Spark-iOS/Spark-iOS.xcodeproj/project.pbxproj @@ -71,6 +71,7 @@ F82F580427928975003E4174 /* MoyaLoggerPlugin.swift in Sources */ = {isa = PBXBuildFile; fileRef = F82F580327928975003E4174 /* MoyaLoggerPlugin.swift */; }; F82F5808279289B2003E4174 /* HomeAPI.swift in Sources */ = {isa = PBXBuildFile; fileRef = F82F5807279289B2003E4174 /* HomeAPI.swift */; }; F82F580A279289C4003E4174 /* HomeService.swift in Sources */ = {isa = PBXBuildFile; fileRef = F82F5809279289C4003E4174 /* HomeService.swift */; }; + F82F580C27929F74003E4174 /* Header.swift in Sources */ = {isa = PBXBuildFile; fileRef = F82F580B27929F74003E4174 /* Header.swift */; }; F867B6B6278F86610024B1D4 /* UINavigationController+.swift in Sources */ = {isa = PBXBuildFile; fileRef = F867B6B5278F86610024B1D4 /* UINavigationController+.swift */; }; F8FAA9722790344D00C4190F /* HomeHabitCVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = F8FAA9702790344D00C4190F /* HomeHabitCVC.swift */; }; F8FAA9732790344D00C4190F /* HomeHabitCVC.xib in Resources */ = {isa = PBXBuildFile; fileRef = F8FAA9712790344D00C4190F /* HomeHabitCVC.xib */; }; @@ -147,6 +148,7 @@ F82F580327928975003E4174 /* MoyaLoggerPlugin.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MoyaLoggerPlugin.swift; sourceTree = ""; }; F82F5807279289B2003E4174 /* HomeAPI.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HomeAPI.swift; sourceTree = ""; }; F82F5809279289C4003E4174 /* HomeService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HomeService.swift; sourceTree = ""; }; + F82F580B27929F74003E4174 /* Header.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Header.swift; sourceTree = ""; }; F8368FAA278F5DFF00110B74 /* Spark-iOS.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = "Spark-iOS.entitlements"; sourceTree = ""; }; F867B6B5278F86610024B1D4 /* UINavigationController+.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UINavigationController+.swift"; sourceTree = ""; }; F8FAA9702790344D00C4190F /* HomeHabitCVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HomeHabitCVC.swift; sourceTree = ""; }; @@ -357,6 +359,7 @@ F8096F452784247100B71D38 /* Notification.swift */, F82B2E0A278EBC4400219628 /* UserDefaultsKey.swift */, F82F57FE27928588003E4174 /* URL.swift */, + F82F580B27929F74003E4174 /* Header.swift */, ); path = Constants; sourceTree = ""; @@ -705,6 +708,7 @@ 2B985205279031D000CE40A7 /* CreateRoomVC.swift in Sources */, 2B69E7E5278E22F4000F927F /* FeedHeaderView.swift in Sources */, F80A3E55278C1C1F00728E07 /* StorageVC.swift in Sources */, + F82F580C27929F74003E4174 /* Header.swift in Sources */, F8096F3C2784211D00B71D38 /* UIColor+.swift in Sources */, F867B6B6278F86610024B1D4 /* UINavigationController+.swift in Sources */, EB625E7F278F272300C43DE9 /* DoneStorageCVC.swift in Sources */, diff --git a/Spark-iOS/Spark-iOS/Resource/Constants/Const.swift b/Spark-iOS/Spark-iOS/Resource/Constants/Const.swift index 98ee8251..6523fec8 100644 --- a/Spark-iOS/Spark-iOS/Resource/Constants/Const.swift +++ b/Spark-iOS/Spark-iOS/Resource/Constants/Const.swift @@ -14,4 +14,6 @@ struct Const { Const.Xib.NibName.mainCVC 과 같이 사용. Notification.Name 을 extension 했기 때문에 .sendData 와 같이 사용가능. */ + + static let accessToken = UserDefaults.standard.string(forKey: Const.UserDefaultsKey.accessToken) ?? "" } diff --git a/Spark-iOS/Spark-iOS/Resource/Constants/Header.swift b/Spark-iOS/Spark-iOS/Resource/Constants/Header.swift new file mode 100644 index 00000000..b15597e0 --- /dev/null +++ b/Spark-iOS/Spark-iOS/Resource/Constants/Header.swift @@ -0,0 +1,18 @@ +// +// Header.swift +// Spark-iOS +// +// Created by kimhyungyu on 2022/01/15. +// + +import Foundation + +extension Const { + struct Header { + /// Content-Type: application/json + static var basicHeader = ["Content-Type": "application/json"] + /// access token 을 헤더에 담아서 보내야하는 경우에 사용. + static var authrizationHeader = ["Content-Type": "application/json", + "Authorization": accessToken] + } +} diff --git a/Spark-iOS/Spark-iOS/Source/NetworkServices/Home/HomeAPI.swift b/Spark-iOS/Spark-iOS/Source/NetworkServices/Home/HomeAPI.swift index 3e9b34cb..9511cc36 100644 --- a/Spark-iOS/Spark-iOS/Source/NetworkServices/Home/HomeAPI.swift +++ b/Spark-iOS/Spark-iOS/Source/NetworkServices/Home/HomeAPI.swift @@ -6,3 +6,66 @@ // import Foundation +import Moya + +public class UserAPI { + + static let shared = UserAPI() + var userProvider = MoyaProvider(plugins: [MoyaLoggerPlugin()]) + + public init() { } + + func habitRoomFetch(lastID: Int, size: Int, completion: @escaping (NetworkResult) -> Void) { + userProvider.request(.habitRoomFetch(lastID: lastID, size: size)) { (result) in + switch result { + case .success(let response): + let statusCode = response.statusCode + let data = response.data + + let networkResult = self.judgeHabitRoomFetchStatus(by: statusCode, data) + completion(networkResult) + + case .failure(let err): + print(err) + } + } + } + + private func judgeHabitRoomFetchStatus(by statusCode: Int, _ data: Data) -> NetworkResult { + + let decoder = JSONDecoder() + guard let decodedData = try? decoder.decode(GenericResponse.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 + } + } + + /// 응답 시 data 가 없는 경우. + private func judgeStatus(by statusCode: Int, _ data: Data) -> NetworkResult { + let decoder = JSONDecoder() + guard let decodedData = try? decoder.decode(GenericResponse.self, from: data) + else { return .pathErr } + + switch statusCode { + case 200: + return .success(decodedData.message) + case 400..<500: + return .requestErr(decodedData.message) + case 500: + return .serverErr + default: + return .networkFail + } + } +} diff --git a/Spark-iOS/Spark-iOS/Source/NetworkServices/Home/HomeService.swift b/Spark-iOS/Spark-iOS/Source/NetworkServices/Home/HomeService.swift index f9579413..259e1ca7 100644 --- a/Spark-iOS/Spark-iOS/Source/NetworkServices/Home/HomeService.swift +++ b/Spark-iOS/Spark-iOS/Source/NetworkServices/Home/HomeService.swift @@ -6,3 +6,46 @@ // import Foundation +import Moya + +enum HomeService { + case habitRoomFetch(lastID: Int, size:Int) +} + +extension HomeService: TargetType { + var baseURL: URL { + return URL(string: Const.URL.baseURL)! + } + + var path: String { + switch self { + case .habitRoomFetch: + return "/room" + } + } + + var method: Moya.Method { + switch self { + case .habitRoomFetch: + return .get + } + } + + var task: Task { + switch self { + case .habitRoomFetch(let lastID, let size): + return .requestParameters(parameters: ["lastid": lastID, + "size": size], + encoding: URLEncoding.queryString) + } + } + + var headers: [String : String]? { + switch self { + case .habitRoomFetch: + return Const.Header.authrizationHeader + } + } + + +}