import Foundation struct PersistedAppState: Codable, Equatable { let session: AuthSession let profile: MemberProfile let requests: [ApprovalRequest] let notifications: [AppNotification] } protocol AppStateStoring { func load() -> PersistedAppState? func save(_ state: PersistedAppState) func clear() } final class UserDefaultsAppStateStore: AppStateStoring { private let defaults: UserDefaults private let storageKey: String private let encoder = JSONEncoder() private let decoder = JSONDecoder() init(defaults: UserDefaults = .standard, storageKey: String = "persisted-app-state") { self.defaults = defaults self.storageKey = storageKey } func load() -> PersistedAppState? { guard let data = defaults.data(forKey: storageKey) else { return nil } return try? decoder.decode(PersistedAppState.self, from: data) } func save(_ state: PersistedAppState) { guard let data = try? encoder.encode(state) else { return } defaults.set(data, forKey: storageKey) } func clear() { defaults.removeObject(forKey: storageKey) } }