diff --git a/iOS/Projects/App/WeTri/Sources/CommonScene/Coordinator/AppCoordinator.swift b/iOS/Projects/App/WeTri/Sources/CommonScene/Coordinator/AppCoordinator.swift index 8e970e38..647c18be 100644 --- a/iOS/Projects/App/WeTri/Sources/CommonScene/Coordinator/AppCoordinator.swift +++ b/iOS/Projects/App/WeTri/Sources/CommonScene/Coordinator/AppCoordinator.swift @@ -107,7 +107,7 @@ extension AppCoordinator: SplashCoordinatorFinishDelegate { // MARK: SignUpFeatureCoordinatorFinishDelegate extension AppCoordinator: SignUpFeatureCoordinatorFinishDelegate { - func signUpFeatureCooridnatorDidFinished() { + func signUpFeatureCoordinatorDidFinished() { showTabBarFlow() } } diff --git a/iOS/Projects/Features/SignUp/Project.swift b/iOS/Projects/Features/SignUp/Project.swift index bce44a95..491552f4 100644 --- a/iOS/Projects/Features/SignUp/Project.swift +++ b/iOS/Projects/Features/SignUp/Project.swift @@ -7,7 +7,7 @@ let project = Project.makeModule( targets: .feature( .signUp, testingOptions: [.unitTest], - dependencies: [.trinet, .keychain, .combineCocoa, .coordinator, .log, .designSystem, .commonNetworkingKeyManager, .auth, .downSampling], + dependencies: [.trinet, .keychain, .combineCocoa, .coordinator, .log, .designSystem, .commonNetworkingKeyManager, .auth, .downSampling, .userInformationManager], testDependencies: [], resources: "Resources/**" ) diff --git a/iOS/Projects/Features/SignUp/Sources/Domain/UseCase/SignUpUserDefaultsManagerUseCase.swift b/iOS/Projects/Features/SignUp/Sources/Domain/UseCase/SignUpUserDefaultsManagerUseCase.swift new file mode 100644 index 00000000..0f81b0db --- /dev/null +++ b/iOS/Projects/Features/SignUp/Sources/Domain/UseCase/SignUpUserDefaultsManagerUseCase.swift @@ -0,0 +1,38 @@ +// +// SignUpUserDefaultsManagerUseCase.swift +// SignUpFeature +// +// Created by MaraMincho on 12/10/23. +// Copyright © 2023 kr.codesquad.boostcamp8. All rights reserved. +// + +import Foundation +import UserInformationManager + +// MARK: - SignUpUserDefaultsManagerUseCaseRepresentable + +protocol SignUpUserDefaultsManagerUseCaseRepresentable { + func setSignUpUserInformation(signUpUser: SignUpUser) +} + +// MARK: - SignUpUserDefaultsManagerUseCase + +struct SignUpUserDefaultsManagerUseCase { + let manager = UserInformationManager.shared + func setSignUpUserInformationAtUserDefaults(_ signUpUserInformation: SignUpUser) { + // UserDefaults에 nickName을 저장합니다. + manager.setUserName(signUpUserInformation.nickname) + + // UserDefaults에 ProfileImage URL을 저장합니다. + manager.setUserProfileImageURLString(url: signUpUserInformation.profileImage) + + // UserDefaults에 ProfileImage Data를 저장합니다. + manager.setUserProfileImageData(url: signUpUserInformation.profileImage) + + // UserDefaults에 생년 월일을 저장합니다. + let formatter = DateFormatter() + formatter.dateFormat = "yyyy-MM-dd" + let date = formatter.date(from: signUpUserInformation.birthDate) + manager.setBirthDayDate(date) + } +} diff --git a/iOS/Projects/Features/SignUp/Sources/Presentation/Common/Coordinator/SignUpFeatureCoordinator.swift b/iOS/Projects/Features/SignUp/Sources/Presentation/Common/Coordinator/SignUpFeatureCoordinator.swift index e15a8ba7..48f09af1 100644 --- a/iOS/Projects/Features/SignUp/Sources/Presentation/Common/Coordinator/SignUpFeatureCoordinator.swift +++ b/iOS/Projects/Features/SignUp/Sources/Presentation/Common/Coordinator/SignUpFeatureCoordinator.swift @@ -15,7 +15,7 @@ import UIKit // MARK: - SignUpFeatureCoordinatorFinishDelegate public protocol SignUpFeatureCoordinatorFinishDelegate: AnyObject { - func signUpFeatureCooridnatorDidFinished() + func signUpFeatureCoordinatorDidFinished() } // MARK: - SignUpFeatureCoordinator @@ -47,7 +47,7 @@ public final class SignUpFeatureCoordinator: SignUpFeatureCoordinating { public func finish() { finishDelegate?.flowDidFinished(childCoordinator: self) - signUpFeatureFinishDelegate?.signUpFeatureCooridnatorDidFinished() + signUpFeatureFinishDelegate?.signUpFeatureCoordinatorDidFinished() } public func pushSingUpContainerViewController() { diff --git a/iOS/Projects/Shared/UserInformationManager/Sources/UserInformationManager.swift b/iOS/Projects/Shared/UserInformationManager/Sources/UserInformationManager.swift index 0007bce2..9b5c7a8c 100644 --- a/iOS/Projects/Shared/UserInformationManager/Sources/UserInformationManager.swift +++ b/iOS/Projects/Shared/UserInformationManager/Sources/UserInformationManager.swift @@ -28,7 +28,7 @@ public final class UserInformationManager { case userNickName = "UserNickName" case userProfileImage = "UserProfileImage" case birthDayDate = "BirthDayDate" - case userProfileImageURL = "UserImageURL" + case userProfileImageURL = "UserProfileImageURL" } } @@ -45,29 +45,50 @@ public extension UserInformationManager { defaults.setValue(nameData, forKey: UserInformation.userNickName.rawValue) } + func setUserProfileImageData(url: URL?) { + guard let url else { + return + } + + DispatchQueue.global().async { [weak self] in + guard let data = try? Data(contentsOf: url) else { + return + } + self?.setUserProfileImageData(data) + } + } + func setUserProfileImageData(_ imageData: Data) { defaults.setValue(imageData, forKey: UserInformation.userNickName.rawValue) } - func setBirthDayDate(_ date: Date) { + func setBirthDayDate(_ date: Date?) { + let date = date ?? .now let dateString = dateFormatter.string(from: date) let data = Data(dateString.utf8) defaults.setValue(data, forKey: UserInformation.birthDayDate.rawValue) } + + func setUserProfileImageURLString(url: URL?) { + guard let urlString = url?.absoluteString else { + return + } + let data = Data(urlString.utf8) + defaults.setValue(data, forKey: UserInformation.userProfileImageURL.rawValue) + } } /// Defaults이미지를 저장합니다. private extension UserInformationManager { - /// 만약 userDefaults에 값이 존재한다면 fakeData를 설정합니다. + /// 만약 userDefaults에 값이 존재하지 않는다면 fakeData를 설정합니다. func setDefaultsData() { -// guard -// data(.userNickName) == nil, -// data(.birthDayDate) == nil, -// data(.userProfileImage) == nil, -// data(.userProfileImageURL) == nil -// else { -// return -// } + if + data(.userNickName) != nil || + data(.birthDayDate) != nil || + data(.userProfileImage) != nil || + data(.userProfileImageURL) != nil { + return + } let date = Date.now let formatter = DateFormatter() @@ -79,9 +100,8 @@ private extension UserInformationManager { let name = Data("슈퍼맨".utf8) defaults.setValue(name, forKey: UserInformation.userNickName.rawValue) - let imageURLString = "https://www.catster.com/wp-content/uploads/2017/08/Pixiebob-cat.jpg" - let imageURLData = Data(imageURLString.utf8) - defaults.setValue(imageURLData, forKey: UserInformation.userProfileImageURL.rawValue) + let url = URL(string: "https://www.catster.com/wp-content/uploads/2017/08/Pixiebob-cat.jpg") + setUserProfileImageURLString(url: url) guard let path = Bundle(for: Self.self).path(forResource: DefaultsKey.imageKey, ofType: DefaultsKey.imageType),