Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix: 로그인 시 메인화면 진입 못하는 이슈 수정해요 #665

Merged
merged 4 commits into from
Sep 30, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ protocol AccountSignInNavigatorProtocol: BaseNavigator {
func toMain()
func toSignUp()
func toJoinFamily()
func toOnboarding()
}

final class AccountSignInNavigator: AccountSignInNavigatorProtocol {
Expand All @@ -37,4 +38,9 @@ final class AccountSignInNavigator: AccountSignInNavigatorProtocol {
let vc = JoinFamilyViewControllerWrapper().viewController
navigationController.setViewControllers([vc], animated: false)
}

func toOnboarding() {
let vc = OnboardingViewControllerWrapper().viewController
navigationController.setViewControllers([vc], animated: false)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,9 @@ public final class AccountSignInReactor: Reactor {
public var initialState: State
@Injected var fetchIsFirstOnboardingUseCase: any FetchIsFirstOnboardingUseCaseProtocol
private var accountRepository: AccountImpl = AccountRepository()
private let meUseCase: MeUseCaseProtocol = MeUseCase(meRepository: MeAPIs.Worker())
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

요거는 @injected 사용해도 되는거 아닌가용??

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

아 이부분 수정하겠습니다. :)

private let fcmUseCase: FCMUseCaseProtocol = FCMUseCase(FCMRepository: MeAPIs.Worker())
@Navigator var signInNavigator: AccountSignInNavigatorProtocol
private let disposeBag = DisposeBag()

public enum Action {
Expand All @@ -26,59 +28,49 @@ public final class AccountSignInReactor: Reactor {
}

public enum Mutation {
case kakaoLogin(Bool)
case appleLogin(Bool)
case setIsFirstOnboarding(Bool)

}

public struct State {
var pushAccountSingUpVC: Bool
@Pulse var isFirstOnboarding: Bool
}

init(/*accountRepository: AccountRepository, fcmUseCase: FCMUseCaseProtocol*/) {
// self.accountRepository = accountRepository
// self.fcmUseCase = fcmUseCase
self.initialState = State(
pushAccountSingUpVC: false,
isFirstOnboarding: false
)
}
}

extension AccountSignInReactor {
public func mutate(action: Action) -> Observable<Mutation> {
let isFirstOnboarding = self.fetchIsFirstOnboardingUseCase.execute() == nil ? false : true
switch action {
case .kakaoLoginTapped(let sns, let vc):
return accountRepository.kakaoLogin(with: sns, vc: vc)
.flatMap { result -> Observable<Mutation> in
.withUnretained(self)
.flatMap { owner, result -> Observable<Mutation> in
switch result {
case .success:
self.saveFCM()
return .concat(
.just(.kakaoLogin(true)),
.just(.setIsFirstOnboarding(isFirstOnboarding))
)
owner.saveFCM()
return owner.transitionViewController()
case .failed:
return .just(.kakaoLogin(false))
return .empty()
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

여기 failed일 때 toastMessage라도 띄워주는게 어떨까요?

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

요 부분은 코드 싹다 리팩토링할 때 같이 하는게 좋아보여요

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

이것도 고민했는데 사실 저희가 저 코드는 수정할 코드이기도 하고

  • failed는 해당 소셜 계정 로그인 실패지만
  • 추후에 서버에서 주는 ResponseError를 보여주는 게 더 명확할 것 같다고 생각해서 Mutation에 추가 안 했어요

}
}


case .appleLoginTapped(let sns, let vc):
return accountRepository.appleLogin(with: sns, vc: vc)
.flatMap { result -> Observable<Mutation> in
.withUnretained(self)
.flatMap { owner, result -> Observable<Mutation> in
switch result {
case .success:
self.saveFCM()
return .concat(
.just(.appleLogin(true)),
.just(.setIsFirstOnboarding(isFirstOnboarding))
)
return owner.transitionViewController()
case .failed:
return .just(.appleLogin(false))
return .empty()
}
}
}
Expand All @@ -87,10 +79,6 @@ extension AccountSignInReactor {
public func reduce(state: State, mutation: Mutation) -> State {
var newState = state
switch mutation {
case .kakaoLogin(let result):
newState.pushAccountSingUpVC = result
case .appleLogin(let result):
newState.pushAccountSingUpVC = result
case let .setIsFirstOnboarding(isFirstOnboarding):
newState.isFirstOnboarding = isFirstOnboarding
}
Expand All @@ -112,3 +100,40 @@ extension AccountSignInReactor {
}
}
}


extension AccountSignInReactor {
private func transitionViewController() -> Observable<Mutation> {
let isFirstOnboarding = self.fetchIsFirstOnboardingUseCase.execute()
return App.Repository.token.accessToken
.skip(1)
.withUnretained(self)
.flatMapLatest { owner, token -> Observable<Mutation> in
guard let token,
let isTemporaryToken = token.isTemporaryToken else {
return .empty()
}

if isTemporaryToken {
owner.signInNavigator.toSignUp()
return .empty()
}

return owner.meUseCase.getMemberInfo()
.asObservable()
.flatMap { memberInfo -> Observable<Mutation> in
if isFirstOnboarding {
if memberInfo?.familyId == nil {
owner.signInNavigator.toJoinFamily()
return .empty()
}
owner.signInNavigator.toMain()
return .empty()
}
owner.signInNavigator.toOnboarding()
return .empty()
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

결국 다 return .empty()하시는 것 같은데
마지막에 return .empty()하나 써주시고 중간에 if 분기처리만 진행해주시면 될 것 같아여!

}
}
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -119,39 +119,6 @@ public final class AccountSignInViewController: BaseViewController<AccountSignIn
.map { Reactor.Action.appleLoginTapped(.apple, self) }
.bind(to: reactor.action)
.disposed(by: disposeBag)


Observable
.combineLatest(
App.Repository.token.accessToken.distinctUntilChanged(),
reactor.pulse(\.$isFirstOnboarding).distinctUntilChanged()
)
.skip(1)
.observe(on: RxScheduler.main)
.bind(with: self) { owner, response in
let (token, isFirstOnboarding) = response
owner.showNextPage(token: token, isFirstOnboarding)
}
.disposed(by: disposeBag)
}
}

extension AccountSignInViewController {
private func showNextPage(token: AccessToken?, _ isFirstOnboarding: Bool) {
@Navigator var signInNavigator: AccountSignInNavigatorProtocol
guard let token = token, let isTemporaryToken = token.isTemporaryToken else { return }
if isTemporaryToken {
signInNavigator.toSignUp()
return
}

if isFirstOnboarding || isTemporaryToken == false {
if App.Repository.member.familyId.value == nil {
signInNavigator.toJoinFamily()
return
}
signInNavigator.toMain()
return
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -98,7 +98,6 @@ final class MainViewReactor: Reactor {
@Injected var fetchMainUseCase: FetchMainUseCaseProtocol
@Injected var fetchMainNightUseCase: FetchNightMainViewUseCaseProtocol
@Injected var pickUseCase: PickUseCaseProtocol
@Injected var updateIsFirstOnboardingUseCase: any UpdateIsFirstOnboardingUseCaseProtocol
@Injected var checkMissionAlertShowUseCase: CheckMissionAlertShowUseCaseProtocol
@Injected var checkFamilyManagementUseCase: FetchIsFirstFamilyManagementUseCaseProtocol
@Injected var saveFamilyManagementUseCase: UpdateFamilyManagementUseCaseProtocol
Expand Down Expand Up @@ -170,7 +169,6 @@ extension MainViewReactor {
}
case .calculateTime:
let (isInTime, time) = self.calculateRemainingTime()
self.updateIsFirstOnboardingUseCase.execute(true)
if isInTime {
return Observable.concat([
.just(.setInTime(true)),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ public final class OnBoardingReactor: Reactor {

public var initialState: State = State()
@Injected var familyUseCase: FamilyUseCaseProtocol
@Injected var updateIsFirstOnboardingUseCase: any UpdateIsFirstOnboardingUseCaseProtocol

public enum Action {
case permissionTapped
Expand All @@ -40,7 +41,8 @@ extension OnBoardingReactor {
public func mutate(action: Action) -> Observable<Mutation> {
switch action {
case .permissionTapped:
Observable.create { observer in
Observable.create { [weak self] observer in
self?.updateIsFirstOnboardingUseCase.execute(true)
MPEvent.Account.invitedGroupFinished.track(with: nil)
UNUserNotificationCenter.current().requestAuthorization(
options: [.alert, .badge, .sound],
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,7 @@ final class AccountResignViewReactor: Reactor {
.withUnretained(self)
.flatMap { owner, entity -> Observable<Mutation> in
if entity.isSuccess {
owner.updateIsFirstOnboardingUseCase.execute(nil)
owner.updateIsFirstOnboardingUseCase.execute(false)
return .concat(
.just(.setLoading(true)),
.just(.setResignEntity(entity.isSuccess)),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ extension MyRepository {
}

public func updateIsFirstOnboarding(_ isFirstOnboarding: Bool?) {
appUserDefaults.saveIsFirstOnboarding(isFirstOnboarding)
return appUserDefaults.saveIsFirstOnboarding(isFirstOnboarding)
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -98,10 +98,7 @@ final public class AppUserDefaults: AppUserDefaultsType {
}

public func loadIsFirstOnboarding() -> Bool? {
guard let isFirstOnboarding: Bool = userDefaults[.isFirstOnboarding] else {
return nil
}
return isFirstOnboarding
return userDefaults[.isFirstOnboarding]
}

// MARK: - FamilyManagement
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ import Foundation


public protocol FetchIsFirstOnboardingUseCaseProtocol {
func execute() -> Bool?
func execute() -> Bool
}


Expand All @@ -21,7 +21,10 @@ public final class FetchIsFirstOnboardingUseCase: FetchIsFirstOnboardingUseCaseP
self.myRepository = myRepository
}

public func execute() -> Bool? {
return myRepository.fetchIsFirstOnboarding()
public func execute() -> Bool {
guard let isFirstOnboarding = myRepository.fetchIsFirstOnboarding() else {
return false
}
return isFirstOnboarding
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ import Foundation


public protocol UpdateIsFirstOnboardingUseCaseProtocol {
func execute(_ isFirstOnboarding: Bool?)
func execute(_ isFirstOnboarding: Bool)
}

public final class UpdateIsFirstOnboardingUseCase: UpdateIsFirstOnboardingUseCaseProtocol {
Expand All @@ -20,7 +20,7 @@ public final class UpdateIsFirstOnboardingUseCase: UpdateIsFirstOnboardingUseCas
self.myRepository = myRepository
}

public func execute(_ isFirstOnboarding: Bool?) {
public func execute(_ isFirstOnboarding: Bool) {
myRepository.updateIsFirstOnboarding(isFirstOnboarding)
}
}
Loading