From 1bf0ca2c57d7fb4e81778a4eed1786558993fa56 Mon Sep 17 00:00:00 2001 From: J0onYEong Date: Tue, 22 Oct 2024 13:15:29 +0900 Subject: [PATCH 01/16] [IDLE-451] SetIdAndPasswordInputable & Outputable --- .../CenterAccountRegisterViewModel.swift | 95 +++++----- .../View/AuthInOutStreamManager+Signin.swift | 166 ++++++++--------- .../View/SetIdPasswordViewController.swift | 173 +++++++++++------- .../CenterSetupNewPasswordViewModel.swift | 11 +- .../ValidateNewPasswordViewController.swift | 64 ++++--- 5 files changed, 273 insertions(+), 236 deletions(-) diff --git a/project/Projects/Presentation/Feature/Auth/Sources/Center/AccountRegister/CenterAccountRegisterViewModel.swift b/project/Projects/Presentation/Feature/Auth/Sources/Center/AccountRegister/CenterAccountRegisterViewModel.swift index acc0288b..9cc75b39 100644 --- a/project/Projects/Presentation/Feature/Auth/Sources/Center/AccountRegister/CenterAccountRegisterViewModel.swift +++ b/project/Projects/Presentation/Feature/Auth/Sources/Center/AccountRegister/CenterAccountRegisterViewModel.swift @@ -14,7 +14,7 @@ import Core import RxSwift import RxCocoa -public class CenterAccountRegisterViewModel: BaseViewModel, ViewModelType { +class CenterAccountRegisterViewModel: BaseViewModel, ViewModelType { // Injected @Injected var inputValidationUseCase: AuthInputValidationUseCase @@ -25,8 +25,8 @@ public class CenterAccountRegisterViewModel: BaseViewModel, ViewModelType { var presentCompleteScreen: (() -> ())! // Input은 모든 ViewController에서 공유한다. (다만, 각가의 ViewController의 Input프로토콜에 의해 제한된다.) - public let input = Input() - public let output = Output() + let input = Input() + let output = Output() internal let stateObject = CenterRegisterState() @@ -56,21 +56,21 @@ public class CenterAccountRegisterViewModel: BaseViewModel, ViewModelType { registerInOut() validateBusinessNumberInOut() - AuthInOutStreamManager.idInOut( - input: input, - output: output, - useCase: inputValidationUseCase) { [weak self] validId in - // 🚀 상태추적 🚀 - self?.stateObject.id = validId - } - - AuthInOutStreamManager.passwordInOut( - input: input, - output: output, - useCase: inputValidationUseCase) { [weak self] validPassword in - // 🚀 상태추적 🚀 - self?.stateObject.password = validPassword - } +// AuthInOutStreamManager.idInOut( +// input: input, +// output: output, +// useCase: inputValidationUseCase) { [weak self] validId in +// // 🚀 상태추적 🚀 +// self?.stateObject.id = validId +// } +// +// AuthInOutStreamManager.passwordInOut( +// input: input, +// output: output, +// useCase: inputValidationUseCase) { [weak self] validPassword in +// // 🚀 상태추적 🚀 +// self?.stateObject.password = validPassword +// } input.alert .subscribe(onNext: { [weak self] alertVO in @@ -104,62 +104,63 @@ public class CenterAccountRegisterViewModel: BaseViewModel, ViewModelType { // MARK: ViewModel input output extension CenterAccountRegisterViewModel { - public class Input { + class Input { // CTA 버튼 클릭시 - public var nextButtonClicked: PublishSubject = .init() - public var prevButtonClicked: PublishSubject = .init() - public var completeButtonClicked: PublishSubject = .init() + var nextButtonClicked: PublishSubject = .init() + var prevButtonClicked: PublishSubject = .init() + var completeButtonClicked: PublishSubject = .init() // 이름입력 public var editingName: PublishRelay = .init() // 전화번호 입력 - public var editingPhoneNumber: BehaviorRelay = .init(value: "") - public var editingAuthNumber: BehaviorRelay = .init(value: "") - public var requestAuthForPhoneNumber: PublishRelay = .init() - public var requestValidationForAuthNumber: PublishRelay = .init() + var editingPhoneNumber: BehaviorRelay = .init(value: "") + var editingAuthNumber: BehaviorRelay = .init(value: "") + var requestAuthForPhoneNumber: PublishRelay = .init() + var requestValidationForAuthNumber: PublishRelay = .init() // 사업자 번호 입력 - public var editingBusinessNumber: BehaviorRelay = .init(value: "") - public var requestBusinessNumberValidation: PublishRelay = .init() + var editingBusinessNumber: BehaviorRelay = .init(value: "") + var requestBusinessNumberValidation: PublishRelay = .init() // Id - public var editingId: BehaviorRelay = .init(value: "") - public var requestIdDuplicationValidation: PublishRelay = .init() + var editingId: PublishSubject = .init() + var isIdDuplicatedButtonPressed: PublishSubject = .init() // Password - public var editingPasswords: PublishRelay<(pwd: String, cpwd: String)> = .init() + var editingPassword: PublishSubject = .init() + var checkingPassword: PublishSubject = .init() // Alert - public var alert: PublishSubject = .init() + var alert: PublishSubject = .init() } - public class Output { + class Output { // 이름 입력 public var nameValidation: Driver? // 전화번호 입력 - public var canSubmitPhoneNumber: Driver? - public var canSubmitAuthNumber: Driver? - public var phoneNumberValidation: Driver? - public var authNumberValidation: Driver? + var canSubmitPhoneNumber: Driver? + var canSubmitAuthNumber: Driver? + var phoneNumberValidation: Driver? + var authNumberValidation: Driver? // 사업자 번호 입력 - public var canSubmitBusinessNumber: Driver? - public var businessNumberVO: Driver? - public var businessNumberValidationFailure: Driver? + var canSubmitBusinessNumber: Driver? + var businessNumberVO: Driver? + var businessNumberValidationFailure: Driver? // Id - public var canCheckIdDuplication: Driver? - public var idDuplicationValidation: Driver? + var idValidationResult: Driver = .empty() + var idDuplicationCheckResult: Driver = .empty() // Password - public var passwordValidation: Driver? + var passwordValidationState: Driver = .empty() // Register success - public var loginSuccess: Driver? + var loginSuccess: Driver? } } @@ -311,8 +312,6 @@ extension CenterAccountRegisterViewModel.Input: AuthBusinessOwnerInputable { } extension CenterAccountRegisterViewModel.Output: AuthBusinessOwnerOutputable { } // Id & Password -extension CenterAccountRegisterViewModel.Input: SetIdInputable { } -extension CenterAccountRegisterViewModel.Input: SetPasswordInputable { } -extension CenterAccountRegisterViewModel.Output: SetIdOutputable { } -extension CenterAccountRegisterViewModel.Output: SetPasswordOutputable { } +extension CenterAccountRegisterViewModel.Input: SetIdAndPasswordInputable { } +extension CenterAccountRegisterViewModel.Output: SetIdAndPasswordOutputable { } diff --git a/project/Projects/Presentation/Feature/Auth/Sources/Center/AccountRegister/View/AuthInOutStreamManager+Signin.swift b/project/Projects/Presentation/Feature/Auth/Sources/Center/AccountRegister/View/AuthInOutStreamManager+Signin.swift index 9a71a863..6d3e6e35 100644 --- a/project/Projects/Presentation/Feature/Auth/Sources/Center/AccountRegister/View/AuthInOutStreamManager+Signin.swift +++ b/project/Projects/Presentation/Feature/Auth/Sources/Center/AccountRegister/View/AuthInOutStreamManager+Signin.swift @@ -15,86 +15,86 @@ import BaseFeature import RxSwift import RxCocoa -extension AuthInOutStreamManager { - - static func idInOut( - input: SetIdInputable & AnyObject, - output: SetIdOutputable & AnyObject, - useCase: AuthInputValidationUseCase, - stateTracker: @escaping (String) -> () - ) { - - var output = output - - // MARK: Id - output.canCheckIdDuplication = input - .editingId - .map { [unowned useCase] id in - useCase.checkIdIsValid(id: id) - } - .asDriver(onErrorJustReturn: false) - - // 중복성 검사 - let idDuplicationValidation = input - .requestIdDuplicationValidation - .flatMap { [useCase] id in - - printIfDebug("[CenterRegisterViewModel] 중복성 검사 대상 id: \(id)") - - #if DEBUG - // 디버그시 아이디 중복체크 미실시 - print("✅ 디버그모드에서 아이디 중복검사 미실시") - // ☑️ 상태추적 ☑️ - stateTracker(id) - return Single.just(Result.success(())) - #endif - - return useCase.requestCheckingIdDuplication(id: id) - } - - output.idDuplicationValidation = Observable - .combineLatest(idDuplicationValidation, input.requestIdDuplicationValidation) - .map { [stateTracker] (result, id) in - switch result { - case .success: - printIfDebug("[CenterRegisterViewModel] 중복체크 결과: ✅ 성공") - // 🚀 상태추적 🚀 - stateTracker(id) - return true - case .failure(let error): - printIfDebug("❌ 아이디중복검사 실패 \n 에러내용: \(error.message)") - return false - } - } - .asDriver(onErrorJustReturn: false) - } - - static func passwordInOut( - input: SetPasswordInputable & AnyObject, - output: SetPasswordOutputable & AnyObject, - useCase: AuthInputValidationUseCase, - stateTracker: @escaping (String) -> ()) - { - var output = output - output.passwordValidation = input.editingPasswords - .filter { (pwd, cpwd) in !pwd.isEmpty && !cpwd.isEmpty } - .map { [unowned useCase] (pwd, cpwd) in - - printIfDebug("[CenterRegisterViewModel] \n 입력중인 비밀번호: \(pwd) \n 확인 비밀번호: \(cpwd)") - - let isValid = useCase.checkPasswordIsValid(password: pwd) - if !isValid { - printIfDebug("❌ 비밀번호가 유효하지 않습니다.") - return PasswordValidationState.invalidPassword - } else if pwd != cpwd { - printIfDebug("☑️ 비밀번호가 일치하지 않습니다.") - return PasswordValidationState.unMatch - } else { - printIfDebug("✅ 비밀번호가 일치합니다.") - stateTracker(pwd) - return PasswordValidationState.match - } - } - .asDriver(onErrorJustReturn: .invalidPassword) - } -} +//extension AuthInOutStreamManager { +// +// static func idInOut( +// input: SetIdInputable & AnyObject, +// output: SetIdOutputable & AnyObject, +// useCase: AuthInputValidationUseCase, +// stateTracker: @escaping (String) -> () +// ) { +// +// var output = output +// +// // MARK: Id +// output.canCheckIdDuplication = input +// .editingId +// .map { [unowned useCase] id in +// useCase.checkIdIsValid(id: id) +// } +// .asDriver(onErrorJustReturn: false) +// +// // 중복성 검사 +// let idDuplicationValidation = input +// .requestIdDuplicationValidation +// .flatMap { [useCase] id in +// +// printIfDebug("[CenterRegisterViewModel] 중복성 검사 대상 id: \(id)") +// +// #if DEBUG +// // 디버그시 아이디 중복체크 미실시 +// print("✅ 디버그모드에서 아이디 중복검사 미실시") +// // ☑️ 상태추적 ☑️ +// stateTracker(id) +// return Single.just(Result.success(())) +// #endif +// +// return useCase.requestCheckingIdDuplication(id: id) +// } +// +// output.idDuplicationValidation = Observable +// .combineLatest(idDuplicationValidation, input.requestIdDuplicationValidation) +// .map { [stateTracker] (result, id) in +// switch result { +// case .success: +// printIfDebug("[CenterRegisterViewModel] 중복체크 결과: ✅ 성공") +// // 🚀 상태추적 🚀 +// stateTracker(id) +// return true +// case .failure(let error): +// printIfDebug("❌ 아이디중복검사 실패 \n 에러내용: \(error.message)") +// return false +// } +// } +// .asDriver(onErrorJustReturn: false) +// } +// +// static func passwordInOut( +// input: SetPasswordInputable & AnyObject, +// output: SetPasswordOutputable & AnyObject, +// useCase: AuthInputValidationUseCase, +// stateTracker: @escaping (String) -> ()) +// { +// var output = output +// output.passwordValidation = input.editingPasswords +// .filter { (pwd, cpwd) in !pwd.isEmpty && !cpwd.isEmpty } +// .map { [unowned useCase] (pwd, cpwd) in +// +// printIfDebug("[CenterRegisterViewModel] \n 입력중인 비밀번호: \(pwd) \n 확인 비밀번호: \(cpwd)") +// +// let isValid = useCase.checkPasswordIsValid(password: pwd) +// if !isValid { +// printIfDebug("❌ 비밀번호가 유효하지 않습니다.") +// return PasswordValidationState.invalidPassword +// } else if pwd != cpwd { +// printIfDebug("☑️ 비밀번호가 일치하지 않습니다.") +// return PasswordValidationState.unMatch +// } else { +// printIfDebug("✅ 비밀번호가 일치합니다.") +// stateTracker(pwd) +// return PasswordValidationState.match +// } +// } +// .asDriver(onErrorJustReturn: .invalidPassword) +// } +//} diff --git a/project/Projects/Presentation/Feature/Auth/Sources/Center/AccountRegister/View/SetIdPasswordViewController.swift b/project/Projects/Presentation/Feature/Auth/Sources/Center/AccountRegister/View/SetIdPasswordViewController.swift index 1fdedbd8..a350d946 100644 --- a/project/Projects/Presentation/Feature/Auth/Sources/Center/AccountRegister/View/SetIdPasswordViewController.swift +++ b/project/Projects/Presentation/Feature/Auth/Sources/Center/AccountRegister/View/SetIdPasswordViewController.swift @@ -15,28 +15,57 @@ import BaseFeature import RxSwift import RxCocoa - -public protocol SetIdInputable { - var editingId: BehaviorRelay { get set } - var requestIdDuplicationValidation: PublishRelay { get set } +protocol SetIdAndPasswordInputable { + + // Id + var editingId: PublishSubject { get set } + var isIdDuplicatedButtonPressed: PublishSubject { get set } + + // Password + var editingPassword: PublishSubject { get set } + var checkingPassword: PublishSubject { get set } } -public protocol SetIdOutputable { - var canCheckIdDuplication: Driver? { get set } - var idDuplicationValidation: Driver? { get set } +protocol SetIdAndPasswordOutputable { + + // Id + var idValidationResult: Driver { get } + var idDuplicationCheckResult: Driver { get } + + // Password + var passwordValidationState: Driver { get } } -public protocol SetPasswordInputable { - var editingPasswords: PublishRelay<(pwd: String, cpwd: String)> { get set } +struct PasswordValidationState { + + enum State { + case valid + case invalid + } + + let characterCount: State + let alphabetAndNumberIncluded: State + let noEmptySpace: State + let unsuccessiveSame3words: State + + var isValid: Bool { + + return ( + characterCount == .valid + && + alphabetAndNumberIncluded == .valid + && + noEmptySpace == .valid + && + unsuccessiveSame3words == .valid + ) + } } -public protocol SetPasswordOutputable { - var passwordValidation: Driver? { get set } -} class SetIdPasswordViewController: BaseViewController -where T.Input: SetIdInputable & SetPasswordInputable & PageProcessInputable, - T.Output: SetIdOutputable & SetPasswordOutputable, T: BaseViewModel { +where T.Input: SetIdAndPasswordInputable & PageProcessInputable, + T.Output: SetIdAndPasswordOutputable, T: BaseViewModel { // View @@ -58,8 +87,8 @@ where T.Input: SetIdInputable & SetPasswordInputable & PageProcessInputable, private let idField: IFType1 = { let textField = IFType1( - placeHolderText: "아이디를 입력해주세요", - submitButtonText: "중복 확인" + placeHolderText: "아이디를 입력해주세요", + submitButtonText: "중복 확인" ) textField.idleTextField.isCompleteImageAvailable = false @@ -230,21 +259,32 @@ where T.Input: SetIdInputable & SetPasswordInputable & PageProcessInputable, // MARK: Input let input = viewModel.input - // 현재 입력중인 정보 전송 + + // Id idField.idleTextField.textField.rx.text .compactMap{ $0 } .bind(to: input.editingId) .disposed(by: disposeBag) - Observable - .combineLatest( - passwordField.eventPublisher, - checkPasswordField.eventPublisher - ) - .map({ ($0, $1) }) - .bind(to: input.editingPasswords) + idField.button.eventPublisher + .mapToVoid() + .bind(to: input.isIdDuplicatedButtonPressed) + .disposed(by: disposeBag) + + // Password + passwordField + .textField.rx.text + .compactMap{ $0 } + .bind(to: input.editingPassword) + .disposed(by: disposeBag) + + checkPasswordField + .textField.rx.text + .compactMap{ $0 } + .bind(to: input.checkingPassword) .disposed(by: disposeBag) + // Navigation buttonContainer.nextBtnClicked .asObservable() .bind(to: input.completeButtonClicked) @@ -255,63 +295,72 @@ where T.Input: SetIdInputable & SetPasswordInputable & PageProcessInputable, .bind(to: input.prevButtonClicked) .disposed(by: disposeBag) - // id 중복확인 요청 버튼 - idField.eventPublisher - .map { [weak self] in - // 증복검사 실행시 아이디 입력 필드 비활성화 - self?.idField.idleTextField.setEnabled(false) - self?.idField.button.setEnabled(false) - return $0 - } - .bind(to: input.requestIdDuplicationValidation) - .disposed(by: disposeBag) // MARK: Output let output = viewModel.output // 중복확인이 가능한 아이디인가? output - .canCheckIdDuplication? - .drive(onNext: { [weak self] in - self?.idField.button.setEnabled($0) + .idValidationResult + .drive(onNext: { [weak self] isValid in + + guard let self else { return } + + // 검증 라벨 색상변경 + + // 중복확인버튼 활성화 + idField.button.setEnabled(isValid) }) .disposed(by: disposeBag) - // 아이디 중복확인 결과 - let idDuplicationValidation = output - .idDuplicationValidation? - .map { [weak self] isSuccess in - - self?.idField.idleTextField.setEnabled(true) + let idDuplicationResult = output + .idDuplicationCheckResult + .asObservable() + .share() + + idDuplicationResult + .subscribe(onNext: { [weak self] isValid in - if !isSuccess { - self?.idField.idleTextField.textField.textString = "" - self?.showAlert(vo: .init( - title: "사용불가한 아이디", - message: "다른 아이디를 사용해주세요.") - ) - } + guard let self else { return } - return isSuccess - } - .asObservable() ?? .empty() + // 비밀번호 필드 활성화 + passwordField.setEnabled(isValid) + checkPasswordField.setEnabled(isValid) + }) + .disposed(by: disposeBag) - // 비밀번호 검증 결과 let passwordValidationResult = output - .passwordValidation? - .map { state in - state == .match - } - .asObservable() ?? .empty() + .passwordValidationState + .asObservable() + .share() + + passwordValidationResult + .subscribe(onNext: { [weak self] state in + + guard let self else { return } + + // 비밀번호 체킹 상태 업데이트 + + }) + .disposed(by: disposeBag) + + // id, password 유효성 검사 Observable .combineLatest( - idDuplicationValidation, + idDuplicationResult, passwordValidationResult ) - .map { $0 && $1 } - .subscribe(onNext: { [weak self] in self?.buttonContainer.nextButton.setEnabled($0) }) + .map { idIsValid, passwordCheckingState in + idIsValid && passwordCheckingState.isValid + } + .subscribe(onNext: { [weak self] isValid in + + guard let self else { return } + + buttonContainer.nextButton.setEnabled(isValid) + }) .disposed(by: disposeBag) } diff --git a/project/Projects/Presentation/Feature/Auth/Sources/Center/SetNewPassword/CenterSetupNewPasswordViewModel.swift b/project/Projects/Presentation/Feature/Auth/Sources/Center/SetNewPassword/CenterSetupNewPasswordViewModel.swift index 672a557e..d59e9a88 100644 --- a/project/Projects/Presentation/Feature/Auth/Sources/Center/SetNewPassword/CenterSetupNewPasswordViewModel.swift +++ b/project/Projects/Presentation/Feature/Auth/Sources/Center/SetNewPassword/CenterSetupNewPasswordViewModel.swift @@ -36,13 +36,7 @@ class CenterSetupNewPasswordViewModel: BaseViewModel, ViewModelType { super.init() // 비밀번호 - AuthInOutStreamManager.passwordInOut( - input: input, - output: output, - useCase: inputValidationUseCase) { [weak self] validPassword in - // 🚀 상태추적 🚀 - self?.validPassword = validPassword - } + // 휴대전화 인증 AuthInOutStreamManager.validatePhoneNumberInOut( @@ -152,8 +146,5 @@ extension CenterSetupNewPasswordViewModel { extension CenterSetupNewPasswordViewModel.Input: AuthPhoneNumberInputable { } extension CenterSetupNewPasswordViewModel.Output: AuthPhoneNumberOutputable { } -extension CenterSetupNewPasswordViewModel.Input: SetPasswordInputable { } -extension CenterSetupNewPasswordViewModel.Output: SetPasswordOutputable { } - extension CenterSetupNewPasswordViewModel.Input: ChangePasswordSuccessInputable { } extension CenterSetupNewPasswordViewModel.Input: PageProcessInputable { } diff --git a/project/Projects/Presentation/Feature/Auth/Sources/Center/SetNewPassword/View/ValidateNewPasswordViewController.swift b/project/Projects/Presentation/Feature/Auth/Sources/Center/SetNewPassword/View/ValidateNewPasswordViewController.swift index b215375b..59b6de38 100644 --- a/project/Projects/Presentation/Feature/Auth/Sources/Center/SetNewPassword/View/ValidateNewPasswordViewController.swift +++ b/project/Projects/Presentation/Feature/Auth/Sources/Center/SetNewPassword/View/ValidateNewPasswordViewController.swift @@ -16,10 +16,8 @@ public protocol ChangePasswordSuccessInputable { var changePasswordButtonClicked: PublishRelay { get } } - class ValidateNewPasswordViewController: UIViewController -where T.Input: SetPasswordInputable & ChangePasswordSuccessInputable, - T.Output: SetPasswordOutputable { +where T.Input: ChangePasswordSuccessInputable { let viewModel: T @@ -172,14 +170,14 @@ where T.Input: SetPasswordInputable & ChangePasswordSuccessInputable, // MARK: Input let input = viewModel.input - Observable - .combineLatest( - passwordField.eventPublisher, - checkPasswordField.eventPublisher - ) - .map({ ($0, $1) }) - .bind(to: input.editingPasswords) - .disposed(by: disposeBag) +// Observable +// .combineLatest( +// passwordField.eventPublisher, +// checkPasswordField.eventPublisher +// ) +// .map({ ($0, $1) }) +// .bind(to: input.editingPasswords) +// .disposed(by: disposeBag) ctaButton .eventPublisher @@ -194,28 +192,28 @@ where T.Input: SetPasswordInputable & ChangePasswordSuccessInputable, let output = viewModel.output // 비밀번호 검증 - output - .passwordValidation? - .drive(onNext: { [weak self] validationState in - - guard let self else { return } - - switch validationState { - case .invalidPassword: - thisIsValidPasswordLabel.alpha = 0 - onPasswordUnMatched() - case .unMatch: - thisIsValidPasswordLabel.alpha = 1 - passwordDoesntMathLabel.alpha = 1 - onPasswordUnMatched() - case .match: - thisIsValidPasswordLabel.alpha = 1 - passwordDoesntMathLabel.alpha = 0 - onPasswordMatched() - ctaButton.setEnabled(true) - } - }) - .disposed(by: disposeBag) +// output +// .passwordValidation? +// .drive(onNext: { [weak self] validationState in +// +// guard let self else { return } +// +// switch validationState { +// case .invalidPassword: +// thisIsValidPasswordLabel.alpha = 0 +// onPasswordUnMatched() +// case .unMatch: +// thisIsValidPasswordLabel.alpha = 1 +// passwordDoesntMathLabel.alpha = 1 +// onPasswordUnMatched() +// case .match: +// thisIsValidPasswordLabel.alpha = 1 +// passwordDoesntMathLabel.alpha = 0 +// onPasswordMatched() +// ctaButton.setEnabled(true) +// } +// }) +// .disposed(by: disposeBag) } private func onPasswordMatched() { From 3075650ca1c7e05d7a51aae99ae5fa74c6ce2f33 Mon Sep 17 00:00:00 2001 From: J0onYEong Date: Tue, 22 Oct 2024 13:44:23 +0900 Subject: [PATCH 02/16] =?UTF-8?q?[IDLE-451]=20=EB=B9=84=EB=B0=80=EB=B2=88?= =?UTF-8?q?=ED=98=B8=20=EA=B2=80=EC=A6=9D=EB=A1=9C=EC=A7=81=20=EC=88=98?= =?UTF-8?q?=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../DefaultAuthInputValidationUseCase.swift | 34 +++- .../Auth/Center/PasswordValidationState.swift | 31 +++- .../Auth/AuthInputValidationUseCase.swift | 4 +- .../CenterAccountRegisterViewModel.swift | 95 ++++++++++- .../View/AuthInOutStreamManager+Signin.swift | 158 +++++++++--------- .../View/SetIdPasswordViewController.swift | 29 +--- 6 files changed, 221 insertions(+), 130 deletions(-) diff --git a/project/Projects/Domain/Sources/ConcreteUseCase/Auth/DefaultAuthInputValidationUseCase.swift b/project/Projects/Domain/Sources/ConcreteUseCase/Auth/DefaultAuthInputValidationUseCase.swift index 90033d75..39077058 100644 --- a/project/Projects/Domain/Sources/ConcreteUseCase/Auth/DefaultAuthInputValidationUseCase.swift +++ b/project/Projects/Domain/Sources/ConcreteUseCase/Auth/DefaultAuthInputValidationUseCase.swift @@ -67,10 +67,36 @@ public class DefaultAuthInputValidationUseCase: AuthInputValidationUseCase { .requestCheckingIdDuplication(id: id) } - public func checkPasswordIsValid(password: String) -> Bool { - let passwordLengthAndCharRegex = "^(?=.*[A-Za-z])(?=.*\\d)[A-Za-z\\d!@#$%^&*()_+=-]{8,20}$" - let predicate = NSPredicate(format: "SELF MATCHES %@", passwordLengthAndCharRegex) + public func checkPasswordIsValid(password: String) -> PasswordValidationState { - return predicate.evaluate(with: password) + // 1. 8자 ~ 20자 사이 + let lengthRegex = "^.{8,20}$" + let lengthIsValid = evaluateStringWith(regex: lengthRegex, targetString: password) + + // 2. 영문자와 숫자 반드시 하나씩 포함 + let letterAndNumberRegex = "(?=.*[A-Za-z])(?=.*[0-9])" + let letterAndNumberIsValid = evaluateStringWith(regex: letterAndNumberRegex, targetString: password) + + // 3. 공백 문자 사용 금지 + let noWhitespaceRegex = "^\\S*$" + let noWhitespaceIsValid = evaluateStringWith(regex: noWhitespaceRegex, targetString: password) + + // 4. 연속된 문자 3개 이상 사용 금지 + let noTripleRepeatedCharsRegex = "(.)\\1\\1" + let noTripleRepeatedCharsIsValid = evaluateStringWith(regex: noTripleRepeatedCharsRegex, targetString: password) + + return PasswordValidationState( + characterCount: lengthIsValid ? .valid : .invalid, + alphabetAndNumberIncluded: letterAndNumberIsValid ? .valid : .invalid, + noEmptySpace: noWhitespaceIsValid ? .valid : .invalid, + unsuccessiveSame3words: noTripleRepeatedCharsIsValid ? .valid : .invalid + ) + } + + private func evaluateStringWith(regex: String, targetString: String) -> Bool { + + let predicate = NSPredicate(format: "SELF MATCHES %@", regex) + + return !predicate.evaluate(with: targetString) } } diff --git a/project/Projects/Domain/Sources/Entity/State/Auth/Center/PasswordValidationState.swift b/project/Projects/Domain/Sources/Entity/State/Auth/Center/PasswordValidationState.swift index 4107401a..a4ec8da6 100644 --- a/project/Projects/Domain/Sources/Entity/State/Auth/Center/PasswordValidationState.swift +++ b/project/Projects/Domain/Sources/Entity/State/Auth/Center/PasswordValidationState.swift @@ -1,15 +1,34 @@ // // PasswordValidationState.swift -// ConcreteUseCase +// Domain // -// Created by choijunios on 7/7/24. +// Created by choijunios on 10/22/24. // import Foundation -public enum PasswordValidationState { +public struct PasswordValidationState { - case invalidPassword - case unMatch - case match + public enum State { + case valid + case invalid + } + + public let characterCount: State + public let alphabetAndNumberIncluded: State + public let noEmptySpace: State + public let unsuccessiveSame3words: State + + public var isValid: Bool { + + return ( + characterCount == .valid + && + alphabetAndNumberIncluded == .valid + && + noEmptySpace == .valid + && + unsuccessiveSame3words == .valid + ) + } } diff --git a/project/Projects/Domain/Sources/UseCaseInterface/Auth/AuthInputValidationUseCase.swift b/project/Projects/Domain/Sources/UseCaseInterface/Auth/AuthInputValidationUseCase.swift index 3c8bcd47..8e2bda65 100644 --- a/project/Projects/Domain/Sources/UseCaseInterface/Auth/AuthInputValidationUseCase.swift +++ b/project/Projects/Domain/Sources/UseCaseInterface/Auth/AuthInputValidationUseCase.swift @@ -86,8 +86,8 @@ public protocol AuthInputValidationUseCase: BaseUseCase { /// - parameters: /// - password : "password1234" /// - returns: - /// - Bool, true: 가능, flase: 불가능 - func checkPasswordIsValid(password: String) -> Bool + /// - PasswordValidationState + func checkPasswordIsValid(password: String) -> PasswordValidationState // #9. /// 이름 유효성 확인 로직 diff --git a/project/Projects/Presentation/Feature/Auth/Sources/Center/AccountRegister/CenterAccountRegisterViewModel.swift b/project/Projects/Presentation/Feature/Auth/Sources/Center/AccountRegister/CenterAccountRegisterViewModel.swift index 9cc75b39..b20cb630 100644 --- a/project/Projects/Presentation/Feature/Auth/Sources/Center/AccountRegister/CenterAccountRegisterViewModel.swift +++ b/project/Projects/Presentation/Feature/Auth/Sources/Center/AccountRegister/CenterAccountRegisterViewModel.swift @@ -20,9 +20,10 @@ class CenterAccountRegisterViewModel: BaseViewModel, ViewModelType { @Injected var inputValidationUseCase: AuthInputValidationUseCase @Injected var authUseCase: AuthUseCase - var presentNextPage: (() -> ())! - var presentPrevPage: (() -> ())! - var presentCompleteScreen: (() -> ())! + var presentNextPage: (() -> ())? + var presentPrevPage: (() -> ())? + var presentCompleteScreen: (() -> ())? + var presentAlert: ((DefaultAlertObject) -> ())? // Input은 모든 ViewController에서 공유한다. (다만, 각가의 ViewController의 Input프로토콜에 의해 제한된다.) let input = Input() @@ -56,6 +57,10 @@ class CenterAccountRegisterViewModel: BaseViewModel, ViewModelType { registerInOut() validateBusinessNumberInOut() + + + + // AuthInOutStreamManager.idInOut( // input: input, // output: output, @@ -83,7 +88,7 @@ class CenterAccountRegisterViewModel: BaseViewModel, ViewModelType { .nextButtonClicked .unretained(self) .subscribe(onNext: { (obj, _) in - obj.presentNextPage() + obj.presentNextPage?() }) .disposed(by: disposeBag) @@ -91,7 +96,7 @@ class CenterAccountRegisterViewModel: BaseViewModel, ViewModelType { .prevButtonClicked .unretained(self) .subscribe(onNext: { (obj, _) in - obj.presentPrevPage() + obj.presentPrevPage?() }) .disposed(by: disposeBag) } @@ -101,6 +106,82 @@ class CenterAccountRegisterViewModel: BaseViewModel, ViewModelType { } } + +// MARK: Id & Password validation +extension CenterAccountRegisterViewModel { + + func idAndPasswordValidationBinding() { + + // ID + output.idValidationResult = input + .editingId + .unretained(self) + .map { (vm, id) in + vm.inputValidationUseCase.checkIdIsValid(id: id) + } + .asDriver(onErrorDriveWith: .never()) + + let idDuplicationCheckResult = input + .isIdDuplicatedButtonPressed + .withLatestFrom(input.editingId) + .unretained(self) + .flatMap { (vm, id) in + + printIfDebug("[CenterRegisterViewModel] 중복성 검사 대상 id: \(id)") + + #if DEBUG + // 디버그시 아이디 중복체크 미실시 + print("✅ 디버그모드에서 아이디 중복검사 미실시") + // ☑️ 상태추적 ☑️ + stateTracker(id) + return Single.just(Result.success(())) + #endif + + return vm.inputValidationUseCase.requestCheckingIdDuplication(id: id) + } + .share() + + output.idDuplicationCheckResult = idDuplicationCheckResult + .map({ result in + switch result { + case .success: + return true + case .failure: + return false + } + }) + .asDriver(onErrorDriveWith: .never()) + + let idDuplicationFailure = idDuplicationCheckResult.compactMap { $0.error } + + idDuplicationFailure + .unretained(self) + .subscribe(onNext: { (vm, error) in + + let alertObject: DefaultAlertObject = .init() + alertObject.setTitle("아이디 중복검사 실패") + alertObject.setDescription(error.message) + + vm.presentAlert?(alertObject) + }) + .disposed(by: disposeBag) + + + // Password + Observable + .combineLatest( + input.editingPassword, + input.checkingPassword + ).map { (editingPw, checkPW) in + + + } + + + + } +} + // MARK: ViewModel input output extension CenterAccountRegisterViewModel { @@ -130,7 +211,7 @@ extension CenterAccountRegisterViewModel { // Password var editingPassword: PublishSubject = .init() - var checkingPassword: PublishSubject = .init() + var checkingPassword: BehaviorSubject = .init(value: "") // Alert var alert: PublishSubject = .init() @@ -196,7 +277,7 @@ extension CenterAccountRegisterViewModel { loginSuccess .unretained(self) .subscribe(onNext: { (obj, _) in - obj.presentCompleteScreen() + obj.presentCompleteScreen?() }) .disposed(by: disposeBag) diff --git a/project/Projects/Presentation/Feature/Auth/Sources/Center/AccountRegister/View/AuthInOutStreamManager+Signin.swift b/project/Projects/Presentation/Feature/Auth/Sources/Center/AccountRegister/View/AuthInOutStreamManager+Signin.swift index 6d3e6e35..435af27a 100644 --- a/project/Projects/Presentation/Feature/Auth/Sources/Center/AccountRegister/View/AuthInOutStreamManager+Signin.swift +++ b/project/Projects/Presentation/Feature/Auth/Sources/Center/AccountRegister/View/AuthInOutStreamManager+Signin.swift @@ -15,86 +15,78 @@ import BaseFeature import RxSwift import RxCocoa -//extension AuthInOutStreamManager { -// -// static func idInOut( -// input: SetIdInputable & AnyObject, -// output: SetIdOutputable & AnyObject, -// useCase: AuthInputValidationUseCase, -// stateTracker: @escaping (String) -> () -// ) { -// -// var output = output -// -// // MARK: Id -// output.canCheckIdDuplication = input -// .editingId -// .map { [unowned useCase] id in -// useCase.checkIdIsValid(id: id) -// } -// .asDriver(onErrorJustReturn: false) -// -// // 중복성 검사 -// let idDuplicationValidation = input -// .requestIdDuplicationValidation -// .flatMap { [useCase] id in -// -// printIfDebug("[CenterRegisterViewModel] 중복성 검사 대상 id: \(id)") -// -// #if DEBUG -// // 디버그시 아이디 중복체크 미실시 -// print("✅ 디버그모드에서 아이디 중복검사 미실시") -// // ☑️ 상태추적 ☑️ -// stateTracker(id) -// return Single.just(Result.success(())) -// #endif -// -// return useCase.requestCheckingIdDuplication(id: id) -// } -// -// output.idDuplicationValidation = Observable -// .combineLatest(idDuplicationValidation, input.requestIdDuplicationValidation) -// .map { [stateTracker] (result, id) in -// switch result { -// case .success: -// printIfDebug("[CenterRegisterViewModel] 중복체크 결과: ✅ 성공") -// // 🚀 상태추적 🚀 -// stateTracker(id) -// return true -// case .failure(let error): -// printIfDebug("❌ 아이디중복검사 실패 \n 에러내용: \(error.message)") -// return false -// } -// } -// .asDriver(onErrorJustReturn: false) -// } -// -// static func passwordInOut( -// input: SetPasswordInputable & AnyObject, -// output: SetPasswordOutputable & AnyObject, -// useCase: AuthInputValidationUseCase, -// stateTracker: @escaping (String) -> ()) -// { -// var output = output -// output.passwordValidation = input.editingPasswords -// .filter { (pwd, cpwd) in !pwd.isEmpty && !cpwd.isEmpty } -// .map { [unowned useCase] (pwd, cpwd) in -// -// printIfDebug("[CenterRegisterViewModel] \n 입력중인 비밀번호: \(pwd) \n 확인 비밀번호: \(cpwd)") -// -// let isValid = useCase.checkPasswordIsValid(password: pwd) -// if !isValid { -// printIfDebug("❌ 비밀번호가 유효하지 않습니다.") -// return PasswordValidationState.invalidPassword -// } else if pwd != cpwd { -// printIfDebug("☑️ 비밀번호가 일치하지 않습니다.") -// return PasswordValidationState.unMatch -// } else { -// printIfDebug("✅ 비밀번호가 일치합니다.") -// stateTracker(pwd) -// return PasswordValidationState.match -// } -// } -// .asDriver(onErrorJustReturn: .invalidPassword) -// } -//} +extension AuthInOutStreamManager { + + static func idInOut( + input: SetIdInputable & AnyObject, + output: SetIdOutputable & AnyObject, + useCase: AuthInputValidationUseCase, + stateTracker: @escaping (String) -> () + ) { + + var output = output + + // 중복성 검사 + let idDuplicationValidation = input + .requestIdDuplicationValidation + .flatMap { [useCase] id in + + printIfDebug("[CenterRegisterViewModel] 중복성 검사 대상 id: \(id)") + + #if DEBUG + // 디버그시 아이디 중복체크 미실시 + print("✅ 디버그모드에서 아이디 중복검사 미실시") + // ☑️ 상태추적 ☑️ + stateTracker(id) + return Single.just(Result.success(())) + #endif + + return useCase.requestCheckingIdDuplication(id: id) + } + + output.idDuplicationValidation = Observable + .combineLatest(idDuplicationValidation, input.requestIdDuplicationValidation) + .map { [stateTracker] (result, id) in + switch result { + case .success: + printIfDebug("[CenterRegisterViewModel] 중복체크 결과: ✅ 성공") + // 🚀 상태추적 🚀 + stateTracker(id) + return true + case .failure(let error): + printIfDebug("❌ 아이디중복검사 실패 \n 에러내용: \(error.message)") + return false + } + } + .asDriver(onErrorJustReturn: false) + } + + static func passwordInOut( + input: SetPasswordInputable & AnyObject, + output: SetPasswordOutputable & AnyObject, + useCase: AuthInputValidationUseCase, + stateTracker: @escaping (String) -> ()) + { + var output = output + output.passwordValidation = input.editingPasswords + .filter { (pwd, cpwd) in !pwd.isEmpty && !cpwd.isEmpty } + .map { [unowned useCase] (pwd, cpwd) in + + printIfDebug("[CenterRegisterViewModel] \n 입력중인 비밀번호: \(pwd) \n 확인 비밀번호: \(cpwd)") + + let isValid = useCase.checkPasswordIsValid(password: pwd) + if !isValid { + printIfDebug("❌ 비밀번호가 유효하지 않습니다.") + return PasswordValidationState.invalidPassword + } else if pwd != cpwd { + printIfDebug("☑️ 비밀번호가 일치하지 않습니다.") + return PasswordValidationState.unMatch + } else { + printIfDebug("✅ 비밀번호가 일치합니다.") + stateTracker(pwd) + return PasswordValidationState.match + } + } + .asDriver(onErrorJustReturn: .invalidPassword) + } +} diff --git a/project/Projects/Presentation/Feature/Auth/Sources/Center/AccountRegister/View/SetIdPasswordViewController.swift b/project/Projects/Presentation/Feature/Auth/Sources/Center/AccountRegister/View/SetIdPasswordViewController.swift index a350d946..aef4b5c8 100644 --- a/project/Projects/Presentation/Feature/Auth/Sources/Center/AccountRegister/View/SetIdPasswordViewController.swift +++ b/project/Projects/Presentation/Feature/Auth/Sources/Center/AccountRegister/View/SetIdPasswordViewController.swift @@ -23,7 +23,7 @@ protocol SetIdAndPasswordInputable { // Password var editingPassword: PublishSubject { get set } - var checkingPassword: PublishSubject { get set } + var checkingPassword: BehaviorSubject { get set } } protocol SetIdAndPasswordOutputable { @@ -36,33 +36,6 @@ protocol SetIdAndPasswordOutputable { var passwordValidationState: Driver { get } } -struct PasswordValidationState { - - enum State { - case valid - case invalid - } - - let characterCount: State - let alphabetAndNumberIncluded: State - let noEmptySpace: State - let unsuccessiveSame3words: State - - var isValid: Bool { - - return ( - characterCount == .valid - && - alphabetAndNumberIncluded == .valid - && - noEmptySpace == .valid - && - unsuccessiveSame3words == .valid - ) - } -} - - class SetIdPasswordViewController: BaseViewController where T.Input: SetIdAndPasswordInputable & PageProcessInputable, T.Output: SetIdAndPasswordOutputable, T: BaseViewModel { From 9c343c45d48d7bbbdf1cdc6e2aa4f606c57554f8 Mon Sep 17 00:00:00 2001 From: J0onYEong Date: Tue, 22 Oct 2024 13:50:38 +0900 Subject: [PATCH 03/16] =?UTF-8?q?[IDLE-451]=20CenterAccountRegisterViewMod?= =?UTF-8?q?el=20=EB=B3=80=EA=B2=BD=EB=90=9C=20=EB=A1=9C=EC=A7=81=20?= =?UTF-8?q?=EC=A0=81=EC=9A=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Auth/Center/PasswordValidationState.swift | 19 ++++++++++++++++++- .../CenterAccountRegisterViewModel.swift | 19 +++++++++++++------ 2 files changed, 31 insertions(+), 7 deletions(-) diff --git a/project/Projects/Domain/Sources/Entity/State/Auth/Center/PasswordValidationState.swift b/project/Projects/Domain/Sources/Entity/State/Auth/Center/PasswordValidationState.swift index a4ec8da6..961dabd8 100644 --- a/project/Projects/Domain/Sources/Entity/State/Auth/Center/PasswordValidationState.swift +++ b/project/Projects/Domain/Sources/Entity/State/Auth/Center/PasswordValidationState.swift @@ -7,7 +7,7 @@ import Foundation -public struct PasswordValidationState { +public class PasswordValidationState { public enum State { case valid @@ -18,6 +18,19 @@ public struct PasswordValidationState { public let alphabetAndNumberIncluded: State public let noEmptySpace: State public let unsuccessiveSame3words: State + public private(set) var isEditingAndCheckingPasswordsEqual: Bool = false + + public init( + characterCount: State, + alphabetAndNumberIncluded: State, + noEmptySpace: State, + unsuccessiveSame3words: State + ) { + self.characterCount = characterCount + self.alphabetAndNumberIncluded = alphabetAndNumberIncluded + self.noEmptySpace = noEmptySpace + self.unsuccessiveSame3words = unsuccessiveSame3words + } public var isValid: Bool { @@ -31,4 +44,8 @@ public struct PasswordValidationState { unsuccessiveSame3words == .valid ) } + + public func setEqualState(state: Bool) { + isEditingAndCheckingPasswordsEqual = state + } } diff --git a/project/Projects/Presentation/Feature/Auth/Sources/Center/AccountRegister/CenterAccountRegisterViewModel.swift b/project/Projects/Presentation/Feature/Auth/Sources/Center/AccountRegister/CenterAccountRegisterViewModel.swift index b20cb630..219d48b9 100644 --- a/project/Projects/Presentation/Feature/Auth/Sources/Center/AccountRegister/CenterAccountRegisterViewModel.swift +++ b/project/Projects/Presentation/Feature/Auth/Sources/Center/AccountRegister/CenterAccountRegisterViewModel.swift @@ -167,18 +167,25 @@ extension CenterAccountRegisterViewModel { .disposed(by: disposeBag) - // Password - Observable + // Passwords + output.passwordValidationState = Observable .combineLatest( input.editingPassword, input.checkingPassword - ).map { (editingPw, checkPW) in + ) + .unretained(self) + .map { (vm, passwords) in + + let (editing, checking) = passwords + let stateObject: PasswordValidationState = vm.inputValidationUseCase + .checkPasswordIsValid(password: editing) + stateObject.setEqualState(state: editing == checking) + + return stateObject } - - - + .asDriver(onErrorDriveWith: .never()) } } From 5ab5c32e69768859925cc2a11b5a149fdf63af62 Mon Sep 17 00:00:00 2001 From: J0onYEong Date: Tue, 22 Oct 2024 13:54:15 +0900 Subject: [PATCH 04/16] =?UTF-8?q?[IDLE-451]=20=EC=95=84=EC=9D=B4=EB=94=94?= =?UTF-8?q?=20=EC=A4=91=EB=B3=B5=EC=8B=9C=20Alert=ED=91=9C=EC=B6=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../CenterAccountRegisterCoordinator.swift | 5 + .../CenterAccountRegisterViewModel.swift | 19 +--- .../View/AuthInOutStreamManager+Signin.swift | 92 ------------------- 3 files changed, 7 insertions(+), 109 deletions(-) delete mode 100644 project/Projects/Presentation/Feature/Auth/Sources/Center/AccountRegister/View/AuthInOutStreamManager+Signin.swift diff --git a/project/Projects/Presentation/Feature/Auth/Sources/Center/AccountRegister/CenterAccountRegisterCoordinator.swift b/project/Projects/Presentation/Feature/Auth/Sources/Center/AccountRegister/CenterAccountRegisterCoordinator.swift index 8c6ef06b..899a5dbf 100644 --- a/project/Projects/Presentation/Feature/Auth/Sources/Center/AccountRegister/CenterAccountRegisterCoordinator.swift +++ b/project/Projects/Presentation/Feature/Auth/Sources/Center/AccountRegister/CenterAccountRegisterCoordinator.swift @@ -89,6 +89,11 @@ public class CenterAccountRegisterCoordinator: Coordinator { // 완료화면으로 이동 self?.router.presentAnonymousCompletePage(object) } + + vm.presentAlert = { [weak self] object in + + self?.router.presentDefaultAlertController(object: object) + } self.stageViewControllers = [ EnterNameViewController(viewModel: vm), diff --git a/project/Projects/Presentation/Feature/Auth/Sources/Center/AccountRegister/CenterAccountRegisterViewModel.swift b/project/Projects/Presentation/Feature/Auth/Sources/Center/AccountRegister/CenterAccountRegisterViewModel.swift index 219d48b9..00f3c57e 100644 --- a/project/Projects/Presentation/Feature/Auth/Sources/Center/AccountRegister/CenterAccountRegisterViewModel.swift +++ b/project/Projects/Presentation/Feature/Auth/Sources/Center/AccountRegister/CenterAccountRegisterViewModel.swift @@ -58,24 +58,9 @@ class CenterAccountRegisterViewModel: BaseViewModel, ViewModelType { validateBusinessNumberInOut() + // MARK: Id & Password + idAndPasswordValidationBinding() - - -// AuthInOutStreamManager.idInOut( -// input: input, -// output: output, -// useCase: inputValidationUseCase) { [weak self] validId in -// // 🚀 상태추적 🚀 -// self?.stateObject.id = validId -// } -// -// AuthInOutStreamManager.passwordInOut( -// input: input, -// output: output, -// useCase: inputValidationUseCase) { [weak self] validPassword in -// // 🚀 상태추적 🚀 -// self?.stateObject.password = validPassword -// } input.alert .subscribe(onNext: { [weak self] alertVO in diff --git a/project/Projects/Presentation/Feature/Auth/Sources/Center/AccountRegister/View/AuthInOutStreamManager+Signin.swift b/project/Projects/Presentation/Feature/Auth/Sources/Center/AccountRegister/View/AuthInOutStreamManager+Signin.swift deleted file mode 100644 index 435af27a..00000000 --- a/project/Projects/Presentation/Feature/Auth/Sources/Center/AccountRegister/View/AuthInOutStreamManager+Signin.swift +++ /dev/null @@ -1,92 +0,0 @@ -// -// AuthInOutStreamManager.swift -// AuthFeature -// -// Created by choijunios on 10/5/24. -// - -import UIKit -import PresentationCore -import Domain -import Core -import BaseFeature - - -import RxSwift -import RxCocoa - -extension AuthInOutStreamManager { - - static func idInOut( - input: SetIdInputable & AnyObject, - output: SetIdOutputable & AnyObject, - useCase: AuthInputValidationUseCase, - stateTracker: @escaping (String) -> () - ) { - - var output = output - - // 중복성 검사 - let idDuplicationValidation = input - .requestIdDuplicationValidation - .flatMap { [useCase] id in - - printIfDebug("[CenterRegisterViewModel] 중복성 검사 대상 id: \(id)") - - #if DEBUG - // 디버그시 아이디 중복체크 미실시 - print("✅ 디버그모드에서 아이디 중복검사 미실시") - // ☑️ 상태추적 ☑️ - stateTracker(id) - return Single.just(Result.success(())) - #endif - - return useCase.requestCheckingIdDuplication(id: id) - } - - output.idDuplicationValidation = Observable - .combineLatest(idDuplicationValidation, input.requestIdDuplicationValidation) - .map { [stateTracker] (result, id) in - switch result { - case .success: - printIfDebug("[CenterRegisterViewModel] 중복체크 결과: ✅ 성공") - // 🚀 상태추적 🚀 - stateTracker(id) - return true - case .failure(let error): - printIfDebug("❌ 아이디중복검사 실패 \n 에러내용: \(error.message)") - return false - } - } - .asDriver(onErrorJustReturn: false) - } - - static func passwordInOut( - input: SetPasswordInputable & AnyObject, - output: SetPasswordOutputable & AnyObject, - useCase: AuthInputValidationUseCase, - stateTracker: @escaping (String) -> ()) - { - var output = output - output.passwordValidation = input.editingPasswords - .filter { (pwd, cpwd) in !pwd.isEmpty && !cpwd.isEmpty } - .map { [unowned useCase] (pwd, cpwd) in - - printIfDebug("[CenterRegisterViewModel] \n 입력중인 비밀번호: \(pwd) \n 확인 비밀번호: \(cpwd)") - - let isValid = useCase.checkPasswordIsValid(password: pwd) - if !isValid { - printIfDebug("❌ 비밀번호가 유효하지 않습니다.") - return PasswordValidationState.invalidPassword - } else if pwd != cpwd { - printIfDebug("☑️ 비밀번호가 일치하지 않습니다.") - return PasswordValidationState.unMatch - } else { - printIfDebug("✅ 비밀번호가 일치합니다.") - stateTracker(pwd) - return PasswordValidationState.match - } - } - .asDriver(onErrorJustReturn: .invalidPassword) - } -} From a58ad8b79d076a32df980dc8075a9ea39559f830 Mon Sep 17 00:00:00 2001 From: J0onYEong Date: Tue, 22 Oct 2024 14:30:31 +0900 Subject: [PATCH 05/16] =?UTF-8?q?[IDLE-451]=20=EB=B9=84=EB=B0=80=EB=B2=88?= =?UTF-8?q?=ED=98=B8=20=EA=B2=80=EC=A6=9D=20=ED=85=8C=EC=8A=A4=ED=8A=B8(?= =?UTF-8?q?=EA=B5=AC=EB=8F=99)=20=EC=99=84=EB=A3=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../DefaultAuthInputValidationUseCase.swift | 6 +-- .../Auth/Center/PasswordValidationState.swift | 33 +++++++++++++++ .../VO/UserInfo/CenterJoinStatusInfoVO.swift | 12 ++++++ .../ExampleApp/Sources/SceneDelegate.swift | 40 ++++++++++++++++++- .../Presentation/Feature/Auth/Project.swift | 1 + .../CenterAccountRegisterViewModel.swift | 14 +++++-- .../Testing/Sources/Domain/Mock_Domain.swift | 40 +++++++++++++++++++ .../Testing/Sources/MockAssemblies.swift | 6 +++ 8 files changed, 143 insertions(+), 9 deletions(-) diff --git a/project/Projects/Domain/Sources/ConcreteUseCase/Auth/DefaultAuthInputValidationUseCase.swift b/project/Projects/Domain/Sources/ConcreteUseCase/Auth/DefaultAuthInputValidationUseCase.swift index 39077058..b82ff8c9 100644 --- a/project/Projects/Domain/Sources/ConcreteUseCase/Auth/DefaultAuthInputValidationUseCase.swift +++ b/project/Projects/Domain/Sources/ConcreteUseCase/Auth/DefaultAuthInputValidationUseCase.swift @@ -74,7 +74,7 @@ public class DefaultAuthInputValidationUseCase: AuthInputValidationUseCase { let lengthIsValid = evaluateStringWith(regex: lengthRegex, targetString: password) // 2. 영문자와 숫자 반드시 하나씩 포함 - let letterAndNumberRegex = "(?=.*[A-Za-z])(?=.*[0-9])" + let letterAndNumberRegex = "^(?=.*[A-Za-z])(?=.*[0-9]).*$" let letterAndNumberIsValid = evaluateStringWith(regex: letterAndNumberRegex, targetString: password) // 3. 공백 문자 사용 금지 @@ -83,7 +83,7 @@ public class DefaultAuthInputValidationUseCase: AuthInputValidationUseCase { // 4. 연속된 문자 3개 이상 사용 금지 let noTripleRepeatedCharsRegex = "(.)\\1\\1" - let noTripleRepeatedCharsIsValid = evaluateStringWith(regex: noTripleRepeatedCharsRegex, targetString: password) + let noTripleRepeatedCharsIsValid = !evaluateStringWith(regex: noTripleRepeatedCharsRegex, targetString: password) return PasswordValidationState( characterCount: lengthIsValid ? .valid : .invalid, @@ -97,6 +97,6 @@ public class DefaultAuthInputValidationUseCase: AuthInputValidationUseCase { let predicate = NSPredicate(format: "SELF MATCHES %@", regex) - return !predicate.evaluate(with: targetString) + return predicate.evaluate(with: targetString) } } diff --git a/project/Projects/Domain/Sources/Entity/State/Auth/Center/PasswordValidationState.swift b/project/Projects/Domain/Sources/Entity/State/Auth/Center/PasswordValidationState.swift index 961dabd8..a610c79f 100644 --- a/project/Projects/Domain/Sources/Entity/State/Auth/Center/PasswordValidationState.swift +++ b/project/Projects/Domain/Sources/Entity/State/Auth/Center/PasswordValidationState.swift @@ -49,3 +49,36 @@ public class PasswordValidationState { isEditingAndCheckingPasswordsEqual = state } } + +public extension PasswordValidationState { + + var description: String { + var descriptions: [String] = [] + + if characterCount == .valid { + descriptions.append("비밀번호 길이: 유효함 (8자 이상 20자 이하)") + } else { + descriptions.append("비밀번호 길이: 유효하지 않음 (8자 이상 20자 이하이어야 함)") + } + + if alphabetAndNumberIncluded == .valid { + descriptions.append("영문자와 숫자: 유효함 (영문자와 숫자가 모두 포함됨)") + } else { + descriptions.append("영문자와 숫자: 유효하지 않음 (영문자와 숫자가 반드시 포함되어야 함)") + } + + if noEmptySpace == .valid { + descriptions.append("공백 문자: 없음 (공백 문자를 사용할 수 없음)") + } else { + descriptions.append("공백 문자: 유효하지 않음 (공백 문자가 포함되어 있음)") + } + + if unsuccessiveSame3words == .valid { + descriptions.append("연속된 문자 3개 이상 사용: 유효함 (연속된 동일 문자가 없음)") + } else { + descriptions.append("연속된 문자 3개 이상 사용: 유효하지 않음 (연속된 동일 문자가 3개 이상 포함됨)") + } + + return descriptions.joined(separator: "\n") + } +} diff --git a/project/Projects/Domain/Sources/Entity/VO/UserInfo/CenterJoinStatusInfoVO.swift b/project/Projects/Domain/Sources/Entity/VO/UserInfo/CenterJoinStatusInfoVO.swift index 24eace65..202a270e 100644 --- a/project/Projects/Domain/Sources/Entity/VO/UserInfo/CenterJoinStatusInfoVO.swift +++ b/project/Projects/Domain/Sources/Entity/VO/UserInfo/CenterJoinStatusInfoVO.swift @@ -12,6 +12,18 @@ public struct CenterJoinStatusInfoVO: Codable { public let managerName: String public let phoneNumber: String public let centerManagerAccountStatus: CenterAccountStatus + + public init( + id: String, + managerName: String, + phoneNumber: String, + centerManagerAccountStatus: CenterAccountStatus + ) { + self.id = id + self.managerName = managerName + self.phoneNumber = phoneNumber + self.centerManagerAccountStatus = centerManagerAccountStatus + } } public enum CenterAccountStatus: String, Codable { diff --git a/project/Projects/Presentation/Feature/Auth/ExampleApp/Sources/SceneDelegate.swift b/project/Projects/Presentation/Feature/Auth/ExampleApp/Sources/SceneDelegate.swift index 583c671d..f146e8c5 100644 --- a/project/Projects/Presentation/Feature/Auth/ExampleApp/Sources/SceneDelegate.swift +++ b/project/Projects/Presentation/Feature/Auth/ExampleApp/Sources/SceneDelegate.swift @@ -7,18 +7,54 @@ import UIKit +import AuthFeature +import BaseFeature +import Testing +import Core + class SceneDelegate: UIResponder, UIWindowSceneDelegate { var window: UIWindow? + var authCoordinator: AuthCoordinator? + var centerAccountRegisterCoordinator: CenterAccountRegisterCoordinator? + func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) { guard let windowScene = scene as? UIWindowScene else { return } - - window = UIWindow(windowScene: windowScene) + DependencyInjector.shared.assemble(MockAssemblies) + DependencyInjector.shared.register(CenterRegisterLogger.self, CenterAuthLogger()) + authCoordinator = .init() + authCoordinator?.startFlow = { [weak self] desination in + + switch desination { + case .centerRegisterPage: + + let coordinator = CenterAccountRegisterCoordinator() + self?.centerAccountRegisterCoordinator = coordinator + coordinator.start() + + default: + // 테스트시 추가가능 + return + } + } + + window = UIWindow(windowScene: windowScene) window?.makeKeyAndVisible() + + authCoordinator?.start() } } + +class CenterAuthLogger: CenterRegisterLogger { + + func logCenterRegisterStep(stepName: String, stepIndex: Int) { } + + func startCenterRegister() { } + + func logCenterRegisterDuration() { } +} diff --git a/project/Projects/Presentation/Feature/Auth/Project.swift b/project/Projects/Presentation/Feature/Auth/Project.swift index 82be4acb..646ccde1 100644 --- a/project/Projects/Presentation/Feature/Auth/Project.swift +++ b/project/Projects/Presentation/Feature/Auth/Project.swift @@ -46,6 +46,7 @@ let project = Project( resources: ["ExampleApp/Resources/**"], dependencies: [ .target(name: "AuthFeature"), + D.Testing, ], settings: .settings( configurations: IdleConfiguration.presentationConfigurations diff --git a/project/Projects/Presentation/Feature/Auth/Sources/Center/AccountRegister/CenterAccountRegisterViewModel.swift b/project/Projects/Presentation/Feature/Auth/Sources/Center/AccountRegister/CenterAccountRegisterViewModel.swift index 00f3c57e..a92ed4e6 100644 --- a/project/Projects/Presentation/Feature/Auth/Sources/Center/AccountRegister/CenterAccountRegisterViewModel.swift +++ b/project/Projects/Presentation/Feature/Auth/Sources/Center/AccountRegister/CenterAccountRegisterViewModel.swift @@ -114,11 +114,12 @@ extension CenterAccountRegisterViewModel { printIfDebug("[CenterRegisterViewModel] 중복성 검사 대상 id: \(id)") + // 가장 최근 id저장 + vm.stateObject.id = id + #if DEBUG // 디버그시 아이디 중복체크 미실시 print("✅ 디버그모드에서 아이디 중복검사 미실시") - // ☑️ 상태추적 ☑️ - stateTracker(id) return Single.just(Result.success(())) #endif @@ -127,14 +128,14 @@ extension CenterAccountRegisterViewModel { .share() output.idDuplicationCheckResult = idDuplicationCheckResult - .map({ result in + .map { result in switch result { case .success: return true case .failure: return false } - }) + } .asDriver(onErrorDriveWith: .never()) let idDuplicationFailure = idDuplicationCheckResult.compactMap { $0.error } @@ -168,6 +169,11 @@ extension CenterAccountRegisterViewModel { stateObject.setEqualState(state: editing == checking) + // 가장 최근 비밀번호 저장 + vm.stateObject.password = editing + + printIfDebug(stateObject.description) + return stateObject } .asDriver(onErrorDriveWith: .never()) diff --git a/project/Projects/Testing/Sources/Domain/Mock_Domain.swift b/project/Projects/Testing/Sources/Domain/Mock_Domain.swift index 55620108..a94baa02 100644 --- a/project/Projects/Testing/Sources/Domain/Mock_Domain.swift +++ b/project/Projects/Testing/Sources/Domain/Mock_Domain.swift @@ -6,3 +6,43 @@ // import Foundation +import Domain + + +import RxSwift + +class MockAuthUseCase: AuthUseCase { + + func registerCenterAccount(registerState: Domain.CenterRegisterState) -> RxSwift.Single> { + .just(.success(())) + } + + func loginCenterAccount(id: String, password: String) -> RxSwift.Single> { + .just(.success(())) + } + + func checkCenterJoinStatus() -> RxSwift.Single> { + .just(.success(.mock)) + } + + func setNewPassword(phoneNumber: String, password: String) -> RxSwift.Single> { + .just(.success(())) + } + + func registerWorkerAccount(registerState: Domain.WorkerRegisterState) -> RxSwift.Single> { + .just(.success(())) + } + + func loginWorkerAccount(phoneNumber: String, authNumber: String) -> RxSwift.Single> { + .just(.success(())) + } +} + +extension CenterJoinStatusInfoVO { + static let mock: Self = .init( + id: "123", + managerName: "관리자 성험", + phoneNumber: "010-1111-2222", + centerManagerAccountStatus: .approved + ) +} diff --git a/project/Projects/Testing/Sources/MockAssemblies.swift b/project/Projects/Testing/Sources/MockAssemblies.swift index b4d1e8e1..c02649d0 100644 --- a/project/Projects/Testing/Sources/MockAssemblies.swift +++ b/project/Projects/Testing/Sources/MockAssemblies.swift @@ -24,7 +24,13 @@ public let MockAssemblies: [Assembly] = [ struct MockDomainAssembly: Assembly { func assemble(container: Container) { + container.register(AuthInputValidationUseCase.self) { _ in + DefaultAuthInputValidationUseCase() + } + container.register(AuthUseCase.self) { _ in + MockAuthUseCase() + } } } From 7cc4cd0fbb11c73557af580ff5e2062905d52152 Mon Sep 17 00:00:00 2001 From: J0onYEong Date: Tue, 22 Oct 2024 14:49:36 +0900 Subject: [PATCH 06/16] =?UTF-8?q?[IDLE-451]=20ValidationIndicator=EA=B5=AC?= =?UTF-8?q?=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../green.colorset/Contents.json | 38 +++++++++ .../Resources/Asset.xcassets/Contents.json | 6 ++ .../v_f_mark.imageset/Contents.json | 12 +++ .../v_f_mark.imageset/v_f_mark.svg | 4 + .../v_s_mark.imageset/Contents.json | 12 +++ .../v_s_mark.imageset/v_s_mark.svg | 4 + .../View/Component/ValidationIndicator.swift | 77 +++++++++++++++++++ 7 files changed, 153 insertions(+) create mode 100644 project/Projects/Presentation/DSKit/Resources/Colors.xcassets/green.colorset/Contents.json create mode 100644 project/Projects/Presentation/Feature/Auth/Resources/Asset.xcassets/Contents.json create mode 100644 project/Projects/Presentation/Feature/Auth/Resources/Asset.xcassets/v_f_mark.imageset/Contents.json create mode 100644 project/Projects/Presentation/Feature/Auth/Resources/Asset.xcassets/v_f_mark.imageset/v_f_mark.svg create mode 100644 project/Projects/Presentation/Feature/Auth/Resources/Asset.xcassets/v_s_mark.imageset/Contents.json create mode 100644 project/Projects/Presentation/Feature/Auth/Resources/Asset.xcassets/v_s_mark.imageset/v_s_mark.svg create mode 100644 project/Projects/Presentation/Feature/Auth/Sources/Center/AccountRegister/View/Component/ValidationIndicator.swift diff --git a/project/Projects/Presentation/DSKit/Resources/Colors.xcassets/green.colorset/Contents.json b/project/Projects/Presentation/DSKit/Resources/Colors.xcassets/green.colorset/Contents.json new file mode 100644 index 00000000..f1e2fd65 --- /dev/null +++ b/project/Projects/Presentation/DSKit/Resources/Colors.xcassets/green.colorset/Contents.json @@ -0,0 +1,38 @@ +{ + "colors" : [ + { + "color" : { + "color-space" : "srgb", + "components" : { + "alpha" : "1.000", + "blue" : "0x4D", + "green" : "0xC3", + "red" : "0x2C" + } + }, + "idiom" : "universal" + }, + { + "appearances" : [ + { + "appearance" : "luminosity", + "value" : "dark" + } + ], + "color" : { + "color-space" : "srgb", + "components" : { + "alpha" : "1.000", + "blue" : "0x4D", + "green" : "0xC3", + "red" : "0x2C" + } + }, + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/project/Projects/Presentation/Feature/Auth/Resources/Asset.xcassets/Contents.json b/project/Projects/Presentation/Feature/Auth/Resources/Asset.xcassets/Contents.json new file mode 100644 index 00000000..73c00596 --- /dev/null +++ b/project/Projects/Presentation/Feature/Auth/Resources/Asset.xcassets/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/project/Projects/Presentation/Feature/Auth/Resources/Asset.xcassets/v_f_mark.imageset/Contents.json b/project/Projects/Presentation/Feature/Auth/Resources/Asset.xcassets/v_f_mark.imageset/Contents.json new file mode 100644 index 00000000..05348944 --- /dev/null +++ b/project/Projects/Presentation/Feature/Auth/Resources/Asset.xcassets/v_f_mark.imageset/Contents.json @@ -0,0 +1,12 @@ +{ + "images" : [ + { + "filename" : "v_f_mark.svg", + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/project/Projects/Presentation/Feature/Auth/Resources/Asset.xcassets/v_f_mark.imageset/v_f_mark.svg b/project/Projects/Presentation/Feature/Auth/Resources/Asset.xcassets/v_f_mark.imageset/v_f_mark.svg new file mode 100644 index 00000000..a16a660d --- /dev/null +++ b/project/Projects/Presentation/Feature/Auth/Resources/Asset.xcassets/v_f_mark.imageset/v_f_mark.svg @@ -0,0 +1,4 @@ + + + + diff --git a/project/Projects/Presentation/Feature/Auth/Resources/Asset.xcassets/v_s_mark.imageset/Contents.json b/project/Projects/Presentation/Feature/Auth/Resources/Asset.xcassets/v_s_mark.imageset/Contents.json new file mode 100644 index 00000000..15dc2b5b --- /dev/null +++ b/project/Projects/Presentation/Feature/Auth/Resources/Asset.xcassets/v_s_mark.imageset/Contents.json @@ -0,0 +1,12 @@ +{ + "images" : [ + { + "filename" : "v_s_mark.svg", + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/project/Projects/Presentation/Feature/Auth/Resources/Asset.xcassets/v_s_mark.imageset/v_s_mark.svg b/project/Projects/Presentation/Feature/Auth/Resources/Asset.xcassets/v_s_mark.imageset/v_s_mark.svg new file mode 100644 index 00000000..781e7cd1 --- /dev/null +++ b/project/Projects/Presentation/Feature/Auth/Resources/Asset.xcassets/v_s_mark.imageset/v_s_mark.svg @@ -0,0 +1,4 @@ + + + + diff --git a/project/Projects/Presentation/Feature/Auth/Sources/Center/AccountRegister/View/Component/ValidationIndicator.swift b/project/Projects/Presentation/Feature/Auth/Sources/Center/AccountRegister/View/Component/ValidationIndicator.swift new file mode 100644 index 00000000..2e755c32 --- /dev/null +++ b/project/Projects/Presentation/Feature/Auth/Sources/Center/AccountRegister/View/Component/ValidationIndicator.swift @@ -0,0 +1,77 @@ +// +// ValidationIndicator.swift +// AuthFeature +// +// Created by choijunios on 10/22/24. +// + +import Foundation +import UIKit + +import DSKit + +class ValidationIndicator: UIView { + + enum State { + case valid + case invalid + } + + // Init + let validText: String + let invalidText: String + + // View + let iconView: UIImageView = { + let view: UIImageView = .init() + return view + }() + + let label: IdleLabel = { + let label: IdleLabel = .init(typography: .Body3) + return label + }() + + init(validText: String, invalidText: String) { + self.validText = validText + self.invalidText = invalidText + super.init(frame: .zero) + + setLayout() + } + required init?(coder: NSCoder) { nil } + + private func setLayout() { + + let mainStack: HStack = HStack( + [iconView, label, Spacer()], + spacing: 4, + alignment: .center + ) + + self.addSubview(mainStack) + mainStack.translatesAutoresizingMaskIntoConstraints = false + + NSLayoutConstraint.activate([ + mainStack.topAnchor.constraint(equalTo: self.topAnchor), + mainStack.leftAnchor.constraint(equalTo: self.leftAnchor), + mainStack.rightAnchor.constraint(equalTo: self.rightAnchor), + mainStack.bottomAnchor.constraint(equalTo: self.bottomAnchor), + ]) + } + + func setState(_ state: State, animated: Bool = true) { + + let animateDuration: TimeInterval = animated ? 0.2 : 0 + + UIView.transition(with: self, duration: animateDuration, options: .transitionCrossDissolve) { + self.iconView.image = state == .valid ? AuthFeatureAsset.vsMark.image : AuthFeatureAsset.vfMark.image + } + + UIView.animate(withDuration: animateDuration) { + self.label.attrTextColor = state == .valid ? DSColor.green.color : DSColor.red200.color + + self.label.textString = state == .valid ? self.validText : self.invalidText + } + } +} From 9eb479cd15c9eb92e37f15442f2e50d2886fbe58 Mon Sep 17 00:00:00 2001 From: J0onYEong Date: Tue, 22 Oct 2024 14:52:40 +0900 Subject: [PATCH 07/16] =?UTF-8?q?[IDLE-451]=20idGuideLabel,=20passwordGuid?= =?UTF-8?q?eLabel=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../View/SetIdPasswordViewController.swift | 56 ++++++++----------- 1 file changed, 23 insertions(+), 33 deletions(-) diff --git a/project/Projects/Presentation/Feature/Auth/Sources/Center/AccountRegister/View/SetIdPasswordViewController.swift b/project/Projects/Presentation/Feature/Auth/Sources/Center/AccountRegister/View/SetIdPasswordViewController.swift index aef4b5c8..046aab4d 100644 --- a/project/Projects/Presentation/Feature/Auth/Sources/Center/AccountRegister/View/SetIdPasswordViewController.swift +++ b/project/Projects/Presentation/Feature/Auth/Sources/Center/AccountRegister/View/SetIdPasswordViewController.swift @@ -58,27 +58,19 @@ where T.Input: SetIdAndPasswordInputable & PageProcessInputable, return label }() private let idField: IFType1 = { - - let textField = IFType1( - placeHolderText: "아이디를 입력해주세요", - submitButtonText: "중복 확인" - ) - + let textField = IFType1(placeHolderText: "아이디를 입력해주세요", submitButtonText: "중복 확인") textField.idleTextField.isCompleteImageAvailable = false - return textField }() - private let thisIsValidIdLabel: ResizableUILabel = { - - let label = ResizableUILabel() - label.font = DSKitFontFamily.Pretendard.semiBold.font(size: 12) - label.text = "사용 가능한 아이디입니다." - label.textColor = DSKitAsset.Colors.gray300.color + private let idGuideLabel: IdleLabel = { + let label = IdleLabel(typography: .Body3) + label.textString = "* 아이디는 아래의 조건에 맞추어주세요." + label.attrTextColor = DSColor.gray500.color label.textAlignment = .left - return label }() + // MARK: 비밀번호 입력 private let passwordLabel: IdleLabel = { let label = IdleLabel(typography: .Subtitle4) @@ -95,17 +87,14 @@ where T.Input: SetIdAndPasswordInputable & PageProcessInputable, return textField }() - private let thisIsValidPasswordLabel: ResizableUILabel = { - - let label = ResizableUILabel() - label.font = DSKitFontFamily.Pretendard.semiBold.font(size: 12) - label.text = "사용 가능한 비밀번호입니다." - label.textColor = DSKitAsset.Colors.gray300.color + private let passwordGuideLabel: IdleLabel = { + let label = IdleLabel(typography: .Body3) + label.textString = "* 비밀번호는 아래의 조건에 맞추어주세요." + label.attrTextColor = DSColor.gray500.color label.textAlignment = .left - return label }() - + // MARK: 비밀번호 확인 입력 private let checlPasswordLabel: IdleLabel = { let label = IdleLabel(typography: .Subtitle4) @@ -158,10 +147,10 @@ where T.Input: SetIdAndPasswordInputable & PageProcessInputable, processTitleLabel, idLabel, idField, - thisIsValidIdLabel, + idGuideLabel, passwordLabel, passwordField, - thisIsValidPasswordLabel, + passwordGuideLabel, checlPasswordLabel, checkPasswordField, buttonContainer, @@ -184,9 +173,11 @@ where T.Input: SetIdAndPasswordInputable & PageProcessInputable, idField.leadingAnchor.constraint(equalTo: view.layoutMarginsGuide.leadingAnchor), idField.trailingAnchor.constraint(equalTo: view.layoutMarginsGuide.trailingAnchor), - thisIsValidIdLabel.topAnchor.constraint(equalTo: idField.bottomAnchor, constant: 6), - thisIsValidIdLabel.leadingAnchor.constraint(equalTo: view.layoutMarginsGuide.leadingAnchor), - thisIsValidIdLabel.trailingAnchor.constraint(equalTo: view.layoutMarginsGuide.trailingAnchor), + idGuideLabel.topAnchor.constraint(equalTo: idField.bottomAnchor, constant: 12), + idGuideLabel.leadingAnchor.constraint(equalTo: view.layoutMarginsGuide.leadingAnchor), + idGuideLabel.trailingAnchor.constraint(equalTo: view.layoutMarginsGuide.trailingAnchor), + + // passwordLabel.topAnchor.constraint(equalTo: idField.bottomAnchor, constant: 32), passwordLabel.leadingAnchor.constraint(equalTo: view.layoutMarginsGuide.leadingAnchor), @@ -196,9 +187,11 @@ where T.Input: SetIdAndPasswordInputable & PageProcessInputable, passwordField.leadingAnchor.constraint(equalTo: view.layoutMarginsGuide.leadingAnchor), passwordField.trailingAnchor.constraint(equalTo: view.layoutMarginsGuide.trailingAnchor), - thisIsValidPasswordLabel.topAnchor.constraint(equalTo: passwordField.bottomAnchor, constant: 6), - thisIsValidPasswordLabel.leadingAnchor.constraint(equalTo: view.layoutMarginsGuide.leadingAnchor), - thisIsValidPasswordLabel.trailingAnchor.constraint(equalTo: view.layoutMarginsGuide.trailingAnchor), + passwordGuideLabel.topAnchor.constraint(equalTo: passwordField.bottomAnchor, constant: 12), + passwordGuideLabel.leadingAnchor.constraint(equalTo: view.layoutMarginsGuide.leadingAnchor), + passwordGuideLabel.trailingAnchor.constraint(equalTo: view.layoutMarginsGuide.trailingAnchor), + + // checlPasswordLabel.topAnchor.constraint(equalTo: passwordField.bottomAnchor, constant: 32), checlPasswordLabel.leadingAnchor.constraint(equalTo: view.layoutMarginsGuide.leadingAnchor), @@ -218,9 +211,6 @@ where T.Input: SetIdAndPasswordInputable & PageProcessInputable, idField.button.setEnabled(false) - thisIsValidIdLabel.isHidden = true - thisIsValidPasswordLabel.isHidden = true - // - CTA버튼 비활성화 buttonContainer.nextButton.setEnabled(false) } From 1fceea702c3161d6c10324d0432dd2d693481b8a Mon Sep 17 00:00:00 2001 From: J0onYEong Date: Tue, 22 Oct 2024 15:11:46 +0900 Subject: [PATCH 08/16] =?UTF-8?q?[IDLE-451]=20id,=20pw=EA=B2=80=EC=A6=9D?= =?UTF-8?q?=EC=83=81=ED=83=9C=20UI=20=EB=A0=88=EC=9D=B4=EC=95=84=EC=9B=83?= =?UTF-8?q?=20=EB=B0=B0=EC=B9=98=EC=99=84=EB=A3=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Center/AccountRegister/Model/asd.swift | 33 ++++++++++ .../View/Component/ValidationIndicator.swift | 20 +++--- .../View/SetIdPasswordViewController.swift | 63 ++++++++++++++----- 3 files changed, 90 insertions(+), 26 deletions(-) create mode 100644 project/Projects/Presentation/Feature/Auth/Sources/Center/AccountRegister/Model/asd.swift diff --git a/project/Projects/Presentation/Feature/Auth/Sources/Center/AccountRegister/Model/asd.swift b/project/Projects/Presentation/Feature/Auth/Sources/Center/AccountRegister/Model/asd.swift new file mode 100644 index 00000000..47f934a3 --- /dev/null +++ b/project/Projects/Presentation/Feature/Auth/Sources/Center/AccountRegister/Model/asd.swift @@ -0,0 +1,33 @@ +// +// asd.swift +// AuthFeature +// +// Created by choijunios on 10/22/24. +// + +import Foundation + +enum PasswordValidationCase: Int, CaseIterable { + case characterCount + case alphabetAndNumberIncluded + case noEmptySpace + case unsuccessiveSame3words + + var indicatorText: String { + + switch self { + case .characterCount: + "8자~20자 사이" + case .alphabetAndNumberIncluded: + "영문자와 숫자 반드시 하나씩 포함" + case .noEmptySpace: + "공백 문자 사용 금지" + case .unsuccessiveSame3words: + "연속된 문자 3개 이상 사용 금지" + } + } + + static var items: [PasswordValidationCase] { + PasswordValidationCase.allCases.sorted { $0.rawValue < $1.rawValue } + } +} diff --git a/project/Projects/Presentation/Feature/Auth/Sources/Center/AccountRegister/View/Component/ValidationIndicator.swift b/project/Projects/Presentation/Feature/Auth/Sources/Center/AccountRegister/View/Component/ValidationIndicator.swift index 2e755c32..573525f0 100644 --- a/project/Projects/Presentation/Feature/Auth/Sources/Center/AccountRegister/View/Component/ValidationIndicator.swift +++ b/project/Projects/Presentation/Feature/Auth/Sources/Center/AccountRegister/View/Component/ValidationIndicator.swift @@ -17,10 +17,6 @@ class ValidationIndicator: UIView { case invalid } - // Init - let validText: String - let invalidText: String - // View let iconView: UIImageView = { let view: UIImageView = .init() @@ -32,9 +28,10 @@ class ValidationIndicator: UIView { return label }() - init(validText: String, invalidText: String) { - self.validText = validText - self.invalidText = invalidText + init(labelText: String) { + + self.label.textString = labelText + super.init(frame: .zero) setLayout() @@ -46,13 +43,18 @@ class ValidationIndicator: UIView { let mainStack: HStack = HStack( [iconView, label, Spacer()], spacing: 4, - alignment: .center + alignment: .center, + distribution: .fill ) self.addSubview(mainStack) mainStack.translatesAutoresizingMaskIntoConstraints = false NSLayoutConstraint.activate([ + + iconView.heightAnchor.constraint(equalToConstant: 24), + iconView.widthAnchor.constraint(equalTo: iconView.heightAnchor), + mainStack.topAnchor.constraint(equalTo: self.topAnchor), mainStack.leftAnchor.constraint(equalTo: self.leftAnchor), mainStack.rightAnchor.constraint(equalTo: self.rightAnchor), @@ -70,8 +72,6 @@ class ValidationIndicator: UIView { UIView.animate(withDuration: animateDuration) { self.label.attrTextColor = state == .valid ? DSColor.green.color : DSColor.red200.color - - self.label.textString = state == .valid ? self.validText : self.invalidText } } } diff --git a/project/Projects/Presentation/Feature/Auth/Sources/Center/AccountRegister/View/SetIdPasswordViewController.swift b/project/Projects/Presentation/Feature/Auth/Sources/Center/AccountRegister/View/SetIdPasswordViewController.swift index 046aab4d..b84884d1 100644 --- a/project/Projects/Presentation/Feature/Auth/Sources/Center/AccountRegister/View/SetIdPasswordViewController.swift +++ b/project/Projects/Presentation/Feature/Auth/Sources/Center/AccountRegister/View/SetIdPasswordViewController.swift @@ -42,7 +42,7 @@ where T.Input: SetIdAndPasswordInputable & PageProcessInputable, // View - private let processTitleLabel: IdleLabel = { + let processTitleLabel: IdleLabel = { let label = IdleLabel(typography: .Heading2) label.textString = "아이디와 비밀번호를 설정해주세요." label.textAlignment = .left @@ -50,19 +50,19 @@ where T.Input: SetIdAndPasswordInputable & PageProcessInputable, }() // MARK: Id 입력 - private let idLabel: IdleLabel = { + let idLabel: IdleLabel = { let label = IdleLabel(typography: .Subtitle4) label.textString = "아이디 설정" label.attrTextColor = DSColor.gray500.color label.textAlignment = .left return label }() - private let idField: IFType1 = { + let idField: IFType1 = { let textField = IFType1(placeHolderText: "아이디를 입력해주세요", submitButtonText: "중복 확인") textField.idleTextField.isCompleteImageAvailable = false return textField }() - private let idGuideLabel: IdleLabel = { + let idGuideLabel: IdleLabel = { let label = IdleLabel(typography: .Body3) label.textString = "* 아이디는 아래의 조건에 맞추어주세요." label.attrTextColor = DSColor.gray500.color @@ -70,16 +70,19 @@ where T.Input: SetIdAndPasswordInputable & PageProcessInputable, return label }() + // MARK: 아이디 검증 라벨 + let idValidationIndicator: ValidationIndicator = .init(labelText: "6자~20자 사이") + // MARK: 비밀번호 입력 - private let passwordLabel: IdleLabel = { + let passwordLabel: IdleLabel = { let label = IdleLabel(typography: .Subtitle4) label.textString = "비밀번호 설정" label.attrTextColor = DSColor.gray500.color label.textAlignment = .left return label }() - private let passwordField: IdleOneLineInputField = { + let passwordField: IdleOneLineInputField = { let textField = IdleOneLineInputField( placeHolderText: "비밀번호를 입력해주세요." @@ -87,23 +90,32 @@ where T.Input: SetIdAndPasswordInputable & PageProcessInputable, return textField }() - private let passwordGuideLabel: IdleLabel = { + let passwordGuideLabel: IdleLabel = { let label = IdleLabel(typography: .Body3) label.textString = "* 비밀번호는 아래의 조건에 맞추어주세요." label.attrTextColor = DSColor.gray500.color label.textAlignment = .left return label }() + + // MARK: 비밀번호 검증 라벨 + let passwordValidationIndicator: [PasswordValidationCase: ValidationIndicator] = { + var dict: [PasswordValidationCase: ValidationIndicator] = [:] + for item in PasswordValidationCase.items { + dict[item] = ValidationIndicator(labelText: item.indicatorText) + } + return dict + }() // MARK: 비밀번호 확인 입력 - private let checlPasswordLabel: IdleLabel = { + let checlPasswordLabel: IdleLabel = { let label = IdleLabel(typography: .Subtitle4) label.textString = "비밀번호 확인" label.attrTextColor = DSColor.gray500.color label.textAlignment = .left return label }() - private let checkPasswordField: IdleOneLineInputField = { + let checkPasswordField: IdleOneLineInputField = { let textField = IdleOneLineInputField( placeHolderText: "비밀번호를 한번 더 입력해주세요." @@ -112,13 +124,13 @@ where T.Input: SetIdAndPasswordInputable & PageProcessInputable, return textField }() - private let buttonContainer: PrevOrNextContainer = { + let buttonContainer: PrevOrNextContainer = { let button = PrevOrNextContainer() button.nextButton.label.textString = "완료" return button }() - public init(viewModel: T) { + init(viewModel: T) { super.init(nibName: nil, bundle: nil) @@ -132,7 +144,7 @@ where T.Input: SetIdAndPasswordInputable & PageProcessInputable, required init?(coder: NSCoder) { fatalError() } - public override func viewDidLoad() { + override func viewDidLoad() { view.backgroundColor = .clear } @@ -142,15 +154,25 @@ where T.Input: SetIdAndPasswordInputable & PageProcessInputable, private func setAutoLayout() { view.layoutMargins = .init(top: 28, left: 20, bottom: 0, right: 20) + + // pw validation indicators + + let pwValidationIndicators: VStack = VStack( + PasswordValidationCase.items.compactMap { item in passwordValidationIndicator[item] }, + spacing: 4, + alignment: .fill + ) [ processTitleLabel, idLabel, idField, idGuideLabel, + idValidationIndicator, passwordLabel, passwordField, passwordGuideLabel, + pwValidationIndicators, checlPasswordLabel, checkPasswordField, buttonContainer, @@ -177,9 +199,11 @@ where T.Input: SetIdAndPasswordInputable & PageProcessInputable, idGuideLabel.leadingAnchor.constraint(equalTo: view.layoutMarginsGuide.leadingAnchor), idGuideLabel.trailingAnchor.constraint(equalTo: view.layoutMarginsGuide.trailingAnchor), - // + idValidationIndicator.topAnchor.constraint(equalTo: idGuideLabel.bottomAnchor, constant: 6), + idValidationIndicator.leadingAnchor.constraint(equalTo: view.layoutMarginsGuide.leadingAnchor), + idValidationIndicator.trailingAnchor.constraint(equalTo: view.layoutMarginsGuide.trailingAnchor), - passwordLabel.topAnchor.constraint(equalTo: idField.bottomAnchor, constant: 32), + passwordLabel.topAnchor.constraint(equalTo: idValidationIndicator.bottomAnchor, constant: 24), passwordLabel.leadingAnchor.constraint(equalTo: view.layoutMarginsGuide.leadingAnchor), passwordLabel.trailingAnchor.constraint(equalTo: view.layoutMarginsGuide.trailingAnchor), @@ -191,9 +215,11 @@ where T.Input: SetIdAndPasswordInputable & PageProcessInputable, passwordGuideLabel.leadingAnchor.constraint(equalTo: view.layoutMarginsGuide.leadingAnchor), passwordGuideLabel.trailingAnchor.constraint(equalTo: view.layoutMarginsGuide.trailingAnchor), - // + pwValidationIndicators.topAnchor.constraint(equalTo: passwordGuideLabel.bottomAnchor, constant: 6), + pwValidationIndicators.leadingAnchor.constraint(equalTo: view.layoutMarginsGuide.leadingAnchor), + pwValidationIndicators.trailingAnchor.constraint(equalTo: view.layoutMarginsGuide.trailingAnchor), - checlPasswordLabel.topAnchor.constraint(equalTo: passwordField.bottomAnchor, constant: 32), + checlPasswordLabel.topAnchor.constraint(equalTo: pwValidationIndicators.bottomAnchor, constant: 24), checlPasswordLabel.leadingAnchor.constraint(equalTo: view.layoutMarginsGuide.leadingAnchor), checlPasswordLabel.trailingAnchor.constraint(equalTo: view.layoutMarginsGuide.trailingAnchor), @@ -211,6 +237,11 @@ where T.Input: SetIdAndPasswordInputable & PageProcessInputable, idField.button.setEnabled(false) + idValidationIndicator.setState(.invalid) + passwordValidationIndicator.values.forEach { indicator in + indicator.setState(.invalid) + } + // - CTA버튼 비활성화 buttonContainer.nextButton.setEnabled(false) } From cd627336c55059a971c18e710d089ab4188e2e1a Mon Sep 17 00:00:00 2001 From: J0onYEong Date: Tue, 22 Oct 2024 15:22:45 +0900 Subject: [PATCH 09/16] =?UTF-8?q?[IDLE-451]=20id,=20pw=EC=9E=85=EB=A0=A5?= =?UTF-8?q?=ED=99=94=EB=A9=B4=20=EC=8A=A4=ED=81=AC=EB=A1=A4=EB=B7=B0=20?= =?UTF-8?q?=EC=A0=81=EC=9A=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../View/SetIdPasswordViewController.swift | 97 +++++++++++++------ 1 file changed, 68 insertions(+), 29 deletions(-) diff --git a/project/Projects/Presentation/Feature/Auth/Sources/Center/AccountRegister/View/SetIdPasswordViewController.swift b/project/Projects/Presentation/Feature/Auth/Sources/Center/AccountRegister/View/SetIdPasswordViewController.swift index b84884d1..7b7270e3 100644 --- a/project/Projects/Presentation/Feature/Auth/Sources/Center/AccountRegister/View/SetIdPasswordViewController.swift +++ b/project/Projects/Presentation/Feature/Auth/Sources/Center/AccountRegister/View/SetIdPasswordViewController.swift @@ -163,8 +163,27 @@ where T.Input: SetIdAndPasswordInputable & PageProcessInputable, alignment: .fill ) + let scrollView: UIScrollView = .init() + let scrollView_contentGuide = scrollView.contentLayoutGuide + let scrollView_frameGuide = scrollView.frameLayoutGuide + let contentView: UIView = .init() + + scrollView.addSubview(contentView) + contentView.translatesAutoresizingMaskIntoConstraints = false + + NSLayoutConstraint.activate([ + + contentView.widthAnchor.constraint(equalTo: scrollView_frameGuide.widthAnchor), + + contentView.topAnchor.constraint(equalTo: scrollView_contentGuide.topAnchor), + contentView.leftAnchor.constraint(equalTo: scrollView_contentGuide.leftAnchor), + contentView.rightAnchor.constraint(equalTo: scrollView_contentGuide.rightAnchor), + contentView.bottomAnchor.constraint(equalTo: scrollView_contentGuide.bottomAnchor), + ]) + + contentView.layoutMargins = .init(top: 28,left: 20, bottom: 48, right: 20) + [ - processTitleLabel, idLabel, idField, idGuideLabel, @@ -175,57 +194,77 @@ where T.Input: SetIdAndPasswordInputable & PageProcessInputable, pwValidationIndicators, checlPasswordLabel, checkPasswordField, - buttonContainer, ].forEach { - view.addSubview($0) $0.translatesAutoresizingMaskIntoConstraints = false + contentView.addSubview($0) } NSLayoutConstraint.activate([ - - processTitleLabel.topAnchor.constraint(equalTo: view.layoutMarginsGuide.topAnchor), - processTitleLabel.leadingAnchor.constraint(equalTo: view.layoutMarginsGuide.leadingAnchor), - processTitleLabel.trailingAnchor.constraint(equalTo: view.layoutMarginsGuide.trailingAnchor), - - idLabel.topAnchor.constraint(equalTo: processTitleLabel.bottomAnchor, constant: 32), - idLabel.leadingAnchor.constraint(equalTo: view.layoutMarginsGuide.leadingAnchor), - idLabel.trailingAnchor.constraint(equalTo: view.layoutMarginsGuide.trailingAnchor), + + idLabel.topAnchor.constraint(equalTo: contentView.layoutMarginsGuide.topAnchor), + idLabel.leadingAnchor.constraint(equalTo: contentView.layoutMarginsGuide.leadingAnchor), + idLabel.trailingAnchor.constraint(equalTo: contentView.layoutMarginsGuide.trailingAnchor), idField.topAnchor.constraint(equalTo: idLabel.bottomAnchor, constant: 4), - idField.leadingAnchor.constraint(equalTo: view.layoutMarginsGuide.leadingAnchor), - idField.trailingAnchor.constraint(equalTo: view.layoutMarginsGuide.trailingAnchor), + idField.leadingAnchor.constraint(equalTo: contentView.layoutMarginsGuide.leadingAnchor), + idField.trailingAnchor.constraint(equalTo: contentView.layoutMarginsGuide.trailingAnchor), idGuideLabel.topAnchor.constraint(equalTo: idField.bottomAnchor, constant: 12), - idGuideLabel.leadingAnchor.constraint(equalTo: view.layoutMarginsGuide.leadingAnchor), - idGuideLabel.trailingAnchor.constraint(equalTo: view.layoutMarginsGuide.trailingAnchor), + idGuideLabel.leadingAnchor.constraint(equalTo: contentView.layoutMarginsGuide.leadingAnchor), + idGuideLabel.trailingAnchor.constraint(equalTo: contentView.layoutMarginsGuide.trailingAnchor), idValidationIndicator.topAnchor.constraint(equalTo: idGuideLabel.bottomAnchor, constant: 6), - idValidationIndicator.leadingAnchor.constraint(equalTo: view.layoutMarginsGuide.leadingAnchor), - idValidationIndicator.trailingAnchor.constraint(equalTo: view.layoutMarginsGuide.trailingAnchor), + idValidationIndicator.leadingAnchor.constraint(equalTo: contentView.layoutMarginsGuide.leadingAnchor), + idValidationIndicator.trailingAnchor.constraint(equalTo: contentView.layoutMarginsGuide.trailingAnchor), passwordLabel.topAnchor.constraint(equalTo: idValidationIndicator.bottomAnchor, constant: 24), - passwordLabel.leadingAnchor.constraint(equalTo: view.layoutMarginsGuide.leadingAnchor), - passwordLabel.trailingAnchor.constraint(equalTo: view.layoutMarginsGuide.trailingAnchor), + passwordLabel.leadingAnchor.constraint(equalTo: contentView.layoutMarginsGuide.leadingAnchor), + passwordLabel.trailingAnchor.constraint(equalTo: contentView.layoutMarginsGuide.trailingAnchor), passwordField.topAnchor.constraint(equalTo: passwordLabel.bottomAnchor, constant: 6), - passwordField.leadingAnchor.constraint(equalTo: view.layoutMarginsGuide.leadingAnchor), - passwordField.trailingAnchor.constraint(equalTo: view.layoutMarginsGuide.trailingAnchor), + passwordField.leadingAnchor.constraint(equalTo: contentView.layoutMarginsGuide.leadingAnchor), + passwordField.trailingAnchor.constraint(equalTo: contentView.layoutMarginsGuide.trailingAnchor), passwordGuideLabel.topAnchor.constraint(equalTo: passwordField.bottomAnchor, constant: 12), - passwordGuideLabel.leadingAnchor.constraint(equalTo: view.layoutMarginsGuide.leadingAnchor), - passwordGuideLabel.trailingAnchor.constraint(equalTo: view.layoutMarginsGuide.trailingAnchor), + passwordGuideLabel.leadingAnchor.constraint(equalTo: contentView.layoutMarginsGuide.leadingAnchor), + passwordGuideLabel.trailingAnchor.constraint(equalTo: contentView.layoutMarginsGuide.trailingAnchor), pwValidationIndicators.topAnchor.constraint(equalTo: passwordGuideLabel.bottomAnchor, constant: 6), - pwValidationIndicators.leadingAnchor.constraint(equalTo: view.layoutMarginsGuide.leadingAnchor), - pwValidationIndicators.trailingAnchor.constraint(equalTo: view.layoutMarginsGuide.trailingAnchor), + pwValidationIndicators.leadingAnchor.constraint(equalTo: contentView.layoutMarginsGuide.leadingAnchor), + pwValidationIndicators.trailingAnchor.constraint(equalTo: contentView.layoutMarginsGuide.trailingAnchor), checlPasswordLabel.topAnchor.constraint(equalTo: pwValidationIndicators.bottomAnchor, constant: 24), - checlPasswordLabel.leadingAnchor.constraint(equalTo: view.layoutMarginsGuide.leadingAnchor), - checlPasswordLabel.trailingAnchor.constraint(equalTo: view.layoutMarginsGuide.trailingAnchor), + checlPasswordLabel.leadingAnchor.constraint(equalTo: contentView.layoutMarginsGuide.leadingAnchor), + checlPasswordLabel.trailingAnchor.constraint(equalTo: contentView.layoutMarginsGuide.trailingAnchor), checkPasswordField.topAnchor.constraint(equalTo: checlPasswordLabel.bottomAnchor, constant: 6), - checkPasswordField.leadingAnchor.constraint(equalTo: view.layoutMarginsGuide.leadingAnchor), - checkPasswordField.trailingAnchor.constraint(equalTo: view.layoutMarginsGuide.trailingAnchor), + checkPasswordField.leadingAnchor.constraint(equalTo: contentView.layoutMarginsGuide.leadingAnchor), + checkPasswordField.trailingAnchor.constraint(equalTo: contentView.layoutMarginsGuide.trailingAnchor), + checkPasswordField.bottomAnchor.constraint(equalTo: contentView.layoutMarginsGuide.bottomAnchor) + ]) + + + [ + processTitleLabel, + + scrollView, + + buttonContainer, + ].forEach { + view.addSubview($0) + $0.translatesAutoresizingMaskIntoConstraints = false + } + + NSLayoutConstraint.activate([ + + processTitleLabel.topAnchor.constraint(equalTo: view.layoutMarginsGuide.topAnchor), + processTitleLabel.leadingAnchor.constraint(equalTo: view.layoutMarginsGuide.leadingAnchor), + processTitleLabel.trailingAnchor.constraint(equalTo: view.layoutMarginsGuide.trailingAnchor), + + scrollView.topAnchor.constraint(equalTo: processTitleLabel.bottomAnchor), + scrollView.leadingAnchor.constraint(equalTo: view.safeAreaLayoutGuide.leadingAnchor), + scrollView.trailingAnchor.constraint(equalTo: view.safeAreaLayoutGuide.trailingAnchor), + scrollView.bottomAnchor.constraint(equalTo: buttonContainer.topAnchor, constant: -12), buttonContainer.bottomAnchor.constraint(equalTo: view.safeAreaLayoutGuide.bottomAnchor, constant: -14), buttonContainer.leftAnchor.constraint(equalTo: view.layoutMarginsGuide.leftAnchor), From 8ba9bb6b2898fc4ccf572ad54c5fda1efa0f70a1 Mon Sep 17 00:00:00 2001 From: J0onYEong Date: Tue, 22 Oct 2024 15:27:21 +0900 Subject: [PATCH 10/16] =?UTF-8?q?[IDLE-451]=20=EC=8A=A4=ED=81=AC=EB=A1=A4?= =?UTF-8?q?=EB=B7=B0=20=EB=A0=88=EC=9D=B4=EC=95=84=EC=9B=83=20=EC=A1=B0?= =?UTF-8?q?=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../View/SetIdPasswordViewController.swift | 23 ++++++++----------- 1 file changed, 10 insertions(+), 13 deletions(-) diff --git a/project/Projects/Presentation/Feature/Auth/Sources/Center/AccountRegister/View/SetIdPasswordViewController.swift b/project/Projects/Presentation/Feature/Auth/Sources/Center/AccountRegister/View/SetIdPasswordViewController.swift index 7b7270e3..e9227ca1 100644 --- a/project/Projects/Presentation/Feature/Auth/Sources/Center/AccountRegister/View/SetIdPasswordViewController.swift +++ b/project/Projects/Presentation/Feature/Auth/Sources/Center/AccountRegister/View/SetIdPasswordViewController.swift @@ -152,9 +152,7 @@ where T.Input: SetIdAndPasswordInputable & PageProcessInputable, private func setAppearance() { } private func setAutoLayout() { - - view.layoutMargins = .init(top: 28, left: 20, bottom: 0, right: 20) - + // pw validation indicators let pwValidationIndicators: VStack = VStack( @@ -184,6 +182,7 @@ where T.Input: SetIdAndPasswordInputable & PageProcessInputable, contentView.layoutMargins = .init(top: 28,left: 20, bottom: 48, right: 20) [ + processTitleLabel, idLabel, idField, idGuideLabel, @@ -200,8 +199,12 @@ where T.Input: SetIdAndPasswordInputable & PageProcessInputable, } NSLayoutConstraint.activate([ + + processTitleLabel.topAnchor.constraint(equalTo: contentView.layoutMarginsGuide.topAnchor), + processTitleLabel.leadingAnchor.constraint(equalTo: contentView.layoutMarginsGuide.leadingAnchor), + processTitleLabel.trailingAnchor.constraint(equalTo: contentView.layoutMarginsGuide.trailingAnchor), - idLabel.topAnchor.constraint(equalTo: contentView.layoutMarginsGuide.topAnchor), + idLabel.topAnchor.constraint(equalTo: processTitleLabel.layoutMarginsGuide.topAnchor, constant: 28), idLabel.leadingAnchor.constraint(equalTo: contentView.layoutMarginsGuide.leadingAnchor), idLabel.trailingAnchor.constraint(equalTo: contentView.layoutMarginsGuide.trailingAnchor), @@ -245,8 +248,6 @@ where T.Input: SetIdAndPasswordInputable & PageProcessInputable, [ - processTitleLabel, - scrollView, buttonContainer, @@ -256,19 +257,15 @@ where T.Input: SetIdAndPasswordInputable & PageProcessInputable, } NSLayoutConstraint.activate([ - - processTitleLabel.topAnchor.constraint(equalTo: view.layoutMarginsGuide.topAnchor), - processTitleLabel.leadingAnchor.constraint(equalTo: view.layoutMarginsGuide.leadingAnchor), - processTitleLabel.trailingAnchor.constraint(equalTo: view.layoutMarginsGuide.trailingAnchor), - scrollView.topAnchor.constraint(equalTo: processTitleLabel.bottomAnchor), + scrollView.topAnchor.constraint(equalTo: view.layoutMarginsGuide.topAnchor), scrollView.leadingAnchor.constraint(equalTo: view.safeAreaLayoutGuide.leadingAnchor), scrollView.trailingAnchor.constraint(equalTo: view.safeAreaLayoutGuide.trailingAnchor), scrollView.bottomAnchor.constraint(equalTo: buttonContainer.topAnchor, constant: -12), buttonContainer.bottomAnchor.constraint(equalTo: view.safeAreaLayoutGuide.bottomAnchor, constant: -14), - buttonContainer.leftAnchor.constraint(equalTo: view.layoutMarginsGuide.leftAnchor), - buttonContainer.rightAnchor.constraint(equalTo: view.layoutMarginsGuide.rightAnchor), + buttonContainer.leadingAnchor.constraint(equalTo: view.safeAreaLayoutGuide.leadingAnchor, constant: 20), + buttonContainer.trailingAnchor.constraint(equalTo: view.safeAreaLayoutGuide.trailingAnchor, constant: -20), ]) } From 5cca7d25a533e278453a1ca5e37d155a5ff3d96d Mon Sep 17 00:00:00 2001 From: J0onYEong Date: Tue, 22 Oct 2024 15:38:43 +0900 Subject: [PATCH 11/16] =?UTF-8?q?[IDLE-451]=203=EA=B0=9C=EC=9D=B4=EC=83=81?= =?UTF-8?q?=20=EC=97=B0=EC=86=8D=EB=90=9C=20=EB=AC=B8=EC=9E=90=20=EA=B2=80?= =?UTF-8?q?=EC=A6=9D=20=EB=A1=9C=EC=A7=81=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 3번이 아니라 3번 이상으로 변경 --- .../DefaultAuthInputValidationUseCase.swift | 2 +- .../Auth/Center/PasswordValidationState.swift | 2 ++ .../View/SetIdPasswordViewController.swift | 18 +++++++++++++++--- 3 files changed, 18 insertions(+), 4 deletions(-) diff --git a/project/Projects/Domain/Sources/ConcreteUseCase/Auth/DefaultAuthInputValidationUseCase.swift b/project/Projects/Domain/Sources/ConcreteUseCase/Auth/DefaultAuthInputValidationUseCase.swift index b82ff8c9..d40b601a 100644 --- a/project/Projects/Domain/Sources/ConcreteUseCase/Auth/DefaultAuthInputValidationUseCase.swift +++ b/project/Projects/Domain/Sources/ConcreteUseCase/Auth/DefaultAuthInputValidationUseCase.swift @@ -82,7 +82,7 @@ public class DefaultAuthInputValidationUseCase: AuthInputValidationUseCase { let noWhitespaceIsValid = evaluateStringWith(regex: noWhitespaceRegex, targetString: password) // 4. 연속된 문자 3개 이상 사용 금지 - let noTripleRepeatedCharsRegex = "(.)\\1\\1" + let noTripleRepeatedCharsRegex = "(.)\\1{2,}" let noTripleRepeatedCharsIsValid = !evaluateStringWith(regex: noTripleRepeatedCharsRegex, targetString: password) return PasswordValidationState( diff --git a/project/Projects/Domain/Sources/Entity/State/Auth/Center/PasswordValidationState.swift b/project/Projects/Domain/Sources/Entity/State/Auth/Center/PasswordValidationState.swift index a610c79f..fa88051c 100644 --- a/project/Projects/Domain/Sources/Entity/State/Auth/Center/PasswordValidationState.swift +++ b/project/Projects/Domain/Sources/Entity/State/Auth/Center/PasswordValidationState.swift @@ -42,6 +42,8 @@ public class PasswordValidationState { noEmptySpace == .valid && unsuccessiveSame3words == .valid + && + isEditingAndCheckingPasswordsEqual ) } diff --git a/project/Projects/Presentation/Feature/Auth/Sources/Center/AccountRegister/View/SetIdPasswordViewController.swift b/project/Projects/Presentation/Feature/Auth/Sources/Center/AccountRegister/View/SetIdPasswordViewController.swift index e9227ca1..546f50e6 100644 --- a/project/Projects/Presentation/Feature/Auth/Sources/Center/AccountRegister/View/SetIdPasswordViewController.swift +++ b/project/Projects/Presentation/Feature/Auth/Sources/Center/AccountRegister/View/SetIdPasswordViewController.swift @@ -337,6 +337,7 @@ where T.Input: SetIdAndPasswordInputable & PageProcessInputable, guard let self else { return } // 검증 라벨 색상변경 + idValidationIndicator.setState(isValid ? .valid : .invalid) // 중복확인버튼 활성화 idField.button.setEnabled(isValid) @@ -365,16 +366,27 @@ where T.Input: SetIdAndPasswordInputable & PageProcessInputable, .share() passwordValidationResult - .subscribe(onNext: { [weak self] state in + .subscribe(onNext: { + [weak self] state in guard let self else { return } // 비밀번호 체킹 상태 업데이트 - + passwordValidationIndicator[.characterCount]?.setState( + state.characterCount == .valid ? .valid : .invalid + ) + passwordValidationIndicator[.alphabetAndNumberIncluded]?.setState( + state.alphabetAndNumberIncluded == .valid ? .valid : .invalid + ) + passwordValidationIndicator[.noEmptySpace]?.setState( + state.noEmptySpace == .valid ? .valid : .invalid + ) + passwordValidationIndicator[.unsuccessiveSame3words]?.setState( + state.unsuccessiveSame3words == .valid ? .valid : .invalid + ) }) .disposed(by: disposeBag) - // id, password 유효성 검사 Observable From 87f6839db1850bc03343f3e896c0e41ac5ea12a6 Mon Sep 17 00:00:00 2001 From: J0onYEong Date: Tue, 22 Oct 2024 15:40:25 +0900 Subject: [PATCH 12/16] =?UTF-8?q?[IDLE-451]=20=EA=B2=80=EC=A6=9D=20?= =?UTF-8?q?=ED=91=9C=EC=8B=9C=EC=9E=90=20=EC=95=A0=EB=8B=88=EB=A9=94?= =?UTF-8?q?=EC=9D=B4=EC=85=98=20=EC=A0=9C=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../AccountRegister/View/Component/ValidationIndicator.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/project/Projects/Presentation/Feature/Auth/Sources/Center/AccountRegister/View/Component/ValidationIndicator.swift b/project/Projects/Presentation/Feature/Auth/Sources/Center/AccountRegister/View/Component/ValidationIndicator.swift index 573525f0..03288065 100644 --- a/project/Projects/Presentation/Feature/Auth/Sources/Center/AccountRegister/View/Component/ValidationIndicator.swift +++ b/project/Projects/Presentation/Feature/Auth/Sources/Center/AccountRegister/View/Component/ValidationIndicator.swift @@ -62,7 +62,7 @@ class ValidationIndicator: UIView { ]) } - func setState(_ state: State, animated: Bool = true) { + func setState(_ state: State, animated: Bool = false) { let animateDuration: TimeInterval = animated ? 0.2 : 0 From 35f96c097e0345a201602b29c1d4350b65c56c7d Mon Sep 17 00:00:00 2001 From: J0onYEong Date: Tue, 22 Oct 2024 16:04:33 +0900 Subject: [PATCH 13/16] =?UTF-8?q?[IDLE-451]=20=EB=B9=84=EB=B0=80=EB=B2=88?= =?UTF-8?q?=ED=98=B8=20=EB=B3=80=EA=B2=BD=EC=8B=9C=20=EA=B2=80=EC=A6=9D=20?= =?UTF-8?q?UI=20=EA=B5=AC=ED=98=84=20=EB=B0=8F=20=ED=85=8C=EC=8A=A4?= =?UTF-8?q?=ED=8A=B8=20=EC=99=84=EB=A3=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ExampleApp/Sources/SceneDelegate.swift | 14 ++ .../CenterAccountRegisterViewModel.swift | 9 +- .../View/SetIdPasswordViewController.swift | 12 +- .../CenterSetupNewPasswordViewModel.swift | 40 ++++- .../ValidateNewPasswordViewController.swift | 158 ++++++++++-------- 5 files changed, 153 insertions(+), 80 deletions(-) diff --git a/project/Projects/Presentation/Feature/Auth/ExampleApp/Sources/SceneDelegate.swift b/project/Projects/Presentation/Feature/Auth/ExampleApp/Sources/SceneDelegate.swift index f146e8c5..c109150c 100644 --- a/project/Projects/Presentation/Feature/Auth/ExampleApp/Sources/SceneDelegate.swift +++ b/project/Projects/Presentation/Feature/Auth/ExampleApp/Sources/SceneDelegate.swift @@ -18,6 +18,7 @@ class SceneDelegate: UIResponder, UIWindowSceneDelegate { var authCoordinator: AuthCoordinator? var centerAccountRegisterCoordinator: CenterAccountRegisterCoordinator? + var centerLogInCoordinator: CenterLogInCoordinator? func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) { @@ -37,6 +38,19 @@ class SceneDelegate: UIResponder, UIWindowSceneDelegate { self?.centerAccountRegisterCoordinator = coordinator coordinator.start() + case .loginPage: + let coordinator = CenterLogInCoordinator() + + coordinator.startFlow = { desination in + switch desination { + default: + // 센터 메인페이지로 이동 + return + } + } + + self?.centerLogInCoordinator = coordinator + coordinator.start() default: // 테스트시 추가가능 return diff --git a/project/Projects/Presentation/Feature/Auth/Sources/Center/AccountRegister/CenterAccountRegisterViewModel.swift b/project/Projects/Presentation/Feature/Auth/Sources/Center/AccountRegister/CenterAccountRegisterViewModel.swift index a92ed4e6..96216dae 100644 --- a/project/Projects/Presentation/Feature/Auth/Sources/Center/AccountRegister/CenterAccountRegisterViewModel.swift +++ b/project/Projects/Presentation/Feature/Auth/Sources/Center/AccountRegister/CenterAccountRegisterViewModel.swift @@ -114,7 +114,7 @@ extension CenterAccountRegisterViewModel { printIfDebug("[CenterRegisterViewModel] 중복성 검사 대상 id: \(id)") - // 가장 최근 id저장 + // 검증시 가장 최근 id저장 vm.stateObject.id = id #if DEBUG @@ -249,9 +249,10 @@ extension CenterAccountRegisterViewModel { // MARK: 최종 회원가입 버튼 let registerResult = input .completeButtonClicked - .flatMap { [unowned self] _ in - self.authUseCase - .registerCenterAccount(registerState: self.stateObject) + .unretained(self) + .flatMap { (vm, _) in + vm.authUseCase + .registerCenterAccount(registerState: vm.stateObject) } .share() diff --git a/project/Projects/Presentation/Feature/Auth/Sources/Center/AccountRegister/View/SetIdPasswordViewController.swift b/project/Projects/Presentation/Feature/Auth/Sources/Center/AccountRegister/View/SetIdPasswordViewController.swift index 546f50e6..b7f9aa9d 100644 --- a/project/Projects/Presentation/Feature/Auth/Sources/Center/AccountRegister/View/SetIdPasswordViewController.swift +++ b/project/Projects/Presentation/Feature/Auth/Sources/Center/AccountRegister/View/SetIdPasswordViewController.swift @@ -108,7 +108,7 @@ where T.Input: SetIdAndPasswordInputable & PageProcessInputable, }() // MARK: 비밀번호 확인 입력 - let checlPasswordLabel: IdleLabel = { + let checkPasswordLabel: IdleLabel = { let label = IdleLabel(typography: .Subtitle4) label.textString = "비밀번호 확인" label.attrTextColor = DSColor.gray500.color @@ -191,7 +191,7 @@ where T.Input: SetIdAndPasswordInputable & PageProcessInputable, passwordField, passwordGuideLabel, pwValidationIndicators, - checlPasswordLabel, + checkPasswordLabel, checkPasswordField, ].forEach { $0.translatesAutoresizingMaskIntoConstraints = false @@ -236,11 +236,11 @@ where T.Input: SetIdAndPasswordInputable & PageProcessInputable, pwValidationIndicators.leadingAnchor.constraint(equalTo: contentView.layoutMarginsGuide.leadingAnchor), pwValidationIndicators.trailingAnchor.constraint(equalTo: contentView.layoutMarginsGuide.trailingAnchor), - checlPasswordLabel.topAnchor.constraint(equalTo: pwValidationIndicators.bottomAnchor, constant: 24), - checlPasswordLabel.leadingAnchor.constraint(equalTo: contentView.layoutMarginsGuide.leadingAnchor), - checlPasswordLabel.trailingAnchor.constraint(equalTo: contentView.layoutMarginsGuide.trailingAnchor), + checkPasswordLabel.topAnchor.constraint(equalTo: pwValidationIndicators.bottomAnchor, constant: 24), + checkPasswordLabel.leadingAnchor.constraint(equalTo: contentView.layoutMarginsGuide.leadingAnchor), + checkPasswordLabel.trailingAnchor.constraint(equalTo: contentView.layoutMarginsGuide.trailingAnchor), - checkPasswordField.topAnchor.constraint(equalTo: checlPasswordLabel.bottomAnchor, constant: 6), + checkPasswordField.topAnchor.constraint(equalTo: checkPasswordLabel.bottomAnchor, constant: 6), checkPasswordField.leadingAnchor.constraint(equalTo: contentView.layoutMarginsGuide.leadingAnchor), checkPasswordField.trailingAnchor.constraint(equalTo: contentView.layoutMarginsGuide.trailingAnchor), checkPasswordField.bottomAnchor.constraint(equalTo: contentView.layoutMarginsGuide.bottomAnchor) diff --git a/project/Projects/Presentation/Feature/Auth/Sources/Center/SetNewPassword/CenterSetupNewPasswordViewModel.swift b/project/Projects/Presentation/Feature/Auth/Sources/Center/SetNewPassword/CenterSetupNewPasswordViewModel.swift index d59e9a88..7a7bcf38 100644 --- a/project/Projects/Presentation/Feature/Auth/Sources/Center/SetNewPassword/CenterSetupNewPasswordViewModel.swift +++ b/project/Projects/Presentation/Feature/Auth/Sources/Center/SetNewPassword/CenterSetupNewPasswordViewModel.swift @@ -36,7 +36,7 @@ class CenterSetupNewPasswordViewModel: BaseViewModel, ViewModelType { super.init() // 비밀번호 - + passwordValidationBinding() // 휴대전화 인증 AuthInOutStreamManager.validatePhoneNumberInOut( @@ -102,6 +102,37 @@ class CenterSetupNewPasswordViewModel: BaseViewModel, ViewModelType { } } +extension CenterSetupNewPasswordViewModel { + + func passwordValidationBinding() { + + // Passwords + output.passwordValidationState = Observable + .combineLatest( + input.editingPassword, + input.checkingPassword + ) + .unretained(self) + .map { (vm, passwords) in + + let (editing, checking) = passwords + + let stateObject: PasswordValidationState = vm.inputValidationUseCase + .checkPasswordIsValid(password: editing) + + stateObject.setEqualState(state: editing == checking) + + // 가장 최근 비밀번호 저장 + vm.validPassword = editing + + printIfDebug(stateObject.description) + + return stateObject + } + .asDriver(onErrorDriveWith: .never()) + } +} + extension CenterSetupNewPasswordViewModel { class Input { @@ -118,7 +149,8 @@ extension CenterSetupNewPasswordViewModel { public var requestValidationForAuthNumber: PublishRelay = .init() // Password - public var editingPasswords: PublishRelay<(pwd: String, cpwd: String)> = .init() + var editingPassword: PublishSubject = .init() + var checkingPassword: BehaviorSubject = .init(value: "") // Change password public var changePasswordButtonClicked: PublishRelay = .init() @@ -136,7 +168,7 @@ extension CenterSetupNewPasswordViewModel { public var authNumberValidation: Driver? // Password - public var passwordValidation: Driver? + var passwordValidationState: Driver = .empty() public var loginSuccess: Driver? } @@ -147,4 +179,6 @@ extension CenterSetupNewPasswordViewModel.Input: AuthPhoneNumberInputable { } extension CenterSetupNewPasswordViewModel.Output: AuthPhoneNumberOutputable { } extension CenterSetupNewPasswordViewModel.Input: ChangePasswordSuccessInputable { } +extension CenterSetupNewPasswordViewModel.Output: ChangePasswordSuccessOutputable { } + extension CenterSetupNewPasswordViewModel.Input: PageProcessInputable { } diff --git a/project/Projects/Presentation/Feature/Auth/Sources/Center/SetNewPassword/View/ValidateNewPasswordViewController.swift b/project/Projects/Presentation/Feature/Auth/Sources/Center/SetNewPassword/View/ValidateNewPasswordViewController.swift index 59b6de38..8eb78f20 100644 --- a/project/Projects/Presentation/Feature/Auth/Sources/Center/SetNewPassword/View/ValidateNewPasswordViewController.swift +++ b/project/Projects/Presentation/Feature/Auth/Sources/Center/SetNewPassword/View/ValidateNewPasswordViewController.swift @@ -6,18 +6,27 @@ // import UIKit + +import BaseFeature import DSKit +import PresentationCore +import Domain + import RxCocoa import RxSwift -import PresentationCore -import BaseFeature -public protocol ChangePasswordSuccessInputable { +protocol ChangePasswordSuccessInputable { + var editingPassword: PublishSubject { get set } + var checkingPassword: BehaviorSubject { get set } var changePasswordButtonClicked: PublishRelay { get } } +protocol ChangePasswordSuccessOutputable { + var passwordValidationState: Driver { get } +} + class ValidateNewPasswordViewController: UIViewController -where T.Input: ChangePasswordSuccessInputable { +where T.Input: ChangePasswordSuccessInputable, T.Output: ChangePasswordSuccessOutputable { let viewModel: T @@ -43,17 +52,25 @@ where T.Input: ChangePasswordSuccessInputable { ) return textField }() - private let thisIsValidPasswordLabel: IdleLabel = { - let label = IdleLabel(typography: .caption) - label.textString = "* 사용 가능한 비밀번호입니다." - label.attrTextColor = DSKitAsset.Colors.gray300.color + let passwordGuideLabel: IdleLabel = { + let label = IdleLabel(typography: .Body3) + label.textString = "* 비밀번호는 아래의 조건에 맞추어주세요." + label.attrTextColor = DSColor.gray500.color label.textAlignment = .left - label.alpha = 0 return label }() + // MARK: 비밀번호 검증 라벨 + let passwordValidationIndicator: [PasswordValidationCase: ValidationIndicator] = { + var dict: [PasswordValidationCase: ValidationIndicator] = [:] + for item in PasswordValidationCase.items { + dict[item] = ValidationIndicator(labelText: item.indicatorText) + } + return dict + }() + // MARK: 비밀번호 확인 입력 - private let checlPasswordLabel: IdleLabel = { + private let checkPasswordLabel: IdleLabel = { let label = IdleLabel(typography: .Subtitle4) label.textString = "비밀번호 확인" label.attrTextColor = DSKitAsset.Colors.gray500.color @@ -61,11 +78,7 @@ where T.Input: ChangePasswordSuccessInputable { return label }() private let checkPasswordField: IdleOneLineInputField = { - - let textField = IdleOneLineInputField( - placeHolderText: "비밀번호를 한번 더 입력해주세요." - ) - + let textField = IdleOneLineInputField(placeHolderText: "비밀번호를 한번 더 입력해주세요.") return textField }() private let passwordDoesntMathLabel: IdleLabel = { @@ -110,12 +123,21 @@ where T.Input: ChangePasswordSuccessInputable { private func setAutoLayout() { + // pw validation indicators + + let pwValidationIndicators: VStack = VStack( + PasswordValidationCase.items.compactMap { item in passwordValidationIndicator[item] }, + spacing: 4, + alignment: .fill + ) + [ processTitle, passwordLabel, passwordField, - thisIsValidPasswordLabel, - checlPasswordLabel, + passwordGuideLabel, + pwValidationIndicators, + checkPasswordLabel, checkPasswordField, passwordDoesntMathLabel, ctaButton, @@ -138,15 +160,19 @@ where T.Input: ChangePasswordSuccessInputable { passwordField.leadingAnchor.constraint(equalTo: view.layoutMarginsGuide.leadingAnchor), passwordField.trailingAnchor.constraint(equalTo: view.layoutMarginsGuide.trailingAnchor), - thisIsValidPasswordLabel.topAnchor.constraint(equalTo: passwordField.bottomAnchor, constant: 2), - thisIsValidPasswordLabel.leadingAnchor.constraint(equalTo: view.layoutMarginsGuide.leadingAnchor), - thisIsValidPasswordLabel.trailingAnchor.constraint(equalTo: view.layoutMarginsGuide.trailingAnchor), + passwordGuideLabel.topAnchor.constraint(equalTo: passwordField.bottomAnchor, constant: 12), + passwordGuideLabel.leadingAnchor.constraint(equalTo: view.layoutMarginsGuide.leadingAnchor), + passwordGuideLabel.trailingAnchor.constraint(equalTo: view.layoutMarginsGuide.trailingAnchor), + + pwValidationIndicators.topAnchor.constraint(equalTo: passwordGuideLabel.bottomAnchor, constant: 6), + pwValidationIndicators.leadingAnchor.constraint(equalTo: view.layoutMarginsGuide.leadingAnchor), + pwValidationIndicators.trailingAnchor.constraint(equalTo: view.layoutMarginsGuide.trailingAnchor), - checlPasswordLabel.topAnchor.constraint(equalTo: thisIsValidPasswordLabel.bottomAnchor, constant: 12), - checlPasswordLabel.leadingAnchor.constraint(equalTo: view.layoutMarginsGuide.leadingAnchor), - checlPasswordLabel.trailingAnchor.constraint(equalTo: view.layoutMarginsGuide.trailingAnchor), + checkPasswordLabel.topAnchor.constraint(equalTo: pwValidationIndicators.bottomAnchor, constant: 12), + checkPasswordLabel.leadingAnchor.constraint(equalTo: view.layoutMarginsGuide.leadingAnchor), + checkPasswordLabel.trailingAnchor.constraint(equalTo: view.layoutMarginsGuide.trailingAnchor), - checkPasswordField.topAnchor.constraint(equalTo: checlPasswordLabel.bottomAnchor, constant: 6), + checkPasswordField.topAnchor.constraint(equalTo: checkPasswordLabel.bottomAnchor, constant: 6), checkPasswordField.leadingAnchor.constraint(equalTo: view.layoutMarginsGuide.leadingAnchor), checkPasswordField.trailingAnchor.constraint(equalTo: view.layoutMarginsGuide.trailingAnchor), @@ -161,6 +187,11 @@ where T.Input: ChangePasswordSuccessInputable { } private func initialUISettuing() { + + passwordValidationIndicator.values.forEach { indicator in + indicator.setState(.invalid) + } + // - CTA버튼 비활성화 ctaButton.setEnabled(false) } @@ -170,14 +201,18 @@ where T.Input: ChangePasswordSuccessInputable { // MARK: Input let input = viewModel.input -// Observable -// .combineLatest( -// passwordField.eventPublisher, -// checkPasswordField.eventPublisher -// ) -// .map({ ($0, $1) }) -// .bind(to: input.editingPasswords) -// .disposed(by: disposeBag) + // Password + passwordField + .textField.rx.text + .compactMap{ $0 } + .bind(to: input.editingPassword) + .disposed(by: disposeBag) + + checkPasswordField + .textField.rx.text + .compactMap{ $0 } + .bind(to: input.checkingPassword) + .disposed(by: disposeBag) ctaButton .eventPublisher @@ -191,40 +226,29 @@ where T.Input: ChangePasswordSuccessInputable { // MARK: Output let output = viewModel.output - // 비밀번호 검증 -// output -// .passwordValidation? -// .drive(onNext: { [weak self] validationState in -// -// guard let self else { return } -// -// switch validationState { -// case .invalidPassword: -// thisIsValidPasswordLabel.alpha = 0 -// onPasswordUnMatched() -// case .unMatch: -// thisIsValidPasswordLabel.alpha = 1 -// passwordDoesntMathLabel.alpha = 1 -// onPasswordUnMatched() -// case .match: -// thisIsValidPasswordLabel.alpha = 1 -// passwordDoesntMathLabel.alpha = 0 -// onPasswordMatched() -// ctaButton.setEnabled(true) -// } -// }) -// .disposed(by: disposeBag) - } - - private func onPasswordMatched() { - - passwordField.setState(state: .complete) - checkPasswordField.setState(state: .complete) - } - - private func onPasswordUnMatched() { - - passwordField.setState(state: .editing) - checkPasswordField.setState(state: .editing) + output + .passwordValidationState + .drive(onNext: { [weak self] state in + + guard let self else { return } + + // 비밀번호 체킹 상태 업데이트 + passwordValidationIndicator[.characterCount]?.setState( + state.characterCount == .valid ? .valid : .invalid + ) + passwordValidationIndicator[.alphabetAndNumberIncluded]?.setState( + state.alphabetAndNumberIncluded == .valid ? .valid : .invalid + ) + passwordValidationIndicator[.noEmptySpace]?.setState( + state.noEmptySpace == .valid ? .valid : .invalid + ) + passwordValidationIndicator[.unsuccessiveSame3words]?.setState( + state.unsuccessiveSame3words == .valid ? .valid : .invalid + ) + + // 확인버튼 활성화 + ctaButton.setEnabled(state.isValid) + }) + .disposed(by: disposeBag) } } From 60ce070c240d020b1083928902a33f4635529422 Mon Sep 17 00:00:00 2001 From: J0onYEong Date: Tue, 22 Oct 2024 16:10:59 +0900 Subject: [PATCH 14/16] =?UTF-8?q?[IDLE-451]=20=EB=AA=A8=EB=93=88=20?= =?UTF-8?q?=EC=9D=98=EC=A1=B4=20=EA=B7=B8=EB=9E=98=ED=94=84=20=EC=97=85?= =?UTF-8?q?=EB=8D=B0=EC=9D=B4=ED=8A=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- project/graph.png | Bin 173479 -> 178647 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/project/graph.png b/project/graph.png index 1727f8d7663865768a4bb4a25363ca184f4198a8..0a11ca7fc1b8ba3142e850212ad663b827e4eaea 100644 GIT binary patch literal 178647 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¬yUPo0YD>tW&%-Y`h4gPQ{eLkdUX)G&5 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%0Ar7+zG+WhirHHrlEs>( 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

)R0 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%0AP=L0g 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 c{IQO(L3;M{z&HD`b>&rL)2lLl%X#fBK From a99657eac66a333084aff786e4f6e77d20ab8c2e Mon Sep 17 00:00:00 2001 From: J0onYEong Date: Tue, 22 Oct 2024 16:24:28 +0900 Subject: [PATCH 15/16] =?UTF-8?q?[IDLE-451]=203=EA=B0=9C=EC=9D=B4=EC=83=81?= =?UTF-8?q?=20=EC=97=B0=EC=86=8D=EB=90=9C=20=EB=AC=B8=EC=9E=90=20=EA=B2=80?= =?UTF-8?q?=EC=A6=9D=20=EB=A1=9C=EC=A7=81=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 3번이 아니라 3번 이상으로 변경 -> 문자열이 3번이상 같은 문자열 연속을 포함 으로 변경 --- .../Auth/DefaultAuthInputValidationUseCase.swift | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/project/Projects/Domain/Sources/ConcreteUseCase/Auth/DefaultAuthInputValidationUseCase.swift b/project/Projects/Domain/Sources/ConcreteUseCase/Auth/DefaultAuthInputValidationUseCase.swift index d40b601a..8ec85610 100644 --- a/project/Projects/Domain/Sources/ConcreteUseCase/Auth/DefaultAuthInputValidationUseCase.swift +++ b/project/Projects/Domain/Sources/ConcreteUseCase/Auth/DefaultAuthInputValidationUseCase.swift @@ -82,8 +82,8 @@ public class DefaultAuthInputValidationUseCase: AuthInputValidationUseCase { let noWhitespaceIsValid = evaluateStringWith(regex: noWhitespaceRegex, targetString: password) // 4. 연속된 문자 3개 이상 사용 금지 - let noTripleRepeatedCharsRegex = "(.)\\1{2,}" - let noTripleRepeatedCharsIsValid = !evaluateStringWith(regex: noTripleRepeatedCharsRegex, targetString: password) + let noTripleRepeatedCharsRegex = "^(?!.*(.)\\1{2,}).*$" + let noTripleRepeatedCharsIsValid = evaluateStringWith(regex: noTripleRepeatedCharsRegex, targetString: password) return PasswordValidationState( characterCount: lengthIsValid ? .valid : .invalid, From 6ed6c13f3776698d4fc68e617b5d1740b3607dd8 Mon Sep 17 00:00:00 2001 From: J0onYEong Date: Tue, 22 Oct 2024 16:33:14 +0900 Subject: [PATCH 16/16] =?UTF-8?q?[IDLE-451]=20=ED=9A=8C=EC=9B=90=EA=B0=80?= =?UTF-8?q?=EC=9E=85=20=EC=9D=B8=ED=92=8B=20=ED=85=8C=EC=8A=A4=ED=8A=B8=20?= =?UTF-8?q?=EC=BD=94=EB=93=9C=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../DomainTests/RegisterValidationTests.swift | 20 +++++++++---------- .../Auth/Center/PasswordValidationState.swift | 18 ++++++++++------- 2 files changed, 21 insertions(+), 17 deletions(-) diff --git a/project/Projects/Domain/DomainTests/RegisterValidationTests.swift b/project/Projects/Domain/DomainTests/RegisterValidationTests.swift index f6842ff9..2cfaee19 100644 --- a/project/Projects/Domain/DomainTests/RegisterValidationTests.swift +++ b/project/Projects/Domain/DomainTests/RegisterValidationTests.swift @@ -71,11 +71,11 @@ final class RegisterValidationTests: XCTestCase { let usecase = DefaultAuthInputValidationUseCase() // 유효한 비밀번호 테스트 - XCTAssertTrue(usecase.checkPasswordIsValid(password: "Password1")) - XCTAssertTrue(usecase.checkPasswordIsValid(password: "pass1234")) - XCTAssertTrue(usecase.checkPasswordIsValid(password: "1234Abcd!")) - XCTAssertTrue(usecase.checkPasswordIsValid(password: "Valid123")) - XCTAssertTrue(usecase.checkPasswordIsValid(password: "StrongPass1!")) + XCTAssertTrue(usecase.checkPasswordIsValid(password: "Password1").isPasswordValid) + XCTAssertTrue(usecase.checkPasswordIsValid(password: "pass1234").isPasswordValid) + XCTAssertTrue(usecase.checkPasswordIsValid(password: "1234Abcd!").isPasswordValid) + XCTAssertTrue(usecase.checkPasswordIsValid(password: "Valid123").isPasswordValid) + XCTAssertTrue(usecase.checkPasswordIsValid(password: "StrongPass1!").isPasswordValid) } func testInvalidPassword() { @@ -83,10 +83,10 @@ final class RegisterValidationTests: XCTestCase { let usecase = DefaultAuthInputValidationUseCase() // 유효하지 않은 비밀번호 테스트 - XCTAssertFalse(usecase.checkPasswordIsValid(password: "short1")) // 너무 짧음 - XCTAssertFalse(usecase.checkPasswordIsValid(password: "alllowercase")) // 숫자 없음 - XCTAssertFalse(usecase.checkPasswordIsValid(password: "ALLUPPERCASE")) // 숫자 없음 - XCTAssertFalse(usecase.checkPasswordIsValid(password: "12345678")) // 영문자 없음 - XCTAssertFalse(usecase.checkPasswordIsValid(password: "123456789012345678901")) // 너무 길음 + XCTAssertFalse(usecase.checkPasswordIsValid(password: "short1").isPasswordValid) // 너무 짧음 + XCTAssertFalse(usecase.checkPasswordIsValid(password: "alllowercase").isPasswordValid) // 숫자 없음 + XCTAssertFalse(usecase.checkPasswordIsValid(password: "ALLUPPERCASE").isPasswordValid) // 숫자 없음 + XCTAssertFalse(usecase.checkPasswordIsValid(password: "12345678").isPasswordValid) // 영문자 없음 + XCTAssertFalse(usecase.checkPasswordIsValid(password: "123456789012345678901").isValid) // 너무 길음 } } diff --git a/project/Projects/Domain/Sources/Entity/State/Auth/Center/PasswordValidationState.swift b/project/Projects/Domain/Sources/Entity/State/Auth/Center/PasswordValidationState.swift index fa88051c..0c13f984 100644 --- a/project/Projects/Domain/Sources/Entity/State/Auth/Center/PasswordValidationState.swift +++ b/project/Projects/Domain/Sources/Entity/State/Auth/Center/PasswordValidationState.swift @@ -35,18 +35,22 @@ public class PasswordValidationState { public var isValid: Bool { return ( - characterCount == .valid - && - alphabetAndNumberIncluded == .valid - && - noEmptySpace == .valid - && - unsuccessiveSame3words == .valid + isPasswordValid && isEditingAndCheckingPasswordsEqual ) } + public var isPasswordValid: Bool { + characterCount == .valid + && + alphabetAndNumberIncluded == .valid + && + noEmptySpace == .valid + && + unsuccessiveSame3words == .valid + } + public func setEqualState(state: Bool) { isEditingAndCheckingPasswordsEqual = state }