Skip to content

Commit d0ec5e2

Browse files
authored
Merge pull request #31 from YAPP-Github/feat/#30-Register_API
2 parents 14c5c20 + c1abd91 commit d0ec5e2

15 files changed

Lines changed: 196 additions & 106 deletions

File tree

Projects/App/Sources/Application/AppComponent.swift

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,8 +61,16 @@ final class AppComponent: Component<EmptyDependency>, RootDependency {
6161
}
6262
}
6363

64+
var authRepository: AuthRepositoryInterface {
65+
shared { makeAuthRepository() }
66+
}
67+
68+
var tokenRepository: TokenRepositoryProtocol {
69+
shared { TokenRepositoryFactory.make() }
70+
}
71+
6472
var tokenProvider: TokenProviding {
65-
shared { TokenRepositoryFactory.makeTokenProvider() }
73+
shared { TokenRepositoryFactory.makeTokenProvider(with: tokenRepository) }
6674
}
6775

6876
init() {

Projects/Data/Sources/Adapter/TokenProviderAdapter.swift

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@ public final class TokenProviderAdapter: TokenProviding, @unchecked Sendable {
1818
}
1919

2020
public func accessToken() -> String? {
21-
// tokenRepository.get(.accessToken)
22-
"eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJiYmE3ODIwYS0wMDUzLTQxZDctODdhYi00Zjk2ZWM3ZDI1MTMiLCJpYXQiOjE3NzEyMzU1MDUsImV4cCI6MTc3MTMyMTkwNX0.SfuVfF9FFpnFcUkGM7zC7mlE7-f8zo3NgG5mm86xekLnurFhGgnTIhwpew7FinguOex0smsnx--EHsMaED8D5A"
21+
tokenRepository.get(.accessToken)
2322
}
2423
}

Projects/Data/Sources/DI/AuthServiceFactory.swift

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,3 +13,8 @@ import Networks
1313
public func makeAuthService() -> AuthServiceProtocol {
1414
AuthService()
1515
}
16+
17+
public func makeAuthRepository() -> AuthRepositoryInterface {
18+
let service = makeAuthService()
19+
return AuthRepository(service: service)
20+
}
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
//
2+
// AuthRepository.swift
3+
// Data
4+
//
5+
// Created by kimnahun on 2026-02-18.
6+
// Copyright © 2026 NDGL-iOS. All rights reserved.
7+
//
8+
9+
import Foundation
10+
11+
import Domain
12+
import Networks
13+
14+
public final class AuthRepository: AuthRepositoryInterface {
15+
private let service: AuthServiceProtocol
16+
17+
public init(service: AuthServiceProtocol) {
18+
self.service = service
19+
}
20+
21+
public func signup(info: SignupInfo) async throws -> SignupResult {
22+
do {
23+
let request = SignupRequest(fcmToken: info.fcmToken)
24+
return try await service.signup(request: request).toDomain()
25+
} catch {
26+
throw error.toNDGLError()
27+
}
28+
}
29+
30+
public func login(uuid: String) async throws -> LoginResult {
31+
do {
32+
let request = LoginRequest(uuid: uuid)
33+
return try await service.login(request: request).toDomain()
34+
} catch {
35+
throw error.toNDGLError()
36+
}
37+
}
38+
}
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
//
2+
// AuthTransform.swift
3+
// Data
4+
//
5+
// Created by kimnahun on 2026-02-18.
6+
// Copyright © 2026 NDGL-iOS. All rights reserved.
7+
//
8+
9+
import Domain
10+
import Networks
11+
12+
extension SignupResponse {
13+
func toDomain() -> SignupResult {
14+
SignupResult(
15+
uuid: uuid,
16+
accessToken: accessToken,
17+
nickname: nickname
18+
)
19+
}
20+
}
21+
22+
extension LoginResponse {
23+
func toDomain() -> LoginResult {
24+
LoginResult(
25+
uuid: uuid,
26+
accessToken: accessToken,
27+
nickname: nickname
28+
)
29+
}
30+
}
Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
//
2-
// AuthServiceProtocol.swift
2+
// AuthRepositoryInterface.swift
33
// Domain
44
//
55
// Created by NDGL on 2026-02-06.
@@ -8,6 +8,7 @@
88

99
import Foundation
1010

