package model import ( "strings" "git.sendico.io/tech/sxchnge/bff/pkg/db/storable" "git.sendico.io/tech/sxchnge/bff/pkg/mservice" ) type WalletProvisioningState string const ( WalletProvisioningStateProvisioning WalletProvisioningState = "provisioning" WalletProvisioningStateCompleted WalletProvisioningState = "completed" WalletProvisioningStateFailed WalletProvisioningState = "failed" ) type WalletProvisioningTargetState string const ( WalletProvisioningTargetStatePending WalletProvisioningTargetState = "pending" WalletProvisioningTargetStateWalletReady WalletProvisioningTargetState = "wallet_ready" WalletProvisioningTargetStateSuspended WalletProvisioningTargetState = "suspended" WalletProvisioningTargetStateRouted WalletProvisioningTargetState = "routed" ) type WalletProvisioningTarget struct { TargetID string `bson:"targetId" json:"targetId"` Chain ChainNetwork `bson:"chain" json:"chain"` Currency string `bson:"currency" json:"currency"` ContractAddress string `bson:"contractAddress,omitempty" json:"contractAddress,omitempty"` GatewayID string `bson:"gatewayId,omitempty" json:"gatewayId,omitempty"` GatewayURI string `bson:"gatewayUri,omitempty" json:"gatewayUri,omitempty"` WalletIdempotencyKey string `bson:"walletIdempotencyKey,omitempty" json:"walletIdempotencyKey,omitempty"` State WalletProvisioningTargetState `bson:"state" json:"state"` WalletRef string `bson:"walletRef,omitempty" json:"walletRef,omitempty"` Address string `bson:"address,omitempty" json:"address,omitempty"` RouteRef string `bson:"routeRef,omitempty" json:"routeRef,omitempty"` LastError string `bson:"lastError,omitempty" json:"lastError,omitempty"` } func (t *WalletProvisioningTarget) Normalize() { if t == nil { return } t.TargetID = strings.TrimSpace(t.TargetID) t.Currency = strings.ToUpper(strings.TrimSpace(t.Currency)) t.ContractAddress = strings.TrimSpace(t.ContractAddress) if strings.HasPrefix(strings.ToLower(t.ContractAddress), "0x") { t.ContractAddress = strings.ToLower(t.ContractAddress) } t.GatewayID = strings.TrimSpace(t.GatewayID) t.GatewayURI = strings.TrimSpace(t.GatewayURI) t.WalletIdempotencyKey = strings.TrimSpace(t.WalletIdempotencyKey) t.WalletRef = strings.TrimSpace(t.WalletRef) t.Address = strings.TrimSpace(t.Address) t.RouteRef = strings.TrimSpace(t.RouteRef) t.LastError = strings.TrimSpace(t.LastError) if t.State == "" { t.State = WalletProvisioningTargetStatePending } } type WalletProvisioningRecord struct { storable.Base `bson:",inline" json:",inline"` ProvisioningRef string `bson:"provisioningRef" json:"provisioningRef"` OrganizationRef string `bson:"organizationRef" json:"organizationRef"` OwnerRef string `bson:"ownerRef,omitempty" json:"ownerRef,omitempty"` LedgerAccountRef string `bson:"ledgerAccountRef" json:"ledgerAccountRef"` ActorRef string `bson:"actorRef,omitempty" json:"actorRef,omitempty"` Reason string `bson:"reason" json:"reason"` Currency string `bson:"currency" json:"currency"` State WalletProvisioningState `bson:"state" json:"state"` Targets []WalletProvisioningTarget `bson:"targets" json:"targets"` LastError string `bson:"lastError,omitempty" json:"lastError,omitempty"` // Version fences concurrent journal writers: Save replaces only the // revision this attempt read, so a stale attempt whose lease was taken // over cannot roll back the checkpoints of the attempt that owns it now. Version int64 `bson:"version" json:"-"` } func (*WalletProvisioningRecord) Collection() string { return mservice.WalletProvisioning } func (r *WalletProvisioningRecord) Normalize() { if r == nil { return } r.ProvisioningRef = strings.TrimSpace(r.ProvisioningRef) r.OrganizationRef = strings.TrimSpace(r.OrganizationRef) r.OwnerRef = strings.TrimSpace(r.OwnerRef) r.LedgerAccountRef = strings.TrimSpace(r.LedgerAccountRef) r.ActorRef = strings.TrimSpace(r.ActorRef) r.Reason = strings.TrimSpace(r.Reason) r.Currency = strings.ToUpper(strings.TrimSpace(r.Currency)) r.LastError = strings.TrimSpace(r.LastError) for index := range r.Targets { r.Targets[index].Normalize() } if r.State == "" { r.State = WalletProvisioningStateProvisioning } }