53 lines
2.0 KiB
Go
53 lines
2.0 KiB
Go
package app
|
|
|
|
import (
|
|
"fmt"
|
|
|
|
"code.tnxs.net/taxnexus/lib/api/geo/geo_models"
|
|
)
|
|
|
|
// GeocodeAddressParams is a params type
|
|
type GeocodeAddressParams struct {
|
|
BusinessAddress *Address
|
|
Account *Account
|
|
Ref string
|
|
}
|
|
|
|
// GeocodeAddress returns a full Coordinate object in response to Business Address
|
|
func GeocodeAddress(params GeocodeAddressParams, principal *User) (*geo_models.CoordinateBasic, error) {
|
|
if params.BusinessAddress == nil {
|
|
sugar.Infof("ops.geocodeAddress: ❗ Business Address is null, ref = %s", params.Ref)
|
|
deliveryAddress, acctErr := GetDefaultDeliveryAddress(params.Account, principal)
|
|
if acctErr != nil {
|
|
return nil, fmt.Errorf("ops.geocodeAddress: 💣 ⛔ can't determine default delivery address: %w", acctErr)
|
|
}
|
|
params.BusinessAddress = deliveryAddress
|
|
}
|
|
if params.BusinessAddress.City == "" {
|
|
sugar.Infof("ops.geocodeAddress: ❗ Business Address is blank, ref = %s", params.Ref)
|
|
deliveryAddress, acctErr := GetDefaultDeliveryAddress(params.Account, principal)
|
|
if acctErr != nil {
|
|
return nil, fmt.Errorf("ops.geocodeAddress: 💣 ⛔ can't determine default delivery address: %w", acctErr)
|
|
}
|
|
params.BusinessAddress = deliveryAddress
|
|
}
|
|
var situsCoordinate *geo_models.CoordinateBasic
|
|
aCoordinate, err := GetCoordinate(params.BusinessAddress, principal)
|
|
if err == nil {
|
|
situsCoordinate = aCoordinate
|
|
} else {
|
|
sugar.Infof("ops.geocodeAddress: ❗ can't geocode address: %w", err)
|
|
deliveryAddress, acctErr := GetDefaultDeliveryAddress(params.Account, principal)
|
|
if acctErr != nil {
|
|
return nil, fmt.Errorf("ops.geocodeAddress: 💣 ⛔ can't determine default delivery address: %w", acctErr)
|
|
}
|
|
aCoordinate, coordErr := GetCoordinate(deliveryAddress, principal)
|
|
if coordErr != nil {
|
|
return nil, fmt.Errorf("ops.geocodeAddress: 💣 ⛔ can't determine default delivery coordinates: %w", acctErr)
|
|
}
|
|
sugar.Infof("ops.geocodeAddress: ❗ alternate address used for ref = %s", params.Ref)
|
|
situsCoordinate = aCoordinate
|
|
}
|
|
return situsCoordinate, nil
|
|
}
|