InvestmentTrackerApp/PortfolioJournal/Utilities/AllocationTargetStore.swift

42 lines
1.2 KiB
Swift

import Foundation
enum AllocationTargetStore {
private static let targetsKey = "allocationTargets"
static func target(for categoryId: UUID) -> Double? {
loadTargets()[categoryId.uuidString]
}
static func setTarget(_ value: Double?, for categoryId: UUID) {
var targets = loadTargets()
let key = categoryId.uuidString
if let value, value > 0 {
targets[key] = value
} else {
targets.removeValue(forKey: key)
}
saveTargets(targets)
}
static func totalTargetPercentage(for categoryIds: [UUID]) -> Double {
let targets = loadTargets()
return categoryIds.reduce(0) { total, id in
total + (targets[id.uuidString] ?? 0)
}
}
private static func loadTargets() -> [String: Double] {
guard let data = UserDefaults.standard.data(forKey: targetsKey),
let decoded = try? JSONDecoder().decode([String: Double].self, from: data) else {
return [:]
}
return decoded
}
private static func saveTargets(_ targets: [String: Double]) {
if let data = try? JSONEncoder().encode(targets) {
UserDefaults.standard.set(data, forKey: targetsKey)
}
}
}