Bootstrap copied BFF and local accounts with public Sendico contracts (#34)

This commit is contained in:
Stephan D committed 2026-09-12 13:37:48 +02:00
1 parent 67dc5b5b1e
commit 7062672a87
556 files changed
+42291 -777

No files matched your search

+150
View File
@@ -0,0 +1,150 @@
package model
import (
"strings"
"time"
"git.sendico.io/tech/sxchnge/bff/pkg/db/storable"
"git.sendico.io/tech/sxchnge/bff/pkg/mservice"
"go.mongodb.org/mongo-driver/v2/bson"
)
type SignupProvisioningState string
const (
SignupProvisioningStateStarted SignupProvisioningState = "started"
SignupProvisioningStateProvisioning SignupProvisioningState = "provisioning"
SignupProvisioningStateCompensating SignupProvisioningState = "compensating"
SignupProvisioningStateFailedPartialClean SignupProvisioningState = "failed_partial_cleanup"
SignupProvisioningStateFailedClean SignupProvisioningState = "failed_clean"
SignupProvisioningStateCompleted SignupProvisioningState = "completed"
)
type SignupProvisioningCleanupStatus string
const (
SignupProvisioningCleanupStatusNotNeeded SignupProvisioningCleanupStatus = "not_needed"
SignupProvisioningCleanupStatusPending SignupProvisioningCleanupStatus = "pending"
SignupProvisioningCleanupStatusRunning SignupProvisioningCleanupStatus = "running"
SignupProvisioningCleanupStatusComplete SignupProvisioningCleanupStatus = "complete"
SignupProvisioningCleanupStatusPartial SignupProvisioningCleanupStatus = "partial"
)
type SignupProvisioningTarget struct {
Chain ChainNetwork `bson:"chain" json:"chain"`
TokenSymbol string `bson:"tokenSymbol" json:"tokenSymbol"`
ContractAddress string `bson:"contractAddress,omitempty" json:"contractAddress,omitempty"`
}
func (t *SignupProvisioningTarget) Normalize() {
if t == nil {
return
}
t.Chain = ChainNetwork(strings.TrimSpace(t.Chain.String()))
t.TokenSymbol = strings.ToUpper(strings.TrimSpace(t.TokenSymbol))
t.ContractAddress = strings.TrimSpace(t.ContractAddress)
}
type SignupProvisionedWallet struct {
Chain ChainNetwork `bson:"chain" json:"chain"`
WalletRef string `bson:"walletRef" json:"walletRef"`
}
func (w *SignupProvisionedWallet) Normalize() {
if w == nil {
return
}
w.Chain = ChainNetwork(strings.TrimSpace(w.Chain.String()))
w.WalletRef = strings.TrimSpace(w.WalletRef)
}
type SignupProvisionedRoute struct {
WalletRef string `bson:"walletRef" json:"walletRef"`
RouteRef string `bson:"routeRef" json:"routeRef"`
}
func (r *SignupProvisionedRoute) Normalize() {
if r == nil {
return
}
r.WalletRef = strings.TrimSpace(r.WalletRef)
r.RouteRef = strings.TrimSpace(r.RouteRef)
}
type SignupProvisioningRecord struct {
storable.Base `bson:",inline" json:",inline"`
NormalizedLogin string `bson:"normalizedLogin" json:"normalizedLogin"`
OrganizationRef string `bson:"organizationRef,omitempty" json:"organizationRef,omitempty"`
AttemptID string `bson:"attemptId" json:"attemptId"`
State SignupProvisioningState `bson:"state" json:"state"`
CleanupStatus SignupProvisioningCleanupStatus `bson:"cleanupStatus" json:"cleanupStatus"`
LeaseOwner string `bson:"leaseOwner" json:"leaseOwner"`
LeaseExpiresAt time.Time `bson:"leaseExpiresAt" json:"leaseExpiresAt"`
HeartbeatAt time.Time `bson:"heartbeatAt" json:"heartbeatAt"`
SelectedTargets []SignupProvisioningTarget `bson:"selectedTargets,omitempty" json:"selectedTargets,omitempty"`
Wallets []SignupProvisionedWallet `bson:"wallets,omitempty" json:"wallets,omitempty"`
Routes []SignupProvisionedRoute `bson:"routes,omitempty" json:"routes,omitempty"`
StepStatus map[string]string `bson:"stepStatus,omitempty" json:"stepStatus,omitempty"`
LastError string `bson:"lastError,omitempty" json:"lastError,omitempty"`
LastCleanupError string `bson:"lastCleanupError,omitempty" json:"lastCleanupError,omitempty"`
ExpiresAt *time.Time `bson:"expiresAt,omitempty" json:"expiresAt,omitempty"`
}
func (*SignupProvisioningRecord) Collection() string {
return mservice.SignupProvisioning
}
func (r *SignupProvisioningRecord) Normalize() {
if r == nil {
return
}
r.NormalizedLogin = strings.ToLower(strings.TrimSpace(r.NormalizedLogin))
r.OrganizationRef = strings.TrimSpace(r.OrganizationRef)
r.AttemptID = strings.TrimSpace(r.AttemptID)
r.LeaseOwner = strings.TrimSpace(r.LeaseOwner)
r.LastError = strings.TrimSpace(r.LastError)
r.LastCleanupError = strings.TrimSpace(r.LastCleanupError)
for i := range r.SelectedTargets {
r.SelectedTargets[i].Normalize()
}
for i := range r.Wallets {
r.Wallets[i].Normalize()
}
for i := range r.Routes {
r.Routes[i].Normalize()
}
if r.StepStatus == nil {
r.StepStatus = map[string]string{}
}
}
func (r *SignupProvisioningRecord) Active() bool {
if r == nil {
return false
}
switch r.State {
case SignupProvisioningStateStarted, SignupProvisioningStateProvisioning, SignupProvisioningStateCompensating:
return true
default:
return false
}
}
func (r *SignupProvisioningRecord) Terminal() bool {
if r == nil {
return false
}
switch r.State {
case SignupProvisioningStateFailedPartialClean, SignupProvisioningStateFailedClean, SignupProvisioningStateCompleted:
return true
default:
return false
}
}
func (r *SignupProvisioningRecord) OrganizationObjectID() bson.ObjectID {
ref, _ := bson.ObjectIDFromHex(strings.TrimSpace(r.OrganizationRef))
return ref
}