Skip to content

Commit

Permalink
refactor #78: 엑세스 토큰 등록 로직 연결
Browse files Browse the repository at this point in the history
  • Loading branch information
enebin committed Aug 23, 2023
1 parent 1b7f270 commit 1babe51
Show file tree
Hide file tree
Showing 10 changed files with 47 additions and 41 deletions.
2 changes: 1 addition & 1 deletion Projects/Domain/Sources/Client/CoreLocalStorage.swift
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ struct CoreLocalStorage {
storage.object(forKey: key.name)
}

public func set(_ value: Any, forKey key: some StorageKeyType) {
public func set(_ value: Any?, forKey key: some StorageKeyType) {
storage.set(value, forKey: key.name)
}
}
Expand Down
16 changes: 8 additions & 8 deletions Projects/Domain/Sources/User/KeymeUserStorage.swift
Original file line number Diff line number Diff line change
Expand Up @@ -16,22 +16,22 @@ public final class KeymeUserStorage {
@Dependency(\.localStorage) private var localStorage

var nickname: String?
var isLoggedIn: Bool?
var acesssToken: String?

public init() {
self.nickname = self.get(.nickname)
self.isLoggedIn = self.get(.isLoggedIn) ?? false
self.acesssToken = self.get(.acesssToken)
}

public func get<T>(_ key: UserStorageKey) -> T? {
return localStorage.get(key) as? T
}

public func set<T>(_ value: T, forKey key: UserStorageKey) {
public func set<T>(_ value: T?, forKey key: UserStorageKey) {
switch key {
case .isLoggedIn:
guard let flag = value as? Bool else { return }
self.isLoggedIn = flag
case .acesssToken:
guard let flag = value as? String else { return }
self.acesssToken = flag
case .nickname:
guard let name = value as? String else { return }
self.nickname = name
Expand All @@ -43,12 +43,12 @@ public final class KeymeUserStorage {

public extension KeymeUserStorage {
enum UserStorageKey: StorageKeyType {
case isLoggedIn
case acesssToken
case nickname

var name: String {
switch self {
case .isLoggedIn:
case .acesssToken:
return "UserStorageKey_isLoggedIn"
case .nickname:
return "UserStorageKey_nickname"
Expand Down
23 changes: 16 additions & 7 deletions Projects/Features/Sources/Root/RootFeature.swift
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ import ComposableArchitecture

public struct RootFeature: Reducer {
@Dependency(\.userStorage) private var userStorage
@Dependency(\.keymeAPIManager) private var network

public init() {}

Expand Down Expand Up @@ -56,25 +57,33 @@ public struct RootFeature: Reducer {
Reduce { state, action in
switch action {
case .login(.presented(.signInWithAppleResponse(let response))):
let token: String?
switch response {
case .success:
userStorage.set(true, forKey: .isLoggedIn)
case .success(let body):
token = body.data.token.accessToken
case .failure:
userStorage.set(false, forKey: .isLoggedIn)
token = nil
}

userStorage.set(token, forKey: .acesssToken)
network.registerAuthorizationToken(token)
return .none

case .login(.presented(.signInWithKakaoResponse(let response))):
let token: String?
switch response {
case .success:
userStorage.set(true, forKey: .isLoggedIn)
case .success(let body):
token = body.data.token.accessToken
case .failure:
userStorage.set(false, forKey: .isLoggedIn)
token = nil
}

userStorage.set(token, forKey: .acesssToken)
network.registerAuthorizationToken(token)
return .none

case .checkLoginStatus:
let isLoggedIn: Bool = userStorage.get(.isLoggedIn) ?? false
let isLoggedIn: Bool = userStorage.get(.acesssToken) == nil ? false : true
return .run { send in
await send(.logInChecked(isLoggedIn))
}
Expand Down
4 changes: 0 additions & 4 deletions Projects/Keyme/Sources/KeymeApp.swift
Original file line number Diff line number Diff line change
Expand Up @@ -41,10 +41,6 @@ class AppDelegate: UIResponder, UIApplicationDelegate, UNUserNotificationCenterD
FirebaseApp.configure()
Messaging.messaging().delegate = self

KeymeAPIManager.shared.registerAuthorizationToken(
"eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJhY2Nlc3NUb2tlbiIsImlhdCI6MTY5MTg0MjM1NiwiZXhwIjoxNjk0NDM0MzU2LCJtZW1iZXJJZCI6Miwicm9sZSI6IlJPTEVfVVNFUiJ9.bLUl_ObvXr2pkLGNBZYWbJgLZLo3P0xB2pawckRGYZM"
)

UNUserNotificationCenter.current().delegate = self
UNUserNotificationCenter.current().requestAuthorization(options: [.alert, .badge, .sound]) { granted, _ in
guard granted else { return }
Expand Down
16 changes: 8 additions & 8 deletions Projects/Network/Sources/DTO/AuthDTO.swift
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ public struct AuthDTO: Decodable, Equatable {

let code: Int
let message: String
let data: UserData
public let data: UserData

public init(code: Int, message: String, data: UserData) {
self.code = code
Expand All @@ -31,15 +31,15 @@ public extension AuthDTO {
}

public struct UserData: Decodable {
let id: Int
let nickname: String?
let friendCode: String?
let profileImage: String?
let profileThumbnail: String?
let token: Token
public let id: Int
public let nickname: String?
public let friendCode: String?
public let profileImage: String?
public let profileThumbnail: String?
public let token: Token
}

public struct Token: Decodable {
let accessToken: String
public let accessToken: String
}

Original file line number Diff line number Diff line change
Expand Up @@ -42,12 +42,12 @@ extension CoreNetworkService: CoreNetworking {
provider.requestPublisher(api)
}

func registerAuthorizationToken(_ authorizationToken: String) {
func registerAuthorizationToken(_ authorizationToken: String?) {
let loggerConfig = NetworkLoggerPlugin.Configuration(logOptions: .verbose)
let networkLogger = NetworkLoggerPlugin(configuration: loggerConfig)

let newProvider = MoyaProvider<APIType>(
endpointClosure: endpointClosure(with: authorizationToken),
endpointClosure: endpointClosure(with: authorizationToken ?? ""),
plugins: [networkLogger])

provider = newProvider
Expand Down
2 changes: 1 addition & 1 deletion Projects/Network/Sources/Network/Core/CoreNetworking.swift
Original file line number Diff line number Diff line change
Expand Up @@ -21,5 +21,5 @@ protocol CoreNetworking<APIType> {
func request(_ api: APIType) -> AnyPublisher<Response, MoyaError>

/// 인증토큰 헤더에 넣어주는 메서드
func registerAuthorizationToken(_ authorizationToken: String)
func registerAuthorizationToken(_ authorizationToken: String?)
}
Original file line number Diff line number Diff line change
Expand Up @@ -27,5 +27,5 @@ public protocol APIRequestable<APIType> {
func request<T: Decodable>(_ api: APIType, object: T.Type) -> AnyPublisher<T, MoyaError>

/// 인증토큰 헤더에 넣어주는 메서드
func registerAuthorizationToken(_ token: String)
func registerAuthorizationToken(_ token: String?)
}
11 changes: 6 additions & 5 deletions Projects/Network/Sources/Network/Manager/KeymeAPIManager.swift
Original file line number Diff line number Diff line change
Expand Up @@ -28,13 +28,13 @@ public class KeymeAPIManager {
init(core: CoreNetworkService<KeymeAPI>) {
self.core = core
}

public func registerAuthorizationToken(_ token: String) {
core.registerAuthorizationToken(token)
}
}

extension KeymeAPIManager: CoreNetworking {
public func registerAuthorizationToken(_ token: String?) {
core.registerAuthorizationToken(token)
}

public func request(_ api: KeymeAPI) async throws -> Response {
try await core.request(api)
}
Expand All @@ -44,7 +44,7 @@ extension KeymeAPIManager: CoreNetworking {
}
}

extension KeymeAPIManager: APIRequestable {
extension KeymeAPIManager: APIRequestable {
public func request<T: Decodable>(_ api: KeymeAPI, object: T.Type) async throws -> T {
let response = try await core.request(api)
let decoded = try decoder.decode(T.self, from: response.data)
Expand All @@ -61,6 +61,7 @@ public extension KeymeAPIManager {
static let shared = KeymeAPIManager()
}

// MARK: Dependency 설정
import ComposableArchitecture

extension KeymeAPIManager: DependencyKey {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,13 +25,13 @@ public class KeymeTestsAPIManager {

self.core = CoreNetworkService(provider: provider)
}

public func registerAuthorizationToken(_ token: String) {
core.registerAuthorizationToken(token)
}
}

extension KeymeTestsAPIManager: APIRequestable {
public func registerAuthorizationToken(_ token: String?) {
core.registerAuthorizationToken(token)
}

public func request<T: Decodable>(_ api: KeymeTestsAPI, object: T.Type) async throws -> T {
let response = try await core.request(api)
let decoded = try decoder.decode(T.self, from: response.data)
Expand Down

0 comments on commit 1babe51

Please sign in to comment.