Skip to content
New issue

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

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

Already on GitHub? Sign in to your account

[IDLE-000] 센터장은 비밀번호를 새롭게 발급받을 수 있다. #62

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

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -80,6 +80,12 @@ public extension DefaultAuthRepository {
.request(api: .requestCenterJoin, with: .withToken)
.mapToVoid()
}

func setNewPassword(phoneNumber: String, password: String) -> Single<Void> {
networkService
.request(api: .makeNewPassword(phoneNumber: phoneNumber, newPassword: password), with: .plain)
.mapToVoid()
}
}

// MARK: Worker auth
Expand Down
40 changes: 27 additions & 13 deletions project/Projects/Data/DataSource/API/AuthAPI.swift
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,8 @@ public enum AuthAPI {
case deregisterCenterAccount(reason: String, password: String)
case signoutCenterAccount

case makeNewPassword(phoneNumber: String, newPassword: String)

// Worker
case registerWorkerAccount(data: Data)
case workerLogin(phoneNumber: String, verificationNumber: String)
Expand Down Expand Up @@ -69,6 +71,10 @@ extension AuthAPI: BaseAPI {
return .post


case .makeNewPassword:
return .patch


case .registerWorkerAccount:
return .post
case .workerLogin:
Expand All @@ -83,17 +89,17 @@ extension AuthAPI: BaseAPI {
public var path: String {
switch self {
case .startPhoneNumberAuth:
"common/send"
"/common/send"
case .checkAuthNumber:
"common/confirm"
"/common/confirm"
case .reissueToken:
"common/refresh"
"/common/refresh"


case .authenticateBusinessNumber(let businessNumber):
"center/authentication/\(businessNumber)"
"/center/authentication/\(businessNumber)"
case .checkIdDuplication(id: let id):
"center/validation/\(id)"
"/center/validation/\(id)"

case .centerJoinStatus:
"/center/join/status"
Expand All @@ -102,23 +108,26 @@ extension AuthAPI: BaseAPI {


case .registerCenterAccount:
"center/join"
"/center/join"
case .centerLogin:
"center/login"
"/center/login"
case .signoutCenterAccount:
"center/logout"
"/center/logout"
case .deregisterCenterAccount:
"center/withdraw"
"/center/withdraw"

case .makeNewPassword:
"/center/password/new"


case .registerWorkerAccount:
"carer/join"
"/carer/join"
case .workerLogin:
"carer/login"
"/carer/login"
case .signoutWorkerAccount:
"carer/logout"
"/carer/logout"
case .deregisterWorkerAccount:
"carer/withdraw"
"/carer/withdraw"
}
}

Expand All @@ -136,6 +145,9 @@ extension AuthAPI: BaseAPI {
case .deregisterCenterAccount(let reason, let password):
params["reason"] = reason
params["password"] = password
case .makeNewPassword(let phoneNumber, let newPassword):
params["phoneNumber"] = phoneNumber
params["newPassword"] = newPassword
case .reissueToken(let refreshToken):
params["refreshToken"] = refreshToken
case .workerLogin(let phoneNumber, let verificationNumber):
Expand Down Expand Up @@ -172,6 +184,8 @@ extension AuthAPI: BaseAPI {
return .requestParameters(parameters: bodyParameters ?? [:], encoding: parameterEncoding)
case .deregisterCenterAccount:
return .requestParameters(parameters: bodyParameters ?? [:], encoding: parameterEncoding)
case .makeNewPassword:
return .requestParameters(parameters: bodyParameters ?? [:], encoding: parameterEncoding)
case .reissueToken:
return .requestParameters(parameters: bodyParameters ?? [:], encoding: parameterEncoding)
case .registerWorkerAccount(let data):
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -82,4 +82,8 @@ public class DefaultAuthUseCase: AuthUseCase {
public func checkCenterJoinStatus() -> Single<Result<CenterJoinStatusInfoVO, DomainError>> {
convert(task: authRepository.getCenterJoinStatus())
}

public func setNewPassword(phoneNumber: String, password: String) -> Single<Result<Void, DomainError>> {
convert(task: authRepository.setNewPassword(phoneNumber: phoneNumber, password: password))
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -15,8 +15,9 @@ public protocol AuthRepository: RepositoryBase {
func requestCenterLogin(id: String, password: String) -> Single<Void>
func signoutCenterAccount() -> Single<Void>
func deregisterCenterAccount(reasons: [DeregisterReasonVO], password: String) -> Single<Void>
func getCenterJoinStatus() -> RxSwift.Single<CenterJoinStatusInfoVO>
func requestCenterJoin() -> RxSwift.Single<Void>
func getCenterJoinStatus() -> Single<CenterJoinStatusInfoVO>
func requestCenterJoin() -> Single<Void>
func setNewPassword(phoneNumber: String, password: String) -> Single<Void>


// MARK: Worker
Expand Down
30 changes: 12 additions & 18 deletions project/Projects/Domain/UseCaseInterface/Auth/AuthUseCase.swift
Original file line number Diff line number Diff line change
Expand Up @@ -9,28 +9,17 @@ import Foundation
import RxSwift
import Entity

/// 요구사항
/// - #1. 센터 회원가입 실행
/// - #2. 센터 로그인 실행
/// - #3. 샌터 회원 탈퇴
/// - #4. 샌터 회원 로그아웃
///
/// - #5. 요양보호사 회원가입 실행
/// - #6. 요양보호사 로그인 실행
/// - #7. 요양보호사 회원탈퇴 실행
/// - #8. 요양보호사 로그아웃

public protocol AuthUseCase: UseCaseBase {

// #1.

/// 센터 회원가입 실행
/// - parameters:
/// - registerState: CenterRegisterState
func registerCenterAccount(
registerState: CenterRegisterState
) -> Single<Result<Void, DomainError>>

// #2.

/// 센터 로그인 실행
/// - parameters:
/// - id: String
Expand All @@ -40,18 +29,23 @@ public protocol AuthUseCase: UseCaseBase {
password: String
) -> Single<Result<Void, DomainError>>

// #5
/// 센터 인증여부 확인
func checkCenterJoinStatus() -> Single<Result<CenterJoinStatusInfoVO, DomainError>>


/// 센터 비밀번호 재설정
func setNewPassword(phoneNumber: String, password: String) -> Single<Result<Void, DomainError>>


/// 요양 보호사 회원가입 실행
func registerWorkerAccount(
registerState: WorkerRegisterState
) -> Single<Result<Void, DomainError>>
// #6


/// 요양 보호사 로그인 실행
func loginWorkerAccount(
phoneNumber: String,
authNumber: String
) -> Single<Result<Void, DomainError>>

/// 센터 인증여부 확인
func checkCenterJoinStatus() -> Single<Result<CenterJoinStatusInfoVO, DomainError>>
}
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,10 @@ public class IdleSnackBar: UIView {
}

NSLayoutConstraint.activate([

titleIcon.widthAnchor.constraint(equalToConstant: 24),
titleIcon.heightAnchor.constraint(equalToConstant: 24),

mainStack.topAnchor.constraint(equalTo: self.layoutMarginsGuide.topAnchor),
mainStack.leftAnchor.constraint(equalTo: self.layoutMarginsGuide.leftAnchor),
mainStack.rightAnchor.constraint(equalTo: self.layoutMarginsGuide.rightAnchor),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,8 @@
import UIKit
import PresentationCore
import UseCaseInterface
import BaseFeature
import DSKit

enum SetNewPasswordStage: Int {

Expand Down Expand Up @@ -56,14 +58,16 @@ public class CenterSetNewPasswordCoordinator: ChildCoordinator {
public func start() {

let vm = CenterSetNewPasswordViewModel(
coordinator: self,
authUseCase: authUseCase,
inputValidationUseCase: inputValidationUseCase
)

// stageViewControllerss에 자기자신과 ViewModel할당

self.stageViewControllers = [
ValidatePhoneNumberViewController(coordinator: self, viewModel: vm),
ValidateNewPasswordViewController(coordinator: self, viewModel: vm)
ValidateNewPasswordViewController(viewModel: vm)
]

let pageViewController = UIPageViewController(
Expand All @@ -74,21 +78,38 @@ public class CenterSetNewPasswordCoordinator: ChildCoordinator {

self.pageViewController = pageViewController

let viewController = CenterSetNewPasswordController(
let vc = CenterSetNewPasswordController(
pageViewController: pageViewController,
pageCount: stageViewControllers.count
)
viewController.coordinator = self
vc.bind(viewModel: vm)
vc.coordinator = self

navigationController.pushViewController(viewController, animated: true)
navigationController.pushViewController(vc, animated: true)
excuteStage(.phoneNumber, moveTo: .next)
}

public func coordinatorDidFinish() {

stageViewControllers = []
popViewController()
parent?.removeChildCoordinator(self)
}

public func coordinatorDidFinishWithSnackBar(ro: IdleSnackBarRO) {
let belowIndex = navigationController.children.count-2

if belowIndex >= 0 {
let belowVC = navigationController.children[belowIndex]

if let baseVC = belowVC as? BaseViewController {

baseVC.viewModel?.addSnackBar(ro: ro)
}
}

coordinatorDidFinish()
}
}

extension CenterSetNewPasswordCoordinator {
Expand All @@ -114,7 +135,6 @@ extension CenterSetNewPasswordCoordinator {
currentStage = stage
switch stage {
case .findPasswordFinished, .finish:
popViewController()
coordinatorDidFinish()
default:
let vc = stageViewControllers[stage.rawValue-1]
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,24 +38,19 @@ public class WorkerRegisterCoordinator: ChildCoordinator {
public weak var viewControllerRef: UIViewController?
weak var pageViewController: UIPageViewController?


let inputValidationUseCase: AuthInputValidationUseCase
let authUseCase: AuthUseCase

// MARK: Stage
var stageViewControllers: [UIViewController] = []
private var currentStage: WorkerRegisterStage!

public init(dependency: Dependency) {

self.inputValidationUseCase = dependency.inputValidationUseCase
self.authUseCase = dependency.authUseCase
self.navigationController = dependency.navigationController

let vm = WorkerRegisterViewModel(
inputValidationUseCase: dependency.inputValidationUseCase,
authUseCase: dependency.authUseCase
)

self.stageViewControllers = [
ValidatePhoneNumberViewController(coordinator: self, viewModel: vm),
EntetPersonalInfoViewController(coordinator: self, viewModel: vm),
EnterAddressViewController(coordinator: self, viewModel: vm),
]
}

deinit {
Expand All @@ -70,18 +65,30 @@ public class WorkerRegisterCoordinator: ChildCoordinator {
options: nil
)

let vm = WorkerRegisterViewModel(
inputValidationUseCase: inputValidationUseCase,
authUseCase: authUseCase
)

self.stageViewControllers = [
ValidatePhoneNumberViewController(coordinator: self, viewModel: vm),
EntetPersonalInfoViewController(coordinator: self, viewModel: vm),
EnterAddressViewController(coordinator: self, viewModel: vm),
]

self.pageViewController = pageViewController

let viewController = WorkerRegisterViewController(
let vc = WorkerRegisterViewController(
pageCount: stageViewControllers.count,
pageViewController: pageViewController
)
vc.bind(viewModel: vm)

viewController.coordinator = self
vc.coordinator = self

viewControllerRef = viewController
viewControllerRef = vc

navigationController.pushViewController(viewController, animated: true)
navigationController.pushViewController(vc, animated: true)

excuteStage(.info, moveTo: .next)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ import RxCocoa
import PresentationCore
import BaseFeature

class CenterSetNewPasswordController: DisposableViewController {
class CenterSetNewPasswordController: BaseViewController {

// Init
var pageViewController: UIPageViewController
Expand All @@ -21,8 +21,6 @@ class CenterSetNewPasswordController: DisposableViewController {

var coordinator: CenterSetNewPasswordCoordinator?

let disposeBag = DisposeBag()

public init(pageViewController: UIPageViewController, pageCount: Int) {
self.pageViewController = pageViewController
self.pageCount = pageCount
Expand Down
Loading
Loading