Add unified DataManager as single source of truth for all app data
- Create DataManager.kt with StateFlows for all cached data: - Authentication (token, user) - Residences, tasks, documents, contractors - Subscription status and upgrade triggers - All lookup data (residence types, task categories, etc.) - Theme preferences and state metadata - Add PersistenceManager with platform-specific implementations: - Android: SharedPreferences - iOS: NSUserDefaults - JVM: Properties file - WasmJS: localStorage - Migrate APILayer to update DataManager on every API response - Update Kotlin ViewModels to use DataManager for token access - Deprecate LookupsRepository (delegates to DataManager) - Create iOS DataManagerObservable Swift wrapper for SwiftUI - Update iOS auth flow to use DataManager.isAuthenticated() Data flow: User Action → API Call → DataManager Updated → All Screens React 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,42 @@
|
||||
package com.example.casera.data
|
||||
|
||||
import platform.Foundation.NSUserDefaults
|
||||
|
||||
/**
|
||||
* iOS implementation of PersistenceManager using NSUserDefaults.
|
||||
*/
|
||||
actual class PersistenceManager {
|
||||
private val defaults = NSUserDefaults.standardUserDefaults
|
||||
|
||||
actual fun save(key: String, value: String) {
|
||||
defaults.setObject(value, forKey = key)
|
||||
defaults.synchronize()
|
||||
}
|
||||
|
||||
actual fun load(key: String): String? {
|
||||
return defaults.stringForKey(key)
|
||||
}
|
||||
|
||||
actual fun remove(key: String) {
|
||||
defaults.removeObjectForKey(key)
|
||||
defaults.synchronize()
|
||||
}
|
||||
|
||||
actual fun clear() {
|
||||
// Get all keys with our prefix and remove them
|
||||
val dict = defaults.dictionaryRepresentation()
|
||||
dict.keys.forEach { key ->
|
||||
val keyStr = key as? String ?: return@forEach
|
||||
if (keyStr.startsWith("dm_")) {
|
||||
defaults.removeObjectForKey(keyStr)
|
||||
}
|
||||
}
|
||||
defaults.synchronize()
|
||||
}
|
||||
|
||||
companion object {
|
||||
private val instance by lazy { PersistenceManager() }
|
||||
|
||||
fun getInstance(): PersistenceManager = instance
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user