Skip to content

Instantly share code, notes, and snippets.

@o-nnerb
Created April 29, 2023 18:10
Show Gist options
  • Save o-nnerb/487d460d34b77dc87480cf37b74fe1f3 to your computer and use it in GitHub Desktop.
Save o-nnerb/487d460d34b77dc87480cf37b74fe1f3 to your computer and use it in GitHub Desktop.
import Injection
import Domain
protocol LoginInteractorInput {
func validate(email: String)
func validate(password: String)
func login(_ email: String, _ password: String)
}
protocol LoginInteractorOutput: AnyObject {
func email(isValid: Bool)
func password(isValid: Bool)
func login(_ result: Result<Void, Error>)
}
class LoginInteractor {
// MARK: - Use Cases
@Injected var loginUseCase: LoginUseCaseProtocol
// MARK: - Properties
private(set) weak var presenter: LoginInteractorOutput!
init(presenter: LoginInteractorOutput) {
self.presenter = presenter
}
}
extension LoginInteractor: LoginInteractorInput {
func validate(email: String) {
presenter?.email(isValid: !email.isEmpty)
}
func validate(password: String) {
presenter?.password(isValid: !password.isEmpty)
}
func login(_ email: String, _ password: String) {
Task {
do {
try await loginUseCase(email, password)
presenter?.login(.success(()))
} catch {
presenter?.login(.failure(error))
}
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment