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

Refactor [#91] LoginFeature 리펙토링 #108

Open
wants to merge 15 commits into
base: develop
Choose a base branch
from

Conversation

kim-seonwoo
Copy link
Member

👾 작업 내용

LoginUseCase

UseCase는 login이라는 하나의 함수로 구성되어 있습니다.
소셜 플랫폼 제공자를 파라미터로 받아 처리합니다.
소셜 토큰을 발급받는 api처리로 연결되며 발급 이후, 로그인 api를 호출합니다.
로그인 api의 결과를 화면이동을 위한 LoginResponseType으로 case화 하여 반환합니다.

   public func login(provider: OAuthProviderType) -> AnyPublisher<LoginResponseType, Domain.AuthError> {
        repository.authorize(provider)
            .handleEvents(receiveOutput: { socialToken in
                UserManager.shared.socialToken = socialToken
            })
            .flatMap { [weak self] _ -> AnyPublisher<LoginResponseType, AuthError> in
                guard let self = self else {
                    return Fail(error: AuthError.appleAuthrizeError).eraseToAnyPublisher()
                }
                
                return self.repository.socialLogin(socialPlatform: provider.rawValue)
                    .map { _ in LoginResponseType.loginSuccess }
                    .catch { error -> AnyPublisher<LoginResponseType, AuthError> in
                        switch error {
                        case .unregisteredUser:
                            return Just(.onboardingNeeded)
                                .setFailureType(to: AuthError.self)
                                .eraseToAnyPublisher()
                        default:
                            return Just(.loginFailure)
                                .setFailureType(to: AuthError.self)
                                .eraseToAnyPublisher()
                        }
                    }
                    .eraseToAnyPublisher()
            }
            .eraseToAnyPublisher()
    }

LoginViewModel

    enum Action {
        case loginButtonDidTap(provider: OAuthProviderType)
        case swipeButtonDidTap(index: Int)
    }

    struct State {
        var loginStatus: LoginResponseType
        var swipeImageIndex: Int
    }

    func send(action: Action) {
        switch action {
        case .loginButtonDidTap(let provider):
            loginUseCase.login(provider: provider)
                .sink(receiveCompletion: { _ in }) { [weak self] response in
                    self?.state.loginStatus = response
                }
                .store(in: cancelBag)
        case .swipeButtonDidTap(let index):
            self.state.swipeImageIndex = index
        }
    }

LoginViewModel은 로그인 처리를 위한 Action은 loginButtonDidTap와 Swipe 인덱스를 눌렀을때를 받고 있어요!
State 값으로는 login 결과 상태와, 스와이프 이미지 인덱스를 반환합니다.

🚀 PR Point

SwipeView 관련

  • 스와이프 관련해서 스와이프 하는 액션들이 ViewModel에 있어야한다고 판단하여 옮겼는데요..
    사실 괜히 복잡하기만 해졌다는 생각입니다.
    따라서 원래 버전으로 롤백을 할지 의견 부탁 드립니다.

bundle Identifier 관련

  • 번들 Id가 바뀌지 않아서인지 소셜 로그인이 성공하는 것을 확인하진 못했습니다..

로그인 결과 값에 따른 화면 전환

  • 추후에 구현하도록 하겠습니다!

DSKit 폰트 처리

  • 폰트를 못찾아오는 것 같습니다..!

📸 스크린샷

구현 내용 스크린샷
화면종류 image

✅ CheckList

  • 오류 없이 빌드되는지 확인
  • 로그용 print문 제거
  • 불필요한 주석 제거
  • 코드 컨벤션 확인

🔗 Issue

Resolved #91

@kim-seonwoo kim-seonwoo added this to the 🍀 리펙토링 기간 milestone Nov 14, 2024
@kim-seonwoo kim-seonwoo self-assigned this Nov 14, 2024
@kim-seonwoo kim-seonwoo linked an issue Nov 14, 2024 that may be closed by this pull request
Copy link
Member

@Zoe0929 Zoe0929 left a comment

Choose a reason for hiding this comment

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

뷰모델이 완전 깔!끔!해졌네요! 고생하셨습니다~

Copy link
Member

@HELLOHIDI HELLOHIDI left a comment

Choose a reason for hiding this comment

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

너무 고생했습니다. 각 객체의 명확한 책임이 나타나네요!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
Status: No status
Development

Successfully merging this pull request may close these issues.

[Refactor] 로그인 부분 리펙토링
3 participants