Skip to content

Commit 5972f43

Browse files
committed
Refactor: 온보딩 UserState 추가 및 화면 분기처리
1 parent babf690 commit 5972f43

7 files changed

Lines changed: 42 additions & 28 deletions

File tree

Projects/App/Sources/SceneDelegate.swift

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -54,25 +54,25 @@ extension SceneDelegate: SplashViewDelegate {
5454
guard let userDataRepository = DIContainer.shared.resolve(type: UserDataRepositoryProtocol.self)
5555
else { fatalError("userDataRepository 의존성이 등록되지 않았습니다.") }
5656

57-
guard let onboardingRepository = DIContainer.shared.resolve(type: OnboardingRepositoryProtocol.self)
58-
else { fatalError("onboardingRepository 의존성이 등록되지 않았습니다.") }
59-
6057
Task { @MainActor in
6158
let userState = await userDataRepository.reissueToken()
6259
switch userState {
6360
case .user:
64-
if onboardingRepository.isOnboardingDone() {
65-
window?.rootViewController = TabBarView()
66-
} else {
67-
guard let onboardingViewModel = DIContainer.shared.resolve(type: OnboardingViewModel.self) else {
68-
fatalError("onboardingViewModel 의존성이 등록되지 않았습니다.")
69-
}
70-
let onboardingView = OnboardingView(viewModel: onboardingViewModel, onboarding: .time)
71-
let navigationController = UINavigationController(rootViewController: onboardingView)
72-
window?.rootViewController = navigationController
73-
}
61+
window?.rootViewController = TabBarView()
62+
7463
case .guest, nil:
75-
let introView = IntroView()
64+
guard let loginViewModel = DIContainer.shared.resolve(type: LoginViewModel.self)
65+
else { fatalError("loginViewModel 의존성이 등록되지 않았습니다.") }
66+
67+
let loginView = LoginViewController(viewModel: loginViewModel)
68+
let navigationController = UINavigationController(rootViewController: loginView)
69+
window?.rootViewController = navigationController
70+
71+
case .onboarding:
72+
guard let introViewModel = DIContainer.shared.resolve(type: IntroViewModel.self)
73+
else { fatalError("introViewModel 의존성이 등록되지 않았습니다.") }
74+
75+
let introView = IntroViewController(viewModel: introViewModel)
7676
let navigationController = UINavigationController(rootViewController: introView)
7777
window?.rootViewController = navigationController
7878
}

Projects/Domain/Sources/Entity/Enum/UserState.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,4 +8,5 @@
88
public enum UserState: String {
99
case guest = "GUEST"
1010
case user = "USER"
11+
case onboarding = "ONBOARDING"
1112
}

Projects/Presentation/Sources/Common/PresentationDependencyAssembler.swift

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,8 +41,11 @@ public struct PresentationDependencyAssembler: DependencyAssemblerProtocol {
4141
return LoginViewModel(loginUseCase: loginUseCase)
4242
}
4343

44-
DIContainer.shared.register(type: OnboardingViewModel.self) { _ in
45-
return OnboardingViewModel()
44+
DIContainer.shared.register(type: OnboardingViewModel.self) { container in
45+
guard let userDataRepository = container.resolve(type: UserDataRepositoryProtocol.self)
46+
else { fatalError("userDataRepository 의존성이 등록되지 않았습니다.") }
47+
48+
return OnboardingViewModel(userDataRepository: userDataRepository)
4649
}
4750

4851
DIContainer.shared.register(type: RecommendedRoutineViewModel.self) { container in
@@ -88,5 +91,12 @@ public struct PresentationDependencyAssembler: DependencyAssemblerProtocol {
8891
DIContainer.shared.register(type: SettingViewModel.self) { _ in
8992
return SettingViewModel()
9093
}
94+
95+
DIContainer.shared.register(type: IntroViewModel.self) { container in
96+
guard let userDataRepository = container.resolve(type: UserDataRepositoryProtocol.self)
97+
else { fatalError("userDataRepository 의존성이 등록되지 않았습니다.") }
98+
99+
return IntroViewModel(userDataRepository: userDataRepository)
100+
}
91101
}
92102
}

Projects/Presentation/Sources/Login/View/LoginViewController.swift

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -151,11 +151,11 @@ public final class LoginViewController: BaseViewController<LoginViewModel> {
151151
}
152152

153153
case .onboarding:
154-
guard let onboardingViewModel = DIContainer.shared.resolve(type: OnboardingViewModel.self)
155-
else { fatalError("onboardingViewModel 의존성이 등록되지 않았습니다.") }
154+
guard let introViewModel = DIContainer.shared.resolve(type: IntroViewModel.self)
155+
else { fatalError("introViewModel 의존성이 등록되지 않았습니다.") }
156156

157-
let onboardingView = OnboardingViewController(viewModel: onboardingViewModel, onboarding: .time)
158-
self.navigationController?.pushViewController(onboardingView, animated: true)
157+
let introViewController = IntroViewController(viewModel: introViewModel)
158+
self.navigationController?.pushViewController(introViewController, animated: true)
159159
}
160160
}
161161
.store(in: &cancellables)

Projects/Presentation/Sources/Login/ViewModel/LoginViewModel.swift

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,16 +9,16 @@ import Combine
99
import Domain
1010
import Shared
1111

12-
final class LoginViewModel: ViewModel {
13-
enum Input {
12+
public final class LoginViewModel: ViewModel {
13+
public enum Input {
1414
case kakaoLogin
1515
case appleLogin(nickname: String?, authToken: String)
1616
case toggleAgreement(termsType: TermsType)
1717
case toggleTotalAgreement
1818
case submitAgreement
1919
}
2020

21-
struct Output {
21+
public struct Output {
2222
let loginResultPublisher: AnyPublisher<UserState?, Never>
2323
let agreementStatePublisher: AnyPublisher<TermsAgreementState, Never>
2424
let agreementResultPublisher: AnyPublisher<Bool, Never>
@@ -40,7 +40,7 @@ final class LoginViewModel: ViewModel {
4040
)
4141
}
4242

43-
func action(input: Input) {
43+
public func action(input: Input) {
4444
switch input {
4545
case .kakaoLogin:
4646
Task {

Projects/Presentation/Sources/MyPage/View/MypageView.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -172,7 +172,7 @@ extension MypageView: UITableViewDataSource {
172172
fatalError("onboardingViewModel 의존성이 등록되지 않았습니다.")
173173
}
174174

175-
let onboardingView = OnboardingView(
175+
let onboardingView = OnboardingViewController(
176176
viewModel: onboardingViewModel,
177177
onboarding: .time,
178178
isFromMypage: true)

Projects/Presentation/Sources/Setting/View/SettingView.swift

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -110,7 +110,7 @@ final class SettingView: BaseViewController<SettingViewModel> {
110110

111111
override func viewWillAppear(_ animated: Bool) {
112112
super.viewWillAppear(animated)
113-
configureNavigationBar(navigationStyle: .withBackButton(title: "설정"))
113+
// configureNavigationBar(navigationStyle: .withBackButton(title: "설정"))
114114
}
115115

116116
override func configureAttribute() {
@@ -209,8 +209,11 @@ final class SettingView: BaseViewController<SettingViewModel> {
209209
let window = sceneDelegate.window
210210
else { return }
211211

212-
let introView = IntroView()
213-
let navigationController = UINavigationController(rootViewController: introView)
212+
guard let loginViewModel = DIContainer.shared.resolve(type: LoginViewModel.self)
213+
else { fatalError("loginViewModel 의존성이 등록되지 않았습니다.") }
214+
215+
let loginView = LoginViewController(viewModel: loginViewModel)
216+
let navigationController = UINavigationController(rootViewController: loginView)
214217
window?.rootViewController = navigationController
215218
window?.makeKeyAndVisible()
216219
}

0 commit comments

Comments
 (0)