package models import ( "time" ) // Asset represents the assets table type Asset struct { ID uint `gorm:"primaryKey;autoIncrement" json:"id"` AssetCode string `gorm:"size:20;not null;unique;index" json:"asset_code"` Name string `gorm:"size:255;not null" json:"name"` Subtitle string `gorm:"type:text" json:"subtitle"` Description string `gorm:"type:text" json:"description"` TokenSymbol string `gorm:"size:20" json:"token_symbol"` Decimals int `gorm:"default:18" json:"decimals"` ChainID int `gorm:"default:97" json:"chain_id"` ContractAddress string `gorm:"size:42" json:"contract_address"` DeployBlock *uint64 `json:"deploy_block"` Category string `gorm:"size:100" json:"category"` CategoryColor string `gorm:"size:50" json:"category_color"` IconURL string `gorm:"type:text" json:"icon_url"` UnderlyingAssets string `gorm:"size:255" json:"underlying_assets"` TargetAPY float64 `gorm:"type:decimal(10,2)" json:"target_apy"` PoolCapUSD float64 `gorm:"type:decimal(30,2)" json:"pool_cap_usd"` RiskLevel int `json:"risk_level"` RiskLabel string `gorm:"size:50" json:"risk_label"` TokenRole string `gorm:"size:20;default:'product'" json:"token_role"` IsActive bool `gorm:"default:true" json:"is_active"` IsFeatured bool `gorm:"default:false" json:"is_featured"` CreatedAt time.Time `json:"created_at"` UpdatedAt time.Time `json:"updated_at"` } func (Asset) TableName() string { return "assets" } // AssetPerformance represents the asset_performance table type AssetPerformance struct { ID uint `gorm:"primaryKey;autoIncrement" json:"id"` AssetID uint `gorm:"not null;index" json:"asset_id"` CurrentAPY float64 `gorm:"type:decimal(10,2)" json:"current_apy"` TVLUSD float64 `gorm:"type:decimal(30,2)" json:"tvl_usd"` TotalInvestedUSD float64 `gorm:"type:decimal(30,2)" json:"total_invested_usd"` InvestorCount int `gorm:"default:0" json:"investor_count"` CumulativeYieldUSD float64 `gorm:"type:decimal(30,2)" json:"cumulative_yield_usd"` Yield24hUSD float64 `gorm:"type:decimal(30,2)" json:"yield_24h_usd"` PoolCapacityPercent float64 `gorm:"type:decimal(10,4)" json:"pool_capacity_percent"` CirculatingSupply float64 `gorm:"type:decimal(30,18)" json:"circulating_supply"` YTPrice float64 `gorm:"column:yt_price;type:decimal(30,18);default:0" json:"yt_price"` Volume24hUSD float64 `gorm:"column:volume_24h_usd;type:decimal(30,2);default:0" json:"volume_24h_usd"` SnapshotDate time.Time `gorm:"not null" json:"snapshot_date"` CreatedAt time.Time `json:"created_at"` } func (AssetPerformance) TableName() string { return "asset_performance" } // ProductResponse is the response format for fund market products type ProductResponse struct { ID int `json:"id"` Name string `json:"name"` TokenSymbol string `json:"tokenSymbol"` Decimals int `json:"decimals"` ContractAddress string `json:"contractAddress"` ChainID int `json:"chainId"` TokenRole string `json:"token_role"` Category string `json:"category"` CategoryColor string `json:"categoryColor"` IconURL string `json:"iconUrl"` YieldAPY string `json:"yieldAPY"` PoolCap string `json:"poolCap"` Risk string `json:"risk"` RiskLevel int `json:"riskLevel"` CirculatingSupply string `json:"circulatingSupply"` PoolCapacityPercent float64 `json:"poolCapacityPercent"` } // StatsResponse is the response format for fund market stats type StatsResponse struct { Label string `json:"label"` Value string `json:"value"` Change string `json:"change"` IsPositive bool `json:"isPositive"` } // AssetCustody represents the asset_custody table type AssetCustody struct { ID uint `gorm:"primaryKey;autoIncrement" json:"id"` AssetID uint `gorm:"not null;index" json:"asset_id"` CustodianName string `gorm:"size:255" json:"custodian_name"` CustodianAddress string `gorm:"type:text" json:"custodian_address"` CustodianLicense string `gorm:"size:255" json:"custodian_license"` CustodyType string `gorm:"size:100" json:"custody_type"` CustodyLocation string `gorm:"size:255" json:"custody_location"` AuditorName string `gorm:"size:255" json:"auditor_name"` LastAuditDate NullTime `json:"last_audit_date"` AuditReportURL string `gorm:"type:text" json:"audit_report_url"` AdditionalInfo string `gorm:"type:json" json:"additional_info"` CreatedAt time.Time `json:"created_at"` UpdatedAt time.Time `json:"updated_at"` } func (AssetCustody) TableName() string { return "asset_custody" } // AssetAuditReport represents the asset_audit_reports table type AssetAuditReport struct { ID uint `gorm:"primaryKey;autoIncrement" json:"id"` AssetID uint `gorm:"not null;index" json:"asset_id"` ReportType string `gorm:"size:50;not null" json:"report_type"` ReportTitle string `gorm:"size:255;not null" json:"report_title"` ReportDate time.Time `gorm:"not null" json:"report_date"` ReportURL string `gorm:"type:text" json:"report_url"` AuditorName string `gorm:"size:255" json:"auditor_name"` Summary string `gorm:"type:text" json:"summary"` IsActive bool `gorm:"default:true" json:"is_active"` DisplayOrder int `gorm:"default:0" json:"display_order"` CreatedAt time.Time `json:"created_at"` UpdatedAt time.Time `json:"updated_at"` } func (AssetAuditReport) TableName() string { return "asset_audit_reports" } // ProductDetailResponse is the detailed response for a single product type ProductDetailResponse struct { // Basic Info ID int `json:"id"` AssetCode string `json:"assetCode"` Name string `json:"name"` Subtitle string `json:"subtitle"` Description string `json:"description"` TokenSymbol string `json:"tokenSymbol"` Decimals int `json:"decimals"` // Investment Parameters UnderlyingAssets string `json:"underlyingAssets"` PoolCapUSD float64 `json:"poolCapUsd"` RiskLevel int `json:"riskLevel"` RiskLabel string `json:"riskLabel"` TargetAPY float64 `json:"targetApy"` // Contract Info ContractAddress string `json:"contractAddress"` ChainID int `json:"chainId"` // Display Info Category string `json:"category"` CategoryColor string `json:"categoryColor"` IconURL string `json:"iconUrl"` // Performance Data (from blockchain/database) CurrentAPY float64 `json:"currentApy"` TVLUSD float64 `json:"tvlUsd"` Volume24hUSD float64 `json:"volume24hUsd"` VolumeChangeVsAvg float64 `json:"volumeChangeVsAvg"` CirculatingSupply float64 `json:"circulatingSupply"` PoolCapacityPercent float64 `json:"poolCapacityPercent"` CurrentPrice float64 `json:"currentPrice"` // e.g., 1.04 USDC per token // Custody Info Custody *CustodyInfo `json:"custody,omitempty"` // Audit Reports AuditReports []AuditReportInfo `json:"auditReports"` // Product Links ProductLinks []ProductLinkInfo `json:"productLinks"` } // ProductLinkInfo represents a single product link item type ProductLinkInfo struct { LinkText string `json:"linkText"` LinkURL string `json:"linkUrl"` Description string `json:"description"` DisplayArea string `json:"displayArea"` DisplayOrder int `json:"displayOrder"` } // CustodyInfo represents custody information type CustodyInfo struct { CustodianName string `json:"custodianName"` CustodyType string `json:"custodyType"` CustodyLocation string `json:"custodyLocation"` AuditorName string `json:"auditorName"` LastAuditDate string `json:"lastAuditDate"` AuditReportURL string `json:"auditReportUrl,omitempty"` AdditionalInfo map[string]interface{} `json:"additionalInfo,omitempty"` } // AuditReportInfo represents audit report information type AuditReportInfo struct { ReportType string `json:"reportType"` ReportTitle string `json:"reportTitle"` ReportDate string `json:"reportDate"` AuditorName string `json:"auditorName"` Summary string `json:"summary"` ReportURL string `json:"reportUrl"` }