init: 初始化 AssetX 项目仓库
包含 webapp(Next.js 用户端)、webapp-back(Go 后端)、 antdesign(管理后台)、landingpage(营销落地页)、 数据库 SQL 和配置文件。
This commit is contained in:
217
webapp-back/models/config.go
Normal file
217
webapp-back/models/config.go
Normal file
@@ -0,0 +1,217 @@
|
||||
package models
|
||||
|
||||
import (
|
||||
"time"
|
||||
)
|
||||
|
||||
|
||||
// ALPSnapshot records periodic ALP pool stats for APR calculation
|
||||
type ALPSnapshot struct {
|
||||
ID uint `gorm:"primaryKey;autoIncrement" json:"id"`
|
||||
PoolValue float64 `gorm:"type:decimal(30,18)" json:"pool_value"` // getAumInUsdy(true), 18 dec
|
||||
UsdySupply float64 `gorm:"type:decimal(30,18)" json:"usdy_supply"` // USDY.totalSupply(), 18 dec
|
||||
FeeSurplus float64 `gorm:"type:decimal(30,18)" json:"fee_surplus"` // poolValue - usdySupply
|
||||
ALPPrice float64 `gorm:"type:decimal(30,18)" json:"alp_price"` // getPrice(false), 30 dec
|
||||
SnapshotTime time.Time `gorm:"not null;index" json:"snapshot_time"`
|
||||
CreatedAt time.Time `json:"created_at"`
|
||||
}
|
||||
|
||||
func (ALPSnapshot) TableName() string {
|
||||
return "alp_snapshots"
|
||||
}
|
||||
|
||||
// APYSnapshot represents the apy_snapshots table
|
||||
type APYSnapshot struct {
|
||||
ID uint `gorm:"primaryKey;autoIncrement" json:"id"`
|
||||
AssetID uint `gorm:"not null;index:idx_asset_time" json:"asset_id"`
|
||||
ChainID int `gorm:"not null" json:"chain_id"`
|
||||
ContractAddress string `gorm:"size:42" json:"contract_address"`
|
||||
APYValue float64 `gorm:"type:decimal(10,4)" json:"apy_value"`
|
||||
SupplyAPY float64 `gorm:"type:decimal(20,4)" json:"supply_apy"`
|
||||
BorrowAPY float64 `gorm:"type:decimal(20,4)" json:"borrow_apy"`
|
||||
TotalAssets float64 `gorm:"type:decimal(30,18)" json:"total_assets"`
|
||||
TotalSupply float64 `gorm:"type:decimal(30,18)" json:"total_supply"`
|
||||
Price float64 `gorm:"type:decimal(30,18)" json:"price"`
|
||||
SnapshotTime time.Time `gorm:"not null;index:idx_asset_time" json:"snapshot_time"`
|
||||
CreatedAt time.Time `json:"created_at"`
|
||||
}
|
||||
|
||||
func (APYSnapshot) TableName() string {
|
||||
return "apy_snapshots"
|
||||
}
|
||||
|
||||
// ProductLink represents the product_links table — per-asset links shown on the product detail page
|
||||
type ProductLink struct {
|
||||
ID uint `gorm:"primaryKey;autoIncrement" json:"id"`
|
||||
AssetID uint `gorm:"not null;index" json:"asset_id"`
|
||||
LinkText string `gorm:"size:100;not null" json:"link_text"`
|
||||
LinkURL string `gorm:"type:text;not null" json:"link_url"`
|
||||
Description string `gorm:"size:500" json:"description"`
|
||||
DisplayArea string `gorm:"size:20;default:protocol" json:"display_area"`
|
||||
DisplayOrder int `gorm:"default:0" json:"display_order"`
|
||||
IsActive bool `gorm:"default:true" json:"is_active"`
|
||||
CreatedAt time.Time `json:"created_at"`
|
||||
UpdatedAt time.Time `json:"updated_at"`
|
||||
}
|
||||
|
||||
func (ProductLink) TableName() string {
|
||||
return "product_links"
|
||||
}
|
||||
|
||||
// KLineData represents the kline_data table
|
||||
type KLineData struct {
|
||||
ID uint `gorm:"primaryKey;autoIncrement" json:"id"`
|
||||
AssetID uint `gorm:"not null;index:idx_asset_time" json:"asset_id"`
|
||||
ChainID int `gorm:"not null" json:"chain_id"`
|
||||
ContractAddress string `gorm:"size:42" json:"contract_address"`
|
||||
Timeframe string `gorm:"size:10;not null" json:"timeframe"`
|
||||
OpenTime time.Time `gorm:"not null;index:idx_asset_time" json:"open_time"`
|
||||
CloseTime time.Time `gorm:"not null" json:"close_time"`
|
||||
OpenPrice float64 `gorm:"type:decimal(30,18);not null" json:"open_price"`
|
||||
HighPrice float64 `gorm:"type:decimal(30,18);not null" json:"high_price"`
|
||||
LowPrice float64 `gorm:"type:decimal(30,18);not null" json:"low_price"`
|
||||
ClosePrice float64 `gorm:"type:decimal(30,18);not null" json:"close_price"`
|
||||
Volume float64 `gorm:"type:decimal(30,18)" json:"volume"`
|
||||
Trades int `json:"trades"`
|
||||
CreatedAt time.Time `json:"created_at"`
|
||||
}
|
||||
|
||||
func (KLineData) TableName() string {
|
||||
return "kline_data"
|
||||
}
|
||||
|
||||
|
||||
// PointsRule represents the points_rules table
|
||||
type PointsRule struct {
|
||||
ID uint `gorm:"primaryKey;autoIncrement" json:"id"`
|
||||
RuleName string `gorm:"size:100;not null;unique" json:"rule_name"`
|
||||
RuleType string `gorm:"size:50;not null" json:"rule_type"`
|
||||
BasePoints int `gorm:"not null" json:"base_points"`
|
||||
Multiplier float64 `gorm:"type:decimal(10,4);default:1.0000" json:"multiplier"`
|
||||
Conditions string `gorm:"type:json" json:"conditions"`
|
||||
Description string `gorm:"type:text" json:"description"`
|
||||
ValidFrom NullTime `json:"valid_from"`
|
||||
ValidUntil NullTime `json:"valid_until"`
|
||||
IsActive bool `gorm:"default:true" json:"is_active"`
|
||||
Priority int `gorm:"default:0" json:"priority"`
|
||||
CreatedAt time.Time `json:"created_at"`
|
||||
UpdatedAt time.Time `json:"updated_at"`
|
||||
}
|
||||
|
||||
func (PointsRule) TableName() string {
|
||||
return "points_rules"
|
||||
}
|
||||
|
||||
// Role represents the roles table
|
||||
type Role struct {
|
||||
ID uint `gorm:"primaryKey;autoIncrement" json:"id"`
|
||||
RoleName string `gorm:"size:50;not null;unique" json:"role_name"`
|
||||
Description string `gorm:"type:text" json:"description"`
|
||||
Permissions string `gorm:"type:json" json:"permissions"`
|
||||
IsActive bool `gorm:"default:true" json:"is_active"`
|
||||
CreatedAt time.Time `json:"created_at"`
|
||||
UpdatedAt time.Time `json:"updated_at"`
|
||||
}
|
||||
|
||||
func (Role) TableName() string {
|
||||
return "roles"
|
||||
}
|
||||
|
||||
// UserRole represents the user_roles table
|
||||
type UserRole struct {
|
||||
ID uint `gorm:"primaryKey;autoIncrement" json:"id"`
|
||||
UserID uint `gorm:"not null;uniqueIndex:uk_user_role" json:"user_id"`
|
||||
RoleID uint `gorm:"not null;uniqueIndex:uk_user_role" json:"role_id"`
|
||||
AssignedAt time.Time `gorm:"not null" json:"assigned_at"`
|
||||
AssignedBy uint `json:"assigned_by"`
|
||||
CreatedAt time.Time `json:"created_at"`
|
||||
}
|
||||
|
||||
func (UserRole) TableName() string {
|
||||
return "user_roles"
|
||||
}
|
||||
|
||||
// Session represents the sessions table
|
||||
type Session struct {
|
||||
ID uint `gorm:"primaryKey;autoIncrement" json:"id"`
|
||||
UserID uint `gorm:"not null;index" json:"user_id"`
|
||||
SessionToken string `gorm:"size:255;not null;unique" json:"session_token"`
|
||||
WalletAddress string `gorm:"size:42;not null" json:"wallet_address"`
|
||||
SignMessage string `gorm:"type:text" json:"sign_message"`
|
||||
Signature string `gorm:"size:132" json:"signature"`
|
||||
SignatureHash string `gorm:"size:66" json:"signature_hash"`
|
||||
IPAddress string `gorm:"size:45" json:"ip_address"`
|
||||
UserAgent string `gorm:"type:text" json:"user_agent"`
|
||||
ExpiresAt *time.Time `gorm:"index" json:"expires_at"`
|
||||
LastActivityAt *time.Time `json:"last_activity_at"`
|
||||
CreatedAt time.Time `json:"created_at"`
|
||||
}
|
||||
|
||||
func (Session) TableName() string {
|
||||
return "sessions"
|
||||
}
|
||||
|
||||
// Transaction represents the transactions table
|
||||
type Transaction struct {
|
||||
ID uint `gorm:"primaryKey;autoIncrement" json:"id"`
|
||||
UserID uint `gorm:"not null;index:idx_user_time" json:"user_id"`
|
||||
TxHash string `gorm:"size:66;not null;unique" json:"tx_hash"`
|
||||
ChainID int `gorm:"not null" json:"chain_id"`
|
||||
BlockNumber int64 `gorm:"not null" json:"block_number"`
|
||||
TxType string `gorm:"size:50;not null" json:"tx_type"`
|
||||
AssetID *uint `json:"asset_id"`
|
||||
FromAddress string `gorm:"size:42;not null" json:"from_address"`
|
||||
ToAddress string `gorm:"size:42;not null" json:"to_address"`
|
||||
Amount float64 `gorm:"type:decimal(30,18)" json:"amount"`
|
||||
TokenSymbol string `gorm:"size:20" json:"token_symbol"`
|
||||
GasUsed int64 `json:"gas_used"`
|
||||
GasPrice float64 `gorm:"type:decimal(30,18)" json:"gas_price"`
|
||||
Status string `gorm:"size:20;not null" json:"status"`
|
||||
ErrorMessage string `gorm:"type:text" json:"error_message"`
|
||||
Metadata string `gorm:"type:json" json:"metadata"`
|
||||
ConfirmedAt time.Time `gorm:"not null;index:idx_user_time" json:"confirmed_at"`
|
||||
CreatedAt time.Time `json:"created_at"`
|
||||
}
|
||||
|
||||
func (Transaction) TableName() string {
|
||||
return "transactions"
|
||||
}
|
||||
|
||||
// OperationLog represents the operation_logs table
|
||||
type OperationLog struct {
|
||||
ID uint `gorm:"primaryKey;autoIncrement" json:"id"`
|
||||
UserID *uint `gorm:"index" json:"user_id"`
|
||||
OperationType string `gorm:"size:50;not null" json:"operation_type"`
|
||||
TargetType string `gorm:"size:50" json:"target_type"`
|
||||
TargetID *uint `json:"target_id"`
|
||||
Action string `gorm:"size:100;not null" json:"action"`
|
||||
Changes string `gorm:"type:json" json:"changes"`
|
||||
IPAddress string `gorm:"size:45" json:"ip_address"`
|
||||
UserAgent string `gorm:"type:text" json:"user_agent"`
|
||||
Status string `gorm:"size:20;not null" json:"status"`
|
||||
ErrorMessage string `gorm:"type:text" json:"error_message"`
|
||||
CreatedAt time.Time `gorm:"index" json:"created_at"`
|
||||
}
|
||||
|
||||
func (OperationLog) TableName() string {
|
||||
return "operation_logs"
|
||||
}
|
||||
|
||||
// UserActivity represents the user_activities table
|
||||
type UserActivity struct {
|
||||
ID uint `gorm:"primaryKey;autoIncrement" json:"id"`
|
||||
UserID uint `gorm:"not null;index:idx_user_time" json:"user_id"`
|
||||
ActivityType string `gorm:"size:50;not null" json:"activity_type"`
|
||||
ActivityData string `gorm:"type:json" json:"activity_data"`
|
||||
AssetID *uint `json:"asset_id"`
|
||||
Amount float64 `gorm:"type:decimal(30,18)" json:"amount"`
|
||||
PointsEarned int `gorm:"default:0" json:"points_earned"`
|
||||
ReferenceType string `gorm:"size:50" json:"reference_type"`
|
||||
ReferenceID *uint `json:"reference_id"`
|
||||
IPAddress string `gorm:"size:45" json:"ip_address"`
|
||||
CreatedAt time.Time `gorm:"index:idx_user_time" json:"created_at"`
|
||||
}
|
||||
|
||||
func (UserActivity) TableName() string {
|
||||
return "user_activities"
|
||||
}
|
||||
Reference in New Issue
Block a user