Skip to content

Commit 82c409b

Browse files
committed
Feat: UserDataRepository 구현
- 유저 정보 (닉네임, accessToken)을 가져올 수 있는 repository 구현 - UserDataRepository 의존성 등록
1 parent 2f25dde commit 82c409b

4 files changed

Lines changed: 82 additions & 0 deletions

File tree

Projects/DataSource/Sources/Common/DataSourceDependencyAssembler.swift

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,5 +37,9 @@ public struct DataSourceDependencyAssembler: DependencyAssemblerProtocol {
3737
DIContainer.shared.register(type: OnboardingRepositoryProtocol.self) { _ in
3838
return OnboardingRepository(networkService: networkService, keychainStorage: keychainStorage)
3939
}
40+
41+
DIContainer.shared.register(type: UserDataRepositoryProtocol.self) { _ in
42+
return UserDataRepository(keychainStorage: keychainStorage, userDefaultsStorage: userDefaultsStorage)
43+
}
4044
}
4145
}
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
//
2+
// UserError.swift
3+
// DataSource
4+
//
5+
// Created by 이동현 on 7/20/25.
6+
//
7+
8+
enum UserError: Error, CustomStringConvertible {
9+
case accessTokenLoadFailed
10+
case nicknameLoadFailed
11+
case unknown(error: Error)
12+
13+
14+
public var description: String {
15+
switch self {
16+
case .accessTokenLoadFailed:
17+
return "토큰 불러오기에 실패했습니다."
18+
case .nicknameLoadFailed:
19+
return "닉네임 불러오기에 실패했습니다."
20+
case .unknown(let error):
21+
return "알 수 없는 에러가 발생했습니다. \(error.localizedDescription)"
22+
}
23+
}
24+
}
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
//
2+
// UserDataRepository.swift
3+
// DataSource
4+
//
5+
// Created by 이동현 on 7/20/25.
6+
//
7+
8+
import Foundation
9+
import Domain
10+
11+
final class UserDataRepository: UserDataRepositoryProtocol {
12+
private let keychainStorage: KeychainStorageProtocol
13+
private let userDefaultsStorage: UserDefaultsStorageProtocol
14+
15+
init(keychainStorage: KeychainStorageProtocol, userDefaultsStorage: UserDefaultsStorageProtocol) {
16+
self.keychainStorage = keychainStorage
17+
self.userDefaultsStorage = userDefaultsStorage
18+
}
19+
20+
// TODO: - accessToken fetch 로직 상의 후 결정
21+
func loadAccessToken() throws -> String {
22+
guard
23+
let token = keychainStorage.load(forKey: TokenType.accessToken.rawValue)
24+
else { throw UserError.accessTokenLoadFailed }
25+
26+
return token
27+
}
28+
29+
func loadNickname() throws -> String {
30+
guard
31+
let nickname: String = userDefaultsStorage.load(forKey: UserDefaultsKey.nickname.rawValue)
32+
else { throw UserError.nicknameLoadFailed }
33+
34+
return nickname
35+
}
36+
}
37+
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
//
2+
// UserDataRepositoryProtocol.swift
3+
// DataSource
4+
//
5+
// Created by 이동현 on 7/20/25.
6+
//
7+
8+
/// 유저의 이름, 토큰 등 유저 정보와 관련된 데이터를 가져오는 Repository
9+
public protocol UserDataRepositoryProtocol {
10+
/// 저장한 accessToken을 가져옵니다.
11+
/// - Returns: accessToken
12+
func loadAccessToken() throws -> String
13+
14+
/// 저장한 닉네임을 가져옵니다.
15+
/// - Returns: 유저 닉네임
16+
func loadNickname() throws -> String
17+
}

0 commit comments

Comments
 (0)