Skip to content

Commit

Permalink
fix #78: 스토리지에 유저 레이어 추가
Browse files Browse the repository at this point in the history
  • Loading branch information
enebin committed Aug 21, 2023
1 parent ac469a3 commit 8a0d439
Show file tree
Hide file tree
Showing 5 changed files with 117 additions and 73 deletions.
Binary file modified Encrypted/Secrets/GoogleService-Info.plist.encrypted
Binary file not shown.
41 changes: 41 additions & 0 deletions Projects/Domain/Sources/Client/CoreLocalStorage.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
//
// LocalStorageClient.swift
// Domain
//
// Created by Young Bin on 2023/08/10.
// Copyright © 2023 team.humanwave. All rights reserved.
//

import ComposableArchitecture
import Foundation

struct CoreLocalStorage {
private let storage: UserDefaults

init(storage: UserDefaults = .standard) {
self.storage = storage
}

/// 알아서 파싱해서 쓰시길.. 더 빡세게 잡으려면 우리가 귀찮아짐
public func get(_ key: some StorageKeyType) -> Any? {
storage.object(forKey: key.name)
}

public func set(_ value: Any, forKey key: some StorageKeyType) {
storage.set(value, forKey: key.name)
}
}

extension CoreLocalStorage: DependencyKey {
static var liveValue = CoreLocalStorage()
static func testValue(storage: UserDefaults) -> CoreLocalStorage {
CoreLocalStorage(storage: storage)
}
}

extension DependencyValues {
var localStorage: CoreLocalStorage {
get { self[CoreLocalStorage.self] }
set { self[CoreLocalStorage.self] = newValue }
}
}
69 changes: 0 additions & 69 deletions Projects/Domain/Sources/Client/LocalStorage.swift

This file was deleted.

72 changes: 72 additions & 0 deletions Projects/Domain/Sources/User/KeymeUserStorage.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
//
// KeymeUserStorage.swift
// Domain
//
// Created by 이영빈 on 2023/08/21.
// Copyright © 2023 team.humanwave. All rights reserved.
//

import ComposableArchitecture
import Foundation
protocol StorageKeyType {
var name: String { get }
}

public final class KeymeUserStorage {
@Dependency(\.localStorage) private var localStorage

var nickname: String?
var isLoggedIn: Bool?

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

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

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 .nickname:
guard let name = value as? String else { return }
self.nickname = name
}

localStorage.set(value, forKey: key)
}
}

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

var name: String {
switch self {
case .isLoggedIn:
return "UserStorageKey_isLoggedIn"
case .nickname:
return "UserStorageKey_nickname"
}
}
}
}

extension KeymeUserStorage: DependencyKey {
public static var liveValue = KeymeUserStorage()
public static var testValue: KeymeUserStorage {
KeymeUserStorage() // FIXME:
}
}

extension DependencyValues {
public var userStorage: KeymeUserStorage {
get { self[KeymeUserStorage.self] }
set { self[KeymeUserStorage.self] = newValue }
}
}
8 changes: 4 additions & 4 deletions Projects/Features/Sources/Root/RootFeature.swift
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ import Network
import ComposableArchitecture

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

public init() {}

Expand Down Expand Up @@ -56,10 +56,10 @@ public struct RootFeature: Reducer {
case .login(.presented(let result)):
switch result {
case .succeeded:
localStorage.set(true, forKey: .isLoggedIn)
userStorage.set(true, forKey: .isLoggedIn)
state.logInStatus = .loggedIn
case .failed:
localStorage.set(false, forKey: .isLoggedIn)
userStorage.set(false, forKey: .isLoggedIn)
state.logInStatus = .loggedOut
}
return .none
Expand Down Expand Up @@ -94,7 +94,7 @@ public struct RootFeature: Reducer {
return .none

case .checkLoginStatus:
let isLoggedIn = localStorage.get(.isLoggedIn) as? Bool ?? false
let isLoggedIn: Bool = userStorage.get(.isLoggedIn) ?? false
return .run { send in
await send(.logInChecked(isLoggedIn))
}
Expand Down

0 comments on commit 8a0d439

Please sign in to comment.