From d9b9616ad1d4971972378d6b66109cc82902e4cf Mon Sep 17 00:00:00 2001 From: dlwogus0128 <79050615+dlwogus0128@users.noreply.github.com> Date: Thu, 12 Jan 2023 14:45:25 +0900 Subject: [PATCH 1/2] =?UTF-8?q?[Feat]=20#90=20-=20=EB=8B=89=EB=84=A4?= =?UTF-8?q?=EC=9E=84=20=EB=B3=80=EA=B2=BD=EC=9D=84=20=EC=9C=84=ED=95=9C=20?= =?UTF-8?q?=EB=9D=BC=EC=9A=B0=ED=84=B0=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Network/Router/MyPageRouter/MyPageRouter.swift | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/Runnect-iOS/Runnect-iOS/Network/Router/MyPageRouter/MyPageRouter.swift b/Runnect-iOS/Runnect-iOS/Network/Router/MyPageRouter/MyPageRouter.swift index ac14588a..36ab07d9 100644 --- a/Runnect-iOS/Runnect-iOS/Network/Router/MyPageRouter/MyPageRouter.swift +++ b/Runnect-iOS/Runnect-iOS/Network/Router/MyPageRouter/MyPageRouter.swift @@ -14,6 +14,7 @@ enum MyPageRouter { case getUploadedCourseInfo case getActivityRecordInfo case getGoalRewardInfo + case updateUserNickname(nickname: String) } extension MyPageRouter: TargetType { @@ -27,7 +28,7 @@ extension MyPageRouter: TargetType { var path: String { switch self { - case .getMyPageInfo: + case .getMyPageInfo, .updateUserNickname: return "/user" case .getUploadedCourseInfo: return "/public-course/user" @@ -42,6 +43,8 @@ extension MyPageRouter: TargetType { switch self { case .getMyPageInfo, .getUploadedCourseInfo, .getActivityRecordInfo, .getGoalRewardInfo: return .get + case .updateUserNickname: + return .patch } } @@ -49,12 +52,14 @@ extension MyPageRouter: TargetType { switch self { case .getMyPageInfo, .getUploadedCourseInfo, .getActivityRecordInfo, .getGoalRewardInfo: return .requestPlain + case .updateUserNickname(let nickname): + return .requestParameters(parameters: ["nickname": nickname], encoding: JSONEncoding.default) } } var headers: [String: String]? { switch self { - case .getMyPageInfo, .getUploadedCourseInfo, .getActivityRecordInfo, .getGoalRewardInfo: + case .getMyPageInfo, .getUploadedCourseInfo, .getActivityRecordInfo, .getGoalRewardInfo, .updateUserNickname: return ["Content-Type": "application/json", "machineId": "1"] } From d377626bb6490224c196abf7c7f9d8e3eccf550e Mon Sep 17 00:00:00 2001 From: dlwogus0128 <79050615+dlwogus0128@users.noreply.github.com> Date: Thu, 12 Jan 2023 15:21:07 +0900 Subject: [PATCH 2/2] =?UTF-8?q?[Feat]=20#90=20-=20=EB=8B=89=EB=84=A4?= =?UTF-8?q?=EC=9E=84=20=EB=B3=80=EA=B2=BD=20API=20=EC=97=B0=EA=B2=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Presentation/MyPage/VC/MyPageVC.swift | 7 +++ .../MyPage/VC/NicknameEditorVC.swift | 50 ++++++++++++++++++- 2 files changed, 55 insertions(+), 2 deletions(-) diff --git a/Runnect-iOS/Runnect-iOS/Presentation/MyPage/VC/MyPageVC.swift b/Runnect-iOS/Runnect-iOS/Presentation/MyPage/VC/MyPageVC.swift index e6dd9423..fbed9a97 100644 --- a/Runnect-iOS/Runnect-iOS/Presentation/MyPage/VC/MyPageVC.swift +++ b/Runnect-iOS/Runnect-iOS/Presentation/MyPage/VC/MyPageVC.swift @@ -150,6 +150,7 @@ extension MyPageVC { private func pushToNicknameEditorVC() { let nicknameEditorVC = NicknameEditorVC() + nicknameEditorVC.delegate = self nicknameEditorVC.modalPresentationStyle = .overFullScreen self.present(nicknameEditorVC, animated: false) } @@ -330,6 +331,12 @@ extension MyPageVC { } } +extension MyPageVC: NicknameEditorVCDelegate { + func nicknameEditDidSuccess() { + getMyPageInfo() + } +} + // MARK: - Network extension MyPageVC { diff --git a/Runnect-iOS/Runnect-iOS/Presentation/MyPage/VC/NicknameEditorVC.swift b/Runnect-iOS/Runnect-iOS/Presentation/MyPage/VC/NicknameEditorVC.swift index eda672ee..a56a5bf0 100644 --- a/Runnect-iOS/Runnect-iOS/Presentation/MyPage/VC/NicknameEditorVC.swift +++ b/Runnect-iOS/Runnect-iOS/Presentation/MyPage/VC/NicknameEditorVC.swift @@ -6,11 +6,25 @@ // import UIKit + import SnapKit import Then +import Moya + +protocol NicknameEditorVCDelegate: AnyObject { + func nicknameEditDidSuccess() +} final class NicknameEditorVC: UIViewController { + // MARK: - Properties + + private var nicknameEditorProvider = MoyaProvider( + plugins: [NetworkLoggerPlugin(verbose: true)] + ) + + weak var delegate: NicknameEditorVCDelegate? + // MARK: - UI Components private let editorContentView = UIView().then { @@ -54,11 +68,11 @@ final class NicknameEditorVC: UIViewController { // MARK: - Method extension NicknameEditorVC { - override func touchesBegan(_ touches: Set, with event: UIEvent?) { super.touchesBegan(touches, with: event) if let touch = touches.first, touch.view == self.view { dismiss(animated: false) + didNicknameReturn() } } @@ -81,6 +95,11 @@ extension NicknameEditorVC { @objc private func popToPreviousVC() { self.navigationController?.popViewController(animated: true) } + + @objc private func didNicknameReturn() { + guard let nickname = nickNameTextField.text else { return } + self.updateUserNickname(nickname: nickname) + } } extension NicknameEditorVC { @@ -126,8 +145,35 @@ extension NicknameEditorVC { extension NicknameEditorVC: UITextFieldDelegate { func textFieldShouldReturn(_ textField: UITextField) -> Bool { if textField == self.nickNameTextField { - self.dismiss(animated: false) + didNicknameReturn() } return true } } + +// MARK: - Network + +extension NicknameEditorVC { + func updateUserNickname(nickname: String) { + LoadingIndicator.showLoading() + nicknameEditorProvider.request(.updateUserNickname(nickname: nickname)) { [weak self] response in + LoadingIndicator.hideLoading() + guard let self = self else { return } + switch response { + case .success(let result): + let status = result.statusCode + if 200..<300 ~= status { + self.delegate?.nicknameEditDidSuccess() + self.dismiss(animated: false) + } + if status >= 400 { + print("400 error") + self.showNetworkFailureToast() + } + case .failure(let error): + print(error.localizedDescription) + self.showNetworkFailureToast() + } + } + } +}