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"] } 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() + } + } + } +}