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-70] 로그인 UI및 기능 #16

Merged
merged 6 commits into from
Jul 10, 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
15 changes: 13 additions & 2 deletions project/Projects/App/Sources/DI/Assembly/AuthAssembly.swift
Original file line number Diff line number Diff line change
Expand Up @@ -13,10 +13,21 @@ import Swinject
public struct AuthAssembly: Assembly {
public func assemble(container: Container) {
container.register(CenterRegisterViewModel.self) { resolver in
let useCase = resolver.resolve(CenterRegisterUseCase.self)!
let inputValidationUseCase = resolver.resolve(AuthInputValidationUseCase.self)!
let authUseCase = resolver.resolve(AuthUseCase.self)!

return CenterRegisterViewModel(
useCase: useCase
inputValidationUseCase: inputValidationUseCase,
authUseCase: authUseCase
)
}

container.register(CenterLoginViewModel.self) { resolver in

let authUseCase = resolver.resolve(AuthUseCase.self)!

return CenterLoginViewModel(
authUseCase: authUseCase
)
}
}
Expand Down
11 changes: 8 additions & 3 deletions project/Projects/App/Sources/DI/Assembly/DataAssembly.swift
Original file line number Diff line number Diff line change
Expand Up @@ -13,9 +13,14 @@ import Swinject
public struct DataAssembly: Assembly {
public func assemble(container: Container) {

// MARK: 센터 회원가입 레포지토리
container.register(CenterRegisterRepository.self) { _ in
return DefaultCenterRegisterRepository()
// MARK: 회원가입 입력 검증 레포지토리
container.register(AuthInputValidationRepository.self) { _ in
return DefaultAuthInputValidationRepository()
}

// MARK: 로그인/회원가입 레포지토리
container.register(AuthRepository.self) { _ in
return DefaultAuthRepository()
}
}
}
12 changes: 9 additions & 3 deletions project/Projects/App/Sources/DI/Assembly/DomainAssembly.swift
Original file line number Diff line number Diff line change
Expand Up @@ -13,10 +13,16 @@ import Swinject

public struct DomainAssembly: Assembly {
public func assemble(container: Container) {
container.register(CenterRegisterUseCase.self) { resolver in
let repository = resolver.resolve(CenterRegisterRepository.self)!
container.register(AuthInputValidationUseCase.self) { resolver in
let repository = resolver.resolve(AuthInputValidationRepository.self)!

return DefaultCenterRegisterUseCase(repository: repository)
return DefaultAuthInputValidationUseCase(repository: repository)
}

container.register(AuthUseCase.self) { resolver in
let repository = resolver.resolve(AuthRepository.self)!

return DefaultAuthUseCase(repository: repository)
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,7 @@ extension CenterAuthCoorinator: CenterAuthCoordinatable {
func login() {

let coordinator = CenterLoginCoordinator(
viewModel: injector.resolve(CenterLoginViewModel.self),
navigationController: navigationController
)

Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
//
// DefaultCenterRegisterRepository.swift
// DefaultAuthInputValidationRepository.swift
// ConcreteRepository
//
// Created by choijunios on 7/8/24.
// Created by choijunios on 7/10/24.
//

import Foundation
Expand All @@ -11,12 +11,10 @@ import RepositoryInterface
import NetworkDataSource
import Entity

public class DefaultCenterRegisterRepository: CenterRegisterRepository {
public class DefaultAuthInputValidationRepository: AuthInputValidationRepository {

let networkService = CenterRegisterService()

let disposeBag = DisposeBag()

public init() { }

public func requestPhoneNumberAuthentication(phoneNumber: String) -> RxSwift.Single<BoolResult> {
Expand Down Expand Up @@ -88,32 +86,5 @@ public class DefaultCenterRegisterRepository: CenterRegisterRepository {
}
}
}

public func requestRegisterCenterAccount(managerName: String, phoneNumber: String, businessNumber: String, id: String, password: String) -> RxSwift.Single<Entity.BoolResult> {

let dto = CenterRegistrationDTO(
identifier: id,
password: password,
phoneNumber: phoneNumber,
managerName: managerName,
centerBusinessRegistrationNumber: businessNumber
)

let data = (try? JSONEncoder().encode(dto)) ?? Data()

return networkService.request(api: .registerCenterAccount(data: data))
.catch { [weak self] in .error(self?.filterNetworkConnection($0) ?? $0) }
.map { [weak self] response in

guard let self = self else { return BoolResult.failure(.unknownError) }

switch response.statusCode {
case 201:
return .success(true)
default:
return .failure(self.decodeError(of: CenterRegisterError.self, data: response.data))
}
}
}
}

Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
//
// DefaultAuthRepository.swift
// ConcreteRepository
//
// Created by choijunios on 7/10/24.
//

import Foundation
import RxSwift
import RepositoryInterface
import NetworkDataSource
import Entity

public class DefaultAuthRepository: AuthRepository {

let networkService = CenterRegisterService()

public init() { }

public func requestRegisterCenterAccount(managerName: String, phoneNumber: String, businessNumber: String, id: String, password: String) -> RxSwift.Single<Entity.BoolResult> {

let dto = CenterRegistrationDTO(
identifier: id,
password: password,
phoneNumber: phoneNumber,
managerName: managerName,
centerBusinessRegistrationNumber: businessNumber
)

let data = (try? JSONEncoder().encode(dto)) ?? Data()

return networkService.request(api: .registerCenterAccount(data: data))
.catch { [weak self] in .error(self?.filterNetworkConnection($0) ?? $0) }
.map { [weak self] response in

guard let self = self else { return BoolResult.failure(.unknownError) }

switch response.statusCode {
case 201:
return .success(true)
default:
return .failure(self.decodeError(of: CenterRegisterError.self, data: response.data))
}
}
}

public func requestCenterLogin(id: String, password: String) -> RxSwift.Single<Entity.BoolResult> {

return networkService.request(api: .centerLogin(id: id, password: password))
.catch { [weak self] in .error(self?.filterNetworkConnection($0) ?? $0) }
.map { [weak self] response in

guard let self = self else { return BoolResult.failure(.unknownError) }

switch response.statusCode {
case 200:
return .success(true)
default:
return .failure(self.decodeError(of: CenterRegisterError.self, data: response.data))
}
}
}
}
2 changes: 1 addition & 1 deletion project/Projects/Data/ConcretesTests/ConcretesTests.swift
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ final class ConcretesTests: XCTestCase {

func testAuth() {

let repo = DefaultCenterRegisterRepository()
let repo = DefaultAuthInputValidationRepository()

let expectation = expectation(description: "center register test")

Expand Down
10 changes: 10 additions & 0 deletions project/Projects/Data/NetworkDataSource/API/Auth/AuthAPI.swift
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ public enum AuthAPI {
case authenticateBusinessNumber(businessNumber: String)
case checkIdDuplication(id: String)
case registerCenterAccount(data: Data)
case centerLogin(id: String, password: String)
}

extension AuthAPI: BaseAPI {
Expand All @@ -38,6 +39,8 @@ extension AuthAPI: BaseAPI {
return .get
case .registerCenterAccount:
return .post
case .centerLogin:
return .post
}
}

Expand All @@ -53,6 +56,8 @@ extension AuthAPI: BaseAPI {
"center/validation/\(id)"
case .registerCenterAccount:
"center/join"
case .centerLogin:
"center/login"
}
}

Expand All @@ -64,6 +69,9 @@ extension AuthAPI: BaseAPI {
case .checkAuthNumber(let phoneNumber, let authNumber):
params["phoneNumber"] = phoneNumber
params["verificationNumber"] = authNumber
case .centerLogin(let id, let password):
params["identifier"] = id
params["password"] = password
default:
break
}
Expand All @@ -85,6 +93,8 @@ extension AuthAPI: BaseAPI {
return .requestParameters(parameters: bodyParameters ?? [:], encoding: parameterEncoding)
case .registerCenterAccount(let data):
return .requestData(data)
case .centerLogin:
return .requestParameters(parameters: bodyParameters ?? [:], encoding: parameterEncoding)
default:
return .requestPlain
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
//
// DefaultCenterRegisterUseCase.swift
// DefaultAuthInputValidationUseCase.swift
// ConcreteUseCase
//
// Created by choijunios on 7/8/24.
// Created by choijunios on 7/10/24.
//

import Foundation
Expand All @@ -11,11 +11,11 @@ import Entity
import UseCaseInterface
import RepositoryInterface

public class DefaultCenterRegisterUseCase: CenterRegisterUseCase {
public class DefaultAuthInputValidationUseCase: AuthInputValidationUseCase {

let repository: CenterRegisterRepository
let repository: AuthInputValidationRepository

public init(repository: CenterRegisterRepository) {
public init(repository: AuthInputValidationRepository) {
self.repository = repository
}

Expand Down Expand Up @@ -73,18 +73,4 @@ public class DefaultCenterRegisterUseCase: CenterRegisterUseCase {

return predicate.evaluate(with: password)
}

// MARK: 로그인 실행
public func registerCenterAccount(registerState: CenterRegisterState) -> Observable<BoolResult> {

filteringDataLayer(
domainTask: repository.requestRegisterCenterAccount(
managerName: registerState.name!,
phoneNumber: registerState.phoneNumber!,
businessNumber: registerState.businessNumber!,
id: registerState.id!,
password: registerState.password!
).asObservable()
)
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
//
// DefaultAuthUseCase.swift
// ConcreteUseCase
//
// Created by choijunios on 7/10/24.
//

import Foundation
import UseCaseInterface
import RepositoryInterface
import RxSwift
import Entity

public class DefaultAuthUseCase: AuthUseCase {

let repository: AuthRepository

public init(repository: AuthRepository) {
self.repository = repository
}

// MARK: 센터 회원가입 실행
public func registerCenterAccount(registerState: Entity.CenterRegisterState) -> RxSwift.Observable<Entity.BoolResult> {
filteringDataLayer(
domainTask: repository.requestRegisterCenterAccount(
managerName: registerState.name!,
phoneNumber: registerState.phoneNumber!,
businessNumber: registerState.businessNumber!,
id: registerState.id!,
password: registerState.password!
).asObservable()
)
}

// MARK: 센터 로그인 실행
public func loginCenterAccount(id: String, password: String) -> RxSwift.Observable<Entity.BoolResult> {
filteringDataLayer(
domainTask: repository.requestCenterLogin(id: id, password: password).asObservable()
)
}
}
4 changes: 3 additions & 1 deletion project/Projects/Domain/ConcreteUseCaseTests/Tests.swift
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,9 @@ import XCTest

final class ConcreteTests: XCTestCase {

let usecase = DefaultCenterRegisterUseCase(repository: DefaultCenterRegisterRepository())
let usecase = DefaultAuthInputValidationUseCase(
repository: DefaultAuthInputValidationRepository()
)

func testPhoneNumberRegex() {

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -35,4 +35,9 @@ public class CenterRegisterState {
id = nil
password = nil
}

public var descroption: String {
return "이름: \(name ?? "")\n전화번호: \(phoneNumber ?? "")\n비즈니스번호: \(businessNumber ?? "")\n아이디: \(id ?? "")\n패스워드: \(password ?? "")"
}
}

Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
//
// AuthRepository.swift
// RepositoryInterface
//
// Created by choijunios on 7/10/24.
//

import RxSwift
import Entity

public protocol AuthRepository: RepositoryBase {

func requestRegisterCenterAccount(managerName: String, phoneNumber: String, businessNumber: String, id: String, password: String) -> Single<BoolResult>
func requestCenterLogin(id: String, password: String) -> Single<BoolResult>
}
Original file line number Diff line number Diff line change
Expand Up @@ -9,13 +9,10 @@ import Foundation
import RxSwift
import Entity

public protocol CenterRegisterRepository: RepositoryBase {
public protocol AuthInputValidationRepository: RepositoryBase {

func requestPhoneNumberAuthentication(phoneNumber: String) -> Single<BoolResult>
func authenticateAuthNumber(phoneNumber: String, authNumber: String) -> Single<BoolResult>

func requestBusinessNumberAuthentication(businessNumber: String) -> Single<BusinessNumberAuthResult>

func requestCheckingIdDuplication(id: String) -> Single<BoolResult>
func requestRegisterCenterAccount(managerName: String, phoneNumber: String, businessNumber: String, id: String, password: String) -> Single<BoolResult>
}
Loading