11-
public protocol AuthServiceProtocol: Sendable {
12-
func signup(info: SignupInfo) async -> Result<SignupResult, SignupError>
11+
public protocol AuthRepositoryInterface {
12+
func signup(info: SignupInfo) async throws -> SignupResult
13+
func login(uuid: String) async throws -> LoginResult
1314
}
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
//
2+
// LoginResult.swift
3+
// Domain
4+
//
5+
// Created by kimnahun on 2026-02-18.
6+
// Copyright © 2026 NDGL-iOS. All rights reserved.
7+
//
8+
9+
import Foundation
10+
11+
public struct LoginResult: Sendable {
12+
public let uuid: String
13+
public let accessToken: String
14+
public let nickname: String
15+
16+
public init(uuid: String, accessToken: String, nickname: String) {
17+
self.uuid = uuid
18+
self.accessToken = accessToken
19+
self.nickname = nickname
20+
}
21+
}

Projects/Domain/Sources/Model/Auth/SignupError.swift

Lines changed: 0 additions & 26 deletions
This file was deleted.

Projects/Features/RootFeature/Sources/RootBuilder.swift

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@ import RIBs
1616
public protocol RootDependency: Dependency {
1717
var homeUsecase: HomeUsecaseProtocol { get }
1818
var followDetailUsecase: FollowDetailUsecaseProtocol { get }
19+
var authRepository: AuthRepositoryInterface { get }
20+
var tokenRepository: TokenRepositoryProtocol { get }
1921
}
2022

2123
// MARK: - RootComponent
@@ -47,7 +49,11 @@ public final class RootBuilder: Builder<RootDependency>, RootBuildable {
4749
public func build() -> LaunchRouting {
4850
let component = RootComponent(dependency: dependency)
4951
let viewController = RootViewController()
50-
let interactor = RootInteractor(presenter: viewController)
52+
let interactor = RootInteractor(
53+
presenter: viewController,
54+
authRepository: dependency.authRepository,
55+
tokenRepository: dependency.tokenRepository
56+
)
5157

5258
let mainBuilder = MainBuilder(dependency: component)
5359

Projects/Features/RootFeature/Sources/RootInteractor.swift

Lines changed: 42 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,9 @@
66
// Copyright © 2026 NDGL-iOS. All rights reserved.
77
//
88

9+
import Foundation
10+
11+
import Domain
912
import RIBs
1013
import RxSwift
1114

@@ -35,20 +38,58 @@ final class RootInteractor: PresentableInteractor<RootPresentable>, RootInteract
3538
weak var router: RootRouting?
3639
weak var listener: RootListener?
3740

41+
private let authRepository: AuthRepositoryInterface
42+
private let tokenRepository: TokenRepositoryProtocol
3843
private let disposeBag = DisposeBag()
3944

40-
override init(presenter: RootPresentable) {
45+
init(
46+
presenter: RootPresentable,
47+
authRepository: AuthRepositoryInterface,
48+
tokenRepository: TokenRepositoryProtocol
49+
) {
50+
self.authRepository = authRepository
51+
self.tokenRepository = tokenRepository
4152
super.init(presenter: presenter)
4253
presenter.listener = self
4354
}
4455

4556
override func didBecomeActive() {
4657
super.didBecomeActive()
58+
performAuthFlow()
4759
}
4860

4961
override func willResignActive() {
5062
super.willResignActive()
5163
}
64+
65+
private func performAuthFlow() {
66+
Task { [weak self] in
67+
guard let self else { return }
68+
69+
do {
70+
if let uuid = self.tokenRepository.get(.uuid) {
71+
let loginResult = try await self.authRepository.login(uuid: uuid)
72+
self.tokenRepository.save(loginResult.accessToken, for: .accessToken)
73+
} else {
74+
let fcmToken = self.tokenRepository.get(.fcmToken) ?? UUID().uuidString
75+
let signupResult = try await self.authRepository.signup(
76+
info: SignupInfo(fcmToken: fcmToken)
77+
)
78+
self.tokenRepository.save(signupResult.uuid, for: .uuid)
79+
self.tokenRepository.save(signupResult.accessToken, for: .accessToken)
80+
81+
let loginResult = try await self.authRepository.login(uuid: signupResult.uuid)
82+
self.tokenRepository.save(loginResult.accessToken, for: .accessToken)
83+
}
84+
85+
await MainActor.run {
86+
self.router?.attachMain()
87+
}
88+
} catch {
89+
print("[RootInteractor] Auth flow failed: \(error)")
90+
}
91+
}
92+
}
5293
}
5394

5495
// MARK: - RootPresentableListener

0 commit comments

Comments
 (0)