[cart-checkout] Fix delivery fee and address sync using stale cached profile
Cart's delivery fee and Checkout's address validation both fetched the customer profile without forcing a cache refresh (2h TTL), then let that possibly-stale address book unconditionally overwrite the just-picked appState.address coordinates before building the fee/validation payload. Result: changing the address on Home didn't reliably move the cart's delivery fee, and Checkout's 'Alterar' could silently revert to the old address when the stale coordinates made the backend report it as not served. Force-refresh the profile fetch and only use it to fill genuine gaps in appState.address, never to override a live user selection.
This commit is contained in:
@@ -71,7 +71,7 @@ extension CheckoutView {
|
||||
@MainActor
|
||||
func refreshSelectedCustomerAddress() async {
|
||||
do {
|
||||
let response = try await ApiService().profile()
|
||||
let response = try await ApiService().profile(forceRefresh: true)
|
||||
if let customer = response.result {
|
||||
appState.profile.id = customer.id
|
||||
appState.profile.name = customer.name
|
||||
@@ -117,12 +117,23 @@ extension CheckoutView {
|
||||
}
|
||||
|
||||
if let selected = selectedCustomerAddress {
|
||||
appState.address.selectedId = selected.id
|
||||
let label = (selected.label ?? "").trimmingCharacters(in: .whitespacesAndNewlines)
|
||||
if label.isEmpty == false {
|
||||
appState.address.display = label
|
||||
// appState.address reflects the address the user just picked —
|
||||
// authoritative. Only fill in gaps from the address book here,
|
||||
// never overwrite a live selection with a (possibly stale)
|
||||
// cached record, or delivery validation below runs against
|
||||
// the wrong coordinates and can wrongly report the address
|
||||
// as not served, reverting the user's pick.
|
||||
if appState.address.selectedId == nil || appState.address.selectedId?.isEmpty == true {
|
||||
appState.address.selectedId = selected.id
|
||||
}
|
||||
if let lat = selected.latLong?.first, let lng = selected.latLong?.dropFirst().first {
|
||||
if appState.address.display.isEmpty || appState.address.display == "Defina seu endereco" {
|
||||
let label = (selected.label ?? "").trimmingCharacters(in: .whitespacesAndNewlines)
|
||||
if label.isEmpty == false {
|
||||
appState.address.display = label
|
||||
}
|
||||
}
|
||||
if appState.address.latitude == nil || appState.address.longitude == nil,
|
||||
let lat = selected.latLong?.first, let lng = selected.latLong?.dropFirst().first {
|
||||
appState.address.latitude = lat
|
||||
appState.address.longitude = lng
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user