Skip to content

Commit

Permalink
[Refactor/#122] useCase 수정
Browse files Browse the repository at this point in the history
  • Loading branch information
HELLOHIDI committed Nov 27, 2024
1 parent 08cff8d commit 1d704fb
Show file tree
Hide file tree
Showing 2 changed files with 36 additions and 13 deletions.
33 changes: 21 additions & 12 deletions HMH_Tuist_iOS/Projects/Domain/Sources/UseCase/My/MyUseCase.swift
Original file line number Diff line number Diff line change
Expand Up @@ -11,38 +11,47 @@ import Combine
import Core

public protocol MyPageUseCaseType {
var logoutFailed: PassthroughSubject<String, Never> { get }
var revokeUserFailed: PassthroughSubject<String, Never> { get }

func getUserData() -> AnyPublisher<User, UserError>
func logout()
func revokeUser()
func logout() -> AnyPublisher<Void, Never>
func revokeUser() -> AnyPublisher<Void, Never>
}

final class MyPageUseCase: MyPageUseCaseType {

private let userRepository: UserRepositoryType
private var cancelBag = CancelBag()

init(userRepository: UserRepositoryType) {
self.userRepository = userRepository
}

var logoutFailed = PassthroughSubject<String, Never>()
var revokeUserFailed = PassthroughSubject<String, Never>()

func getUserData() -> AnyPublisher<User, UserError> {
userRepository.getUserData()
.map { $0 }
.eraseToAnyPublisher()
}

func logout() {
func logout() -> AnyPublisher<Void, Never> {
userRepository.logout()
.sink { _ in
} receiveValue: { _ in
UserManager.shared.clearLogout()
}.store(in: cancelBag)
.catch { [weak self] error in
self?.logoutFailed.send("로그아웃에 실패했습니다.")
return Just(())
}
.eraseToAnyPublisher()
}

func revokeUser() {
func revokeUser() -> AnyPublisher<Void, Never> {
userRepository.deleteAccount()
.sink { _ in
} receiveValue: { _ in
UserManager.shared.revokeData()
}.store(in: cancelBag)
.catch { [weak self] error in
self?.revokeUserFailed.send("회원탈퇴에 실패했습니다.")
return Just(())
}
.eraseToAnyPublisher()
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ import Combine
import Core
import DSKit
import Domain
import Foundation

class MyPageViewModel: ObservableObject {

Expand All @@ -19,12 +20,15 @@ class MyPageViewModel: ObservableObject {

init(useCase: MyPageUseCaseType) {
self.useCase = useCase

bindState()
}

@Published private(set) var state = State(
alertType: .logout,
name: "",
point: 0
point: 0,
showToast: ""
)

//MARK: Action
Expand All @@ -42,6 +46,7 @@ class MyPageViewModel: ObservableObject {
var alertType: CustomAlertType
var name: String
var point: Int
var showToast: String
}

func send(action: Action) {
Expand All @@ -64,4 +69,13 @@ class MyPageViewModel: ObservableObject {
state.alertType == .logout ? useCase.logout() : useCase.revokeUser()
}
}

func bindState() {
useCase.loginFailed
.merge(with: useCase.revokeUserFailed)
.receive(on: RunLoop.main)
.assign(to: \.state.showToast, on: self)
.store(in: cancelBag)
}
}

0 comments on commit 1d704fb

Please sign in to comment.