Documentation
¶
Index ¶
Constants ¶
const ( // Transaction Status TxStatusPending = "pending" TxStatusSubmitted = "submitted" TxStatusSuccess = "success" TxStatusFailed = "failed" TxStatusCancelled = "cancelled" // Transaction Category TxCategoryOnChain = "on_chain" TxCategoryOffChain = "off_chain" TxCategoryInternal = "internal" // Transaction Types — Loan Disbursement TxTypeVaultBorrow = "vault_borrow" // USDC borrowed from Stellar vault to user account TxTypeOffRamp = "off_ramp" // Off-ramp initiated (crypto-to-fiat via YellowCard) TxTypeFiatFailover = "fiat_failover" // Fiat failover after direct settlement refund TxTypeVaultRepay = "vault_repay" // USDC repaid from treasury back to Stellar vault )
const ( // User KYC Status KYCStatusPending = "pending" KYCStatusVerified = "verified" KYCStatusRejected = "rejected" KYCStatusExpired = "expired" // User/Account Status StatusActive = "active" StatusSuspended = "suspended" StatusBlocked = "blocked" StatusFrozen = "frozen" StatusClosed = "closed" )
Constants for status enums
const PredefinedQuestionCount = 5
PredefinedQuestionCount is the total number of predefined security questions available for selection. Question IDs range from 1 to PredefinedQuestionCount.
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type Account ¶
type Account struct {
ID string `json:"id" gorm:"type:uuid;primaryKey"`
UserID string `json:"user_id" gorm:"type:uuid;not null;index"`
PublicKey string `json:"public_key" gorm:"type:varchar(56);uniqueIndex;not null"`
AccountIndex int `json:"account_index" gorm:"not null"`
Status string `json:"status" gorm:"type:varchar(20);not null;default:'active'"`
CreatedAt time.Time `json:"created_at" gorm:"autoCreateTime;not null"`
UpdatedAt time.Time `json:"updated_at" gorm:"autoUpdateTime;not null"`
DeletedAt *time.Time `json:"deleted_at,omitempty" gorm:"index"`
User User `gorm:"foreignKey:UserID"`
}
Account represents a Stellar child account
func (*Account) BeforeCreate ¶
BeforeCreate sets the ID before creating a new account
type SecurityQuestion ¶
type SecurityQuestion struct {
ID string `json:"id" gorm:"type:uuid;primaryKey"`
UserID string `json:"user_id" gorm:"type:uuid;not null;index"`
QuestionID int `json:"question_id" gorm:"not null"`
AnswerHash string `json:"-" gorm:"type:varchar(72);not null"`
CreatedAt time.Time `json:"created_at" gorm:"autoCreateTime;not null"`
UpdatedAt time.Time `json:"updated_at" gorm:"autoUpdateTime;not null"`
User User `gorm:"foreignKey:UserID"`
}
SecurityQuestion stores a hashed answer to a predefined security question for a given user. Each user may have multiple security questions, identified by QuestionID (an integer index into a predefined question list). The combination of (UserID, QuestionID) is unique.
func (*SecurityQuestion) BeforeCreate ¶
func (sq *SecurityQuestion) BeforeCreate(tx *gorm.DB) error
BeforeCreate sets a UUIDv7 primary key before inserting a new row.
func (SecurityQuestion) TableName ¶
func (SecurityQuestion) TableName() string
TableName specifies the table name for the SecurityQuestion model.
type Transaction ¶
type Transaction struct {
ID string `json:"id" gorm:"type:uuid;primaryKey"`
UserID *string `json:"user_id,omitempty" gorm:"type:uuid;index"`
AccountID *string `json:"account_id,omitempty" gorm:"type:uuid;index"`
LoanID *string `json:"loan_id,omitempty" gorm:"type:uuid;index"`
TxType string `json:"tx_type" gorm:"type:varchar(50);not null;index"`
TxCategory string `json:"tx_category" gorm:"type:varchar(20);not null;default:'on_chain';index"`
Amount int64 `json:"amount" gorm:"type:bigint;not null"`
Asset string `json:"asset" gorm:"type:varchar(20);not null;index"`
StellarTxHash *string `json:"stellar_tx_hash,omitempty" gorm:"type:varchar(64);uniqueIndex"`
StellarLedger *int64 `json:"stellar_ledger,omitempty" gorm:"type:bigint"`
StellarStatus *string `json:"stellar_status,omitempty" gorm:"type:varchar(20)"`
ContractID *string `json:"contract_id,omitempty" gorm:"type:varchar(56);index"`
ContractFunction *string `json:"contract_function,omitempty" gorm:"type:varchar(100)"`
ExternalID *string `json:"external_id,omitempty" gorm:"type:varchar(100);index"`
ExternalProvider *string `json:"external_provider,omitempty" gorm:"type:varchar(50);index"`
ExternalStatus *string `json:"external_status,omitempty" gorm:"type:varchar(20)"`
Description *string `json:"description,omitempty" gorm:"type:text"`
Metadata *string `json:"metadata,omitempty" gorm:"type:jsonb"`
Status string `json:"status" gorm:"type:varchar(20);not null;default:'pending';index"`
CreatedAt time.Time `json:"created_at" gorm:"autoCreateTime;not null;index"`
UpdatedAt time.Time `json:"updated_at" gorm:"autoUpdateTime;not null"`
User *User `gorm:"foreignKey:UserID"`
Account *Account `gorm:"foreignKey:AccountID"`
}
Transaction represents a blockchain or off-chain transaction
func (*Transaction) BeforeCreate ¶
func (transaction *Transaction) BeforeCreate(tx *gorm.DB) error
BeforeCreate sets the ID before creating a new transaction
func (Transaction) TableName ¶
func (Transaction) TableName() string
TableName specifies the table name for Transaction model
type User ¶
type User struct {
ID string `json:"id" gorm:"type:uuid;primaryKey"`
MobileNumber string `json:"mobile_number" gorm:"type:varchar(20);uniqueIndex;not null"`
CountryCode string `json:"country_code" gorm:"type:varchar(5);not null;default:'KE'"`
MobileNetworkCode string `json:"mobile_network_code" gorm:"type:varchar(6);not null;default:'99999'"`
MomoNetworkCode string `json:"momo_network_code" gorm:"type:varchar(20);not null;default:'SANDBOX'"`
MomoNetworkName string `json:"momo_network_name" gorm:"type:varchar(20);not null;default:'Sandbox Network'"`
TelcoName string `json:"telco_name" gorm:"type:varchar(20);not null;default:'Athena'"`
FullName *string `json:"full_name,omitempty" gorm:"type:varchar(255)"`
NationalID *string `json:"national_id,omitempty" gorm:"type:varchar(50);uniqueIndex"`
KYCStatus string `json:"kyc_status" gorm:"type:varchar(20);not null;default:'pending'"`
KYCVerifiedAt *time.Time `json:"kyc_verified_at,omitempty" gorm:"type:timestamp"`
PinHash *string `json:"-" gorm:"type:varchar(72)"`
PinAttempts int `json:"-" gorm:"not null;default:0"`
PinLockedUntil *time.Time `json:"-" gorm:"type:timestamp"`
PinSetAt *time.Time `json:"-" gorm:"type:timestamp"`
PreferredLanguage string `json:"preferred_language" gorm:"type:varchar(10);not null;default:'en'"`
Status string `json:"status" gorm:"type:varchar(20);not null;default:'active'"`
Role string `json:"role" gorm:"type:varchar(20);not null;default:'user'"`
CreatedAt time.Time `json:"created_at" gorm:"autoCreateTime;not null"`
UpdatedAt time.Time `json:"updated_at" gorm:"autoUpdateTime;not null"`
DeletedAt *time.Time `json:"deleted_at,omitempty" gorm:"index"`
}
User represents a system user
func (*User) BeforeCreate ¶
BeforeCreate sets the ID before creating a new user