Files
sxchnge/backend/pkg/model/walletprovisioning.go
T

106 lines
4.7 KiB
Go

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
}
}