This commit is contained in:
Daniel Arantes Loverde
2026-02-15 08:18:06 -03:00
parent d7b8b1864a
commit 0f5ad4c268
35 changed files with 4090 additions and 309 deletions

View File

@@ -95,22 +95,24 @@ struct ContentView: View {
dismissAddressPickerIfAddressExists()
}
// Only refresh profile when there is no local address cache.
// This avoids forcing Profile flow on startup and still recovers
// existing addresses already registered in backend.
if hasConfiguredAddress() == false {
do {
let response = try await ApiService().profile()
if response.error == false, let customer = response.result {
hydrateAppState(with: customer)
}
} catch let error as ApiServiceError {
if case .sessionExpired = error {
forceLogoutToStart()
}
} catch {
// Keep local state when backend refresh fails transiently.
if let cachedCart = SessionStateStore.loadCart() {
appState.cart = cachedCart
}
// Always refresh profile when authenticated.
// This keeps profile/address/cart scope consistent after relogin
// and avoids stale local state during checkout payload generation.
do {
let response = try await ApiService().profile()
if response.error == false, let customer = response.result {
hydrateAppState(with: customer)
}
} catch let error as ApiServiceError {
if case .sessionExpired = error {
forceLogoutToStart()
}
} catch {
// Keep local state when backend refresh fails transiently.
}
isBootstrappingSession = false
@@ -125,6 +127,11 @@ struct ContentView: View {
SessionStateStore.setActiveUserKey(
SessionStateStore.makeUserKey(profileId: customer.id, email: customer.email)
)
if let cachedCart = SessionStateStore.loadCart() {
appState.cart = cachedCart
} else {
appState.cart = CartState()
}
let addresses = customer.addressBook ?? []
guard addresses.isEmpty == false else {
@@ -158,6 +165,8 @@ struct ContentView: View {
private func forceLogoutToStart() {
tokenStore.clear()
SessionStateStore.clearActiveUser()
AppContentCache.shared.invalidate()
AppImageCache.shared.invalidateAll()
isBootstrappingSession = false
appState = AppState()
selectedTab = .home