Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import Foundation
- protocol AppCacheDependency: class {
- var appCache: AppCache { get }
- }
- final class AppCache: DependencyContainer {
- typealias Dependencies = EmptyDependencies
- enum Key: String, CaseIterable {
- case accessToken
- case refreshToken
- case currentUser
- case selectedApartment
- case pushToken
- case needUpdateFCMToken
- case showFavoriteUsers
- }
- weak var dependencies: EmptyDependencies!
- init(dependencies: Dependencies?) {
- self.dependencies = dependencies
- }
- private let userDefaults = UserDefaults.standard
- private lazy var keychain: KeychainHelper = {
- let keychain = KeychainHelper()
- keychain.synchronizable = false
- return keychain
- }()
- var token: Token? {
- get {
- guard let accessToken = keychain.get(Key.accessToken.rawValue), let refreshToken = keychain.get(Key.refreshToken.rawValue) else { return nil }
- return Token(accessToken: accessToken, refreshToken: refreshToken)
- }
- set(newValue) {
- if let token = newValue {
- keychain.set(token.accessToken, forKey: Key.accessToken.rawValue)
- keychain.set(token.refreshToken, forKey: Key.refreshToken.rawValue)
- } else {
- keychain.delete(Key.accessToken.rawValue)
- keychain.delete(Key.refreshToken.rawValue)
- }
- }
- }
- var currentUser: User? {
- get { userDefaults.object(User.self, forKey: Key.currentUser.rawValue) }
- set { userDefaults.set(object: newValue, forKey: Key.currentUser.rawValue) }
- }
- var selectedApartment: Apartment? {
- get { userDefaults.object(Apartment.self, forKey: Key.selectedApartment.rawValue) }
- set { userDefaults.set(object: newValue, forKey: Key.selectedApartment.rawValue) }
- }
- var pushToken: String? {
- get { userDefaults.string(forKey: Key.pushToken.rawValue) }
- set { userDefaults.setValue(newValue, forKey: Key.pushToken.rawValue) }
- }
- var needUpdateFCMToken: Bool {
- get { userDefaults.bool(forKey: Key.needUpdateFCMToken.rawValue) }
- set { userDefaults.set(newValue, forKey: Key.needUpdateFCMToken.rawValue) }
- }
- var showFavoriteUsers: Bool {
- get { userDefaults.bool(forKey: Key.showFavoriteUsers.rawValue) }
- set { userDefaults.set(newValue, forKey: Key.showFavoriteUsers.rawValue) }
- }
- // MARK: - Storage
- func clear() {
- Key.allCases.forEach {
- userDefaults.set(nil, forKey: $0.rawValue)
- keychain.delete($0.rawValue)
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement