Primera build enviada

This commit is contained in:
2026-01-19 14:40:43 +01:00
parent c6be398e5a
commit b03d35194f
36 changed files with 1641 additions and 561 deletions
@@ -21,13 +21,13 @@ class GoalsViewModel: ObservableObject {
private var lastSourcesHash: Int = 0
init(
goalRepository: GoalRepository = GoalRepository(),
sourceRepository: InvestmentSourceRepository = InvestmentSourceRepository(),
snapshotRepository: SnapshotRepository = SnapshotRepository()
goalRepository: GoalRepository? = nil,
sourceRepository: InvestmentSourceRepository? = nil,
snapshotRepository: SnapshotRepository? = nil
) {
self.goalRepository = goalRepository
self.sourceRepository = sourceRepository
self.snapshotRepository = snapshotRepository
self.goalRepository = goalRepository ?? GoalRepository()
self.sourceRepository = sourceRepository ?? InvestmentSourceRepository()
self.snapshotRepository = snapshotRepository ?? SnapshotRepository()
setupObservers()
refresh()
@@ -69,9 +69,9 @@ class GoalsViewModel: ObservableObject {
}
func totalValue(for goal: Goal) -> Decimal {
if let account = goal.account {
if let accountId = goal.account?.safeId {
return sourceRepository.sources
.filter { $0.account?.id == account.id }
.filter { $0.account?.id == accountId }
.reduce(Decimal.zero) { $0 + $1.latestValue }
}
return totalValue
@@ -143,8 +143,8 @@ class GoalsViewModel: ObservableObject {
}
let sources: [InvestmentSource]
if let account = goal.account {
sources = sourceRepository.sources.filter { $0.account?.id == account.id }
if let accountId = goal.account?.safeId {
sources = sourceRepository.sources.filter { $0.account?.id == accountId }
} else {
sources = sourceRepository.sources
}
@@ -155,7 +155,7 @@ class GoalsViewModel: ObservableObject {
}
// Performance: Use cached evolution data if available
let cacheKey = goal.account?.id ?? UUID(uuidString: "00000000-0000-0000-0000-000000000000")!
let cacheKey = goal.account?.safeId ?? UUID(uuidString: "00000000-0000-0000-0000-000000000000")!
let evolutionData: [(date: Date, value: Decimal)]
if let cached = cachedEvolutionData[cacheKey] {
evolutionData = cached
@@ -251,7 +251,8 @@ class GoalsViewModel: ObservableObject {
// MARK: - Private helpers
private func loadGoals() {
if showAllAccounts || selectedAccount == nil {
let selectedAccountId = selectedAccount?.safeId
if showAllAccounts || selectedAccountId == nil {
goalRepository.fetchGoals()
} else if let account = selectedAccount {
goalRepository.fetchGoals(for: account)
@@ -259,27 +260,25 @@ class GoalsViewModel: ObservableObject {
}
private func updateGoals(using repositoryGoals: [Goal]) {
if showAllAccounts || selectedAccount == nil {
let selectedAccountId = selectedAccount?.safeId
if showAllAccounts || selectedAccountId == nil {
goals = repositoryGoals
} else if let account = selectedAccount {
goals = repositoryGoals.filter { $0.account?.id == account.id }
} else {
goals = repositoryGoals
goals = repositoryGoals.filter { $0.account?.id == selectedAccountId }
}
updateTotalValue()
}
private func updateTotalValue() {
if showAllAccounts || selectedAccount == nil {
let selectedAccountId = selectedAccount?.safeId
if showAllAccounts || selectedAccountId == nil {
totalValue = sourceRepository.sources.reduce(Decimal.zero) { $0 + $1.latestValue }
return
}
if let account = selectedAccount {
totalValue = sourceRepository.sources
.filter { $0.account?.id == account.id }
.reduce(Decimal.zero) { $0 + $1.latestValue }
}
totalValue = sourceRepository.sources
.filter { $0.account?.id == selectedAccountId }
.reduce(Decimal.zero) { $0 + $1.latestValue }
}
}