From f9ecad1876a20e1d3110c330465e3e129b99c330 Mon Sep 17 00:00:00 2001 From: MinjaeLee <2alswo7@khu.ac.kr> Date: Sat, 13 Nov 2021 21:53:52 +0900 Subject: [PATCH 1/2] =?UTF-8?q?[FEAT]=20#63=20-=20=ED=9A=8C=EC=9B=90?= =?UTF-8?q?=EA=B0=80=EC=9E=85,=20=ED=9A=8C=EC=9B=90=ED=83=88=ED=87=B4=20?= =?UTF-8?q?=EC=84=9C=EB=B2=84=20=EA=B5=AC=EC=B6=95=20&=20=ED=85=8C?= =?UTF-8?q?=EC=8A=A4=ED=8A=B8=20=EC=99=84=EB=A3=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- NADA-iOS-forRelease.xcodeproj/project.pbxproj | 12 ++-- .../User/UserWithTokenRequest.swift | 30 ++++++++ .../User/{User.swift => Users.swift} | 11 ++- .../Sources/NetworkService/User/UserAPI.swift | 68 +++++++++++++++++++ .../NetworkService/User/UserSevice.swift | 29 +++++++- .../Sources/SceneDelegate.swift | 2 +- .../Login/LoginViewController.swift | 57 +++++++++++++++- 7 files changed, 199 insertions(+), 10 deletions(-) create mode 100644 NADA-iOS-forRelease/Sources/NetworkModel/User/UserWithTokenRequest.swift rename NADA-iOS-forRelease/Sources/NetworkModel/User/{User.swift => Users.swift} (62%) diff --git a/NADA-iOS-forRelease.xcodeproj/project.pbxproj b/NADA-iOS-forRelease.xcodeproj/project.pbxproj index 63469c7e..27db7f41 100644 --- a/NADA-iOS-forRelease.xcodeproj/project.pbxproj +++ b/NADA-iOS-forRelease.xcodeproj/project.pbxproj @@ -24,7 +24,6 @@ 3958F23C270FFBD500B100B2 /* Group.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 3958F23B270FFBD500B100B2 /* Group.storyboard */; }; 3979709626FA0BE5003FB4F5 /* LoginViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3979709526FA0BE5003FB4F5 /* LoginViewController.swift */; }; 3979709826FA0BF0003FB4F5 /* Login.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 3979709726FA0BF0003FB4F5 /* Login.storyboard */; }; - 3981148C273BEB8400E28630 /* User.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3981148B273BEB8400E28630 /* User.swift */; }; 3981148E273BEBB300E28630 /* CardListEditRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3981148D273BEBB300E28630 /* CardListEditRequest.swift */; }; 39811490273BEBCE00E28630 /* CardListRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3981148F273BEBCE00E28630 /* CardListRequest.swift */; }; 399C55D72711921100845A54 /* CustomTabBarButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = 399C55D62711921100845A54 /* CustomTabBarButton.swift */; }; @@ -34,6 +33,8 @@ 399C55DF2711949D00845A54 /* CGPoint+Distance.swift in Sources */ = {isa = PBXBuildFile; fileRef = 399C55DE2711949D00845A54 /* CGPoint+Distance.swift */; }; 399C55E12711C21800845A54 /* CustomTabBar.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 399C55E02711C21800845A54 /* CustomTabBar.storyboard */; }; 39C1E88F270EC762006D2089 /* UIColor+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 39C1E88E270EC762006D2089 /* UIColor+Extension.swift */; }; + 39D13565273FDB9C00B1A148 /* Users.swift in Sources */ = {isa = PBXBuildFile; fileRef = 39D13564273FDB9C00B1A148 /* Users.swift */; }; + 39D13568273FDCB800B1A148 /* UserWithTokenRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 39D13567273FDCB800B1A148 /* UserWithTokenRequest.swift */; }; 39D2E130270B43DA00AD0889 /* UIFont+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 39D2E12F270B43DA00AD0889 /* UIFont+Extension.swift */; }; 39F5A3D0271461EA00191F94 /* BackCardCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 39F5A3CE271461EA00191F94 /* BackCardCell.swift */; }; 39F5A3D1271461EA00191F94 /* BackCardCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 39F5A3CF271461EA00191F94 /* BackCardCell.xib */; }; @@ -99,7 +100,6 @@ 3958F23B270FFBD500B100B2 /* Group.storyboard */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; path = Group.storyboard; sourceTree = ""; }; 3979709526FA0BE5003FB4F5 /* LoginViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LoginViewController.swift; sourceTree = ""; }; 3979709726FA0BF0003FB4F5 /* Login.storyboard */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; path = Login.storyboard; sourceTree = ""; }; - 3981148B273BEB8400E28630 /* User.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = User.swift; sourceTree = ""; }; 3981148D273BEBB300E28630 /* CardListEditRequest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CardListEditRequest.swift; sourceTree = ""; }; 3981148F273BEBCE00E28630 /* CardListRequest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CardListRequest.swift; sourceTree = ""; }; 399C55D62711921100845A54 /* CustomTabBarButton.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CustomTabBarButton.swift; sourceTree = ""; }; @@ -109,6 +109,8 @@ 399C55DE2711949D00845A54 /* CGPoint+Distance.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "CGPoint+Distance.swift"; sourceTree = ""; }; 399C55E02711C21800845A54 /* CustomTabBar.storyboard */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; path = CustomTabBar.storyboard; sourceTree = ""; }; 39C1E88E270EC762006D2089 /* UIColor+Extension.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UIColor+Extension.swift"; sourceTree = ""; }; + 39D13564273FDB9C00B1A148 /* Users.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Users.swift; sourceTree = ""; }; + 39D13567273FDCB800B1A148 /* UserWithTokenRequest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UserWithTokenRequest.swift; sourceTree = ""; }; 39D2E12F270B43DA00AD0889 /* UIFont+Extension.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UIFont+Extension.swift"; sourceTree = ""; }; 39F5A3CE271461EA00191F94 /* BackCardCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BackCardCell.swift; sourceTree = ""; }; 39F5A3CF271461EA00191F94 /* BackCardCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = BackCardCell.xib; sourceTree = ""; }; @@ -247,7 +249,8 @@ 3981148A273BEB7200E28630 /* User */ = { isa = PBXGroup; children = ( - 3981148B273BEB8400E28630 /* User.swift */, + 39D13564273FDB9C00B1A148 /* Users.swift */, + 39D13567273FDCB800B1A148 /* UserWithTokenRequest.swift */, ); path = User; sourceTree = ""; @@ -769,6 +772,7 @@ F8FC43BA26C022900033E151 /* ViewController.swift in Sources */, 39523E5F2701AA9000536900 /* CardListDataModel.swift in Sources */, 399C55D92711924500845A54 /* CustomTabBar.swift in Sources */, + 39D13568273FDCB800B1A148 /* UserWithTokenRequest.swift in Sources */, F8FC43AD26C020940033E151 /* TempClass.swift in Sources */, F84BAFB126FDB552004CA335 /* BackCardCreationCollectionViewCell.swift in Sources */, 39811490273BEBCE00E28630 /* CardListRequest.swift in Sources */, @@ -777,8 +781,8 @@ F8C83FC1272FA06E0009DF0D /* UserAPI.swift in Sources */, F8C83FC3272FA17B0009DF0D /* URL.swift in Sources */, F8C83FAE272F99940009DF0D /* MoyaLoggerPlugin.swift in Sources */, - 3981148C273BEB8400E28630 /* User.swift in Sources */, F84BAFAD26FDB543004CA335 /* FrontCardCreationCollectionViewCell.swift in Sources */, + 39D13565273FDB9C00B1A148 /* Users.swift in Sources */, F822E7A92709CEB60020452C /* Notification.swift in Sources */, F8C83FC5272FA2940009DF0D /* CardAPI.swift in Sources */, F8FC438626C01CDD0033E151 /* AppDelegate.swift in Sources */, diff --git a/NADA-iOS-forRelease/Sources/NetworkModel/User/UserWithTokenRequest.swift b/NADA-iOS-forRelease/Sources/NetworkModel/User/UserWithTokenRequest.swift new file mode 100644 index 00000000..e33482ce --- /dev/null +++ b/NADA-iOS-forRelease/Sources/NetworkModel/User/UserWithTokenRequest.swift @@ -0,0 +1,30 @@ +// +// UserWithTokenRequest.swift +// NADA-iOS-forRelease +// +// Created by 민 on 2021/11/13. +// + +import Foundation + +// MARK: - UserWithTokenRequest +struct UserWithTokenRequest: Codable { + let user: UserData +} + +// MARK: - User +struct UserData: Codable { + let userID: String + let token: Token + + enum CodingKeys: String, CodingKey { + case userID = "userId" + case token + } +} + +// MARK: - Token +struct Token: Codable { + let grantType, accessToken, refreshToken: String + let accessTokenExpiresIn: Int +} diff --git a/NADA-iOS-forRelease/Sources/NetworkModel/User/User.swift b/NADA-iOS-forRelease/Sources/NetworkModel/User/Users.swift similarity index 62% rename from NADA-iOS-forRelease/Sources/NetworkModel/User/User.swift rename to NADA-iOS-forRelease/Sources/NetworkModel/User/Users.swift index c426aa21..470effa0 100644 --- a/NADA-iOS-forRelease/Sources/NetworkModel/User/User.swift +++ b/NADA-iOS-forRelease/Sources/NetworkModel/User/Users.swift @@ -1,16 +1,21 @@ // -// User.swift +// Users.swift // NADA-iOS-forRelease // -// Created by 민 on 2021/11/07. +// Created by 민 on 2021/11/13. // import Foundation +// MARK: - DataClass +struct Users: Codable { + let user: User +} + // MARK: - User struct User: Codable { let userID: String - + enum CodingKeys: String, CodingKey { case userID = "userId" } diff --git a/NADA-iOS-forRelease/Sources/NetworkService/User/UserAPI.swift b/NADA-iOS-forRelease/Sources/NetworkService/User/UserAPI.swift index dd138a1d..7b182e7c 100644 --- a/NADA-iOS-forRelease/Sources/NetworkService/User/UserAPI.swift +++ b/NADA-iOS-forRelease/Sources/NetworkService/User/UserAPI.swift @@ -31,6 +31,54 @@ public class UserAPI { } } + func getUserTokenFetch(userID: String, completion: @escaping (NetworkResult) -> Void) { + userProvider.request(.userTokenFetch(userID: userID)) { (result) in + switch result { + case .success(let response): + let statusCode = response.statusCode + let data = response.data + + let networkResult = self.judgeGetUserTokenFetchStatus(by: statusCode, data) + completion(networkResult) + + case .failure(let err): + print(err) + } + } + } + + func postUserSignUp(request: User, completion: @escaping (NetworkResult) -> Void) { + userProvider.request(.userSignUp(request: request)) { (result) in + switch result { + case .success(let response): + let statusCode = response.statusCode + let data = response.data + + let networkResult = self.judgeStatus(by: statusCode, data) + completion(networkResult) + + case .failure(let err): + print(err) + } + } + } + + func deleteUser(userID: String, completion: @escaping (NetworkResult) -> Void) { + userProvider.request(.userDelete(userID: userID)) { (result) in + switch result { + case .success(let response): + let statusCode = response.statusCode + let data = response.data + + let networkResult = self.judgeStatus(by: statusCode, data) + completion(networkResult) + + case .failure(let err): + print(err) + } + } + } + private func judgeStatus(by statusCode: Int, _ data: Data) -> NetworkResult { let decoder = JSONDecoder() @@ -50,4 +98,24 @@ public class UserAPI { return .networkFail } } + + private func judgeGetUserTokenFetchStatus(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) + case 400..<500: + return .requestErr(decodedData.msg) + case 500: + return .serverErr + default: + return .networkFail + } + } } diff --git a/NADA-iOS-forRelease/Sources/NetworkService/User/UserSevice.swift b/NADA-iOS-forRelease/Sources/NetworkService/User/UserSevice.swift index f833c846..a029ef99 100644 --- a/NADA-iOS-forRelease/Sources/NetworkService/User/UserSevice.swift +++ b/NADA-iOS-forRelease/Sources/NetworkService/User/UserSevice.swift @@ -10,6 +10,9 @@ import Moya enum UserSevice { case userIDFetch(userID: String) + case userTokenFetch(userID: String) + case userSignUp(request: User) + case userDelete(userID: String) } extension UserSevice: TargetType { @@ -19,8 +22,14 @@ extension UserSevice: TargetType { var path: String { switch self { - case .userIDFetch(userID: let userID): + case .userIDFetch(let userID): return "/\(userID)/login" + case .userTokenFetch(let userID): + return "/auth/\(userID)/login" + case .userSignUp: + return "/register" + case .userDelete(let userID): + return "/\(userID)" } } @@ -28,6 +37,12 @@ extension UserSevice: TargetType { switch self { case .userIDFetch: return .get + case .userTokenFetch: + return .get + case .userSignUp: + return .post + case .userDelete: + return .delete } } @@ -39,6 +54,12 @@ extension UserSevice: TargetType { switch self { case .userIDFetch: return .requestPlain + case .userTokenFetch: + return .requestPlain + case .userSignUp(let request): + return .requestJSONEncodable(request) + case .userDelete: + return .requestPlain } } @@ -46,6 +67,12 @@ extension UserSevice: TargetType { switch self { case .userIDFetch: return ["Content-Type": "application/json"] + case .userTokenFetch: + return ["Content-Type": "application/json"] + case .userSignUp: + return ["Content-Type": "application/json"] + case .userDelete: + return ["Content-Type": "application/json"] } } } diff --git a/NADA-iOS-forRelease/Sources/SceneDelegate.swift b/NADA-iOS-forRelease/Sources/SceneDelegate.swift index 027f33cf..80c58496 100644 --- a/NADA-iOS-forRelease/Sources/SceneDelegate.swift +++ b/NADA-iOS-forRelease/Sources/SceneDelegate.swift @@ -21,7 +21,7 @@ class SceneDelegate: UIResponder, UIWindowSceneDelegate { window = UIWindow(frame: windowScene.coordinateSpace.bounds) window?.windowScene = windowScene - window?.rootViewController = UIStoryboard(name: Const.Storyboard.Name.customTabBar, bundle: nil).instantiateViewController(withIdentifier: Const.ViewController.Identifier.customTabBarController) + window?.rootViewController = UIStoryboard(name: Const.Storyboard.Name.login, bundle: nil).instantiateViewController(withIdentifier: Const.ViewController.Identifier.loginViewController) // window?.rootViewController = TabBarViewController() window?.makeKeyAndVisible() diff --git a/NADA-iOS-forRelease/Sources/ViewControllers/Login/LoginViewController.swift b/NADA-iOS-forRelease/Sources/ViewControllers/Login/LoginViewController.swift index 2cc24b20..a3843792 100644 --- a/NADA-iOS-forRelease/Sources/ViewControllers/Login/LoginViewController.swift +++ b/NADA-iOS-forRelease/Sources/ViewControllers/Login/LoginViewController.swift @@ -14,7 +14,10 @@ class LoginViewController: UIViewController { super.viewDidLoad() // FIXME: - 서버 연결 테스트, 추후 위치 수정 필요 - getUserIDFetchWithAPI(userID: "nada") + // getUserIDFetchWithAPI(userID: "nada") + // getUserTokenFetchWithAPI(userID: "nada") + // postUserSignUpWithAPI(request: User(userID: "nada3")) + // deleteUserWithAPI(userID: "nada3") } // MARK: - IBAction Properties @@ -47,4 +50,56 @@ extension LoginViewController { } } } + + func getUserTokenFetchWithAPI(userID: String) { + UserAPI.shared.getUserTokenFetch(userID: userID) { response in + switch response { + case .success(let data): + print(data) + case .requestErr(let message): + print("getUserTokenFetchWithAPI - requestErr", message) + case .pathErr: + print("getUserTokenFetchWithAPI - pathErr") + case .serverErr: + print("getUserTokenFetchWithAPI - serverErr") + case .networkFail: + print("getUserTokenFetchWithAPI - networkFail") + } + } + } + + func postUserSignUpWithAPI(request: User) { + UserAPI.shared.postUserSignUp(request: request) { response in + switch response { + case .success: + print("postUserSignUpWithAPI - success") + case .requestErr(let message): + print("postUserSignUpWithAPI - requestErr: \(message)") + case .pathErr: + print("postUserSignUpWithAPI - pathErr") + case .serverErr: + print("postUserSignUpWithAPI - serverErr") + case .networkFail: + print("postUserSignUpWithAPI - networkFail") + } + } + } + + // FIXME: - 계정 탈퇴 네트워크 함수 추후 위치 수정 + func deleteUserWithAPI(userID: String) { + UserAPI.shared.deleteUser(userID: userID) { response in + switch response { + case .success: + print("deleteUserWithAPI - success") + case .requestErr(let message): + print("deleteUserWithAPI - requestErr: \(message)") + case .pathErr: + print("deleteUserWithAPI - pathErr") + case .serverErr: + print("deleteUserWithAPI - serverErr") + case .networkFail: + print("deleteUserWithAPI - networkFail") + } + } + } } From 7c279fb6f50f66148d6a387c68d0c610fb198377 Mon Sep 17 00:00:00 2001 From: MinjaeLee <2alswo7@khu.ac.kr> Date: Sun, 14 Nov 2021 13:48:48 +0900 Subject: [PATCH 2/2] =?UTF-8?q?[FEAT]=20#63=20-=20=EC=86=8C=EC=85=9C=20?= =?UTF-8?q?=EB=A1=9C=EA=B7=B8=EC=9D=B8=20=ED=86=A0=ED=81=B0=20=EC=84=9C?= =?UTF-8?q?=EB=B2=84=20=ED=85=8C=EC=8A=A4=ED=8A=B8=20=EC=99=84=EB=A3=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- NADA-iOS-forRelease/Sources/SceneDelegate.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/NADA-iOS-forRelease/Sources/SceneDelegate.swift b/NADA-iOS-forRelease/Sources/SceneDelegate.swift index 80c58496..027f33cf 100644 --- a/NADA-iOS-forRelease/Sources/SceneDelegate.swift +++ b/NADA-iOS-forRelease/Sources/SceneDelegate.swift @@ -21,7 +21,7 @@ class SceneDelegate: UIResponder, UIWindowSceneDelegate { window = UIWindow(frame: windowScene.coordinateSpace.bounds) window?.windowScene = windowScene - window?.rootViewController = UIStoryboard(name: Const.Storyboard.Name.login, bundle: nil).instantiateViewController(withIdentifier: Const.ViewController.Identifier.loginViewController) + window?.rootViewController = UIStoryboard(name: Const.Storyboard.Name.customTabBar, bundle: nil).instantiateViewController(withIdentifier: Const.ViewController.Identifier.customTabBarController) // window?.rootViewController = TabBarViewController() window?.makeKeyAndVisible()