...
This commit is contained in:
parent
993fa2adcd
commit
fc7e327f07
11
specs/models_marketplace/core/base.v
Normal file
11
specs/models_marketplace/core/base.v
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
module core
|
||||||
|
|
||||||
|
// BaseData provides common fields for all models
|
||||||
|
pub struct Base {
|
||||||
|
pub mut:
|
||||||
|
id u32
|
||||||
|
created u64 // Unix timestamp of creation
|
||||||
|
updated u64 // Unix timestamp of last update
|
||||||
|
deleted bool
|
||||||
|
version u32
|
||||||
|
}
|
1
specs/models_marketplace/core/mod.v
Normal file
1
specs/models_marketplace/core/mod.v
Normal file
@ -0,0 +1 @@
|
|||||||
|
module core
|
23
specs/models_marketplace/main/config.v
Normal file
23
specs/models_marketplace/main/config.v
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
module main
|
||||||
|
|
||||||
|
import freeflowuniverse.herolib.hero.models.marketplace.core
|
||||||
|
|
||||||
|
|
||||||
|
pub struct MarketplaceCurrencyConfig {
|
||||||
|
pub mut:
|
||||||
|
base_currency string
|
||||||
|
supported_currencies []string
|
||||||
|
default_display_currency string
|
||||||
|
auto_update_rates bool
|
||||||
|
update_interval_minutes u32
|
||||||
|
fallback_rates map[string]f64 // Using f64 for Decimal
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// User currency preferences
|
||||||
|
pub struct UserCurrencyPreference {
|
||||||
|
pub mut:
|
||||||
|
user_id string
|
||||||
|
preferred_currency string
|
||||||
|
updated_at u64 // Unix timestamp
|
||||||
|
}
|
64
specs/models_marketplace/main/currency.v
Normal file
64
specs/models_marketplace/main/currency.v
Normal file
@ -0,0 +1,64 @@
|
|||||||
|
module main
|
||||||
|
|
||||||
|
import freeflowuniverse.herolib.hero.models.marketplace.core
|
||||||
|
|
||||||
|
// Configurable currency support for any currency type
|
||||||
|
pub struct Currency {
|
||||||
|
core.Base
|
||||||
|
pub mut:
|
||||||
|
code string // USD, EUR, BTC, ETH, etc.
|
||||||
|
name string
|
||||||
|
symbol string
|
||||||
|
currency_type CurrencyType
|
||||||
|
exchange_rate_to_base f64 // Using f64 for Decimal
|
||||||
|
is_base_currency bool
|
||||||
|
decimal_places u8
|
||||||
|
is_active bool
|
||||||
|
}
|
||||||
|
|
||||||
|
pub enum CurrencyType {
|
||||||
|
fiat
|
||||||
|
cryptocurrency
|
||||||
|
token
|
||||||
|
points
|
||||||
|
custom
|
||||||
|
}
|
||||||
|
|
||||||
|
pub struct Price {
|
||||||
|
pub mut:
|
||||||
|
base_amount f64 // Using f64 for Decimal
|
||||||
|
base_currency string
|
||||||
|
display_currency string
|
||||||
|
display_amount f64 // Using f64 for Decimal
|
||||||
|
formatted_display string
|
||||||
|
conversion_rate f64 // Using f64 for Decimal
|
||||||
|
conversion_timestamp u64 // Unix timestamp
|
||||||
|
}
|
||||||
|
|
||||||
|
pub struct MarketplaceCurrencyConfig {
|
||||||
|
pub mut:
|
||||||
|
base_currency string
|
||||||
|
supported_currencies []string
|
||||||
|
default_display_currency string
|
||||||
|
auto_update_rates bool
|
||||||
|
update_interval_minutes u32
|
||||||
|
fallback_rates map[string]f64 // Using f64 for Decimal
|
||||||
|
}
|
||||||
|
|
||||||
|
// Exchange rate history for tracking changes over time
|
||||||
|
pub struct ExchangeRateHistory {
|
||||||
|
pub mut:
|
||||||
|
from_currency string
|
||||||
|
to_currency string
|
||||||
|
rate f64 // Using f64 for Decimal
|
||||||
|
timestamp u64 // Unix timestamp
|
||||||
|
provider string
|
||||||
|
}
|
||||||
|
|
||||||
|
// User currency preferences
|
||||||
|
pub struct UserCurrencyPreference {
|
||||||
|
pub mut:
|
||||||
|
user_id string
|
||||||
|
preferred_currency string
|
||||||
|
updated_at u64 // Unix timestamp
|
||||||
|
}
|
115
specs/models_marketplace/main/order.v
Normal file
115
specs/models_marketplace/main/order.v
Normal file
@ -0,0 +1,115 @@
|
|||||||
|
module main
|
||||||
|
|
||||||
|
import freeflowuniverse.herolib.hero.models.marketplace.core
|
||||||
|
|
||||||
|
pub struct Order {
|
||||||
|
core.Base
|
||||||
|
pub mut:
|
||||||
|
id string
|
||||||
|
user_id string
|
||||||
|
items []OrderItem
|
||||||
|
subtotal_base f64 // Using f64 for Decimal
|
||||||
|
total_base f64 // Using f64 for Decimal
|
||||||
|
base_currency string
|
||||||
|
currency_used string
|
||||||
|
currency_total f64 // Using f64 for Decimal
|
||||||
|
conversion_rate f64 // Using f64 for Decimal
|
||||||
|
status OrderStatus
|
||||||
|
payment_method string
|
||||||
|
payment_details PaymentDetails
|
||||||
|
billing_address Address
|
||||||
|
shipping_address Address
|
||||||
|
notes string
|
||||||
|
purchase_type PurchaseType
|
||||||
|
created_at u64 // Unix timestamp
|
||||||
|
updated_at u64 // Unix timestamp
|
||||||
|
}
|
||||||
|
|
||||||
|
pub struct OrderItem {
|
||||||
|
pub mut:
|
||||||
|
product_id string
|
||||||
|
product_name string
|
||||||
|
product_category string
|
||||||
|
quantity u32
|
||||||
|
unit_price_base f64 // Using f64 for Decimal
|
||||||
|
total_price_base f64 // Using f64 for Decimal
|
||||||
|
specifications map[string]string // Using map[string]string for HashMap<String, serde_json::Value>
|
||||||
|
provider_id string
|
||||||
|
provider_name string
|
||||||
|
}
|
||||||
|
|
||||||
|
pub enum OrderStatus {
|
||||||
|
pending
|
||||||
|
confirmed
|
||||||
|
processing
|
||||||
|
deployed
|
||||||
|
completed
|
||||||
|
cancelled
|
||||||
|
refunded
|
||||||
|
failed
|
||||||
|
}
|
||||||
|
|
||||||
|
// Purchase type to distinguish between cart-based and instant purchases
|
||||||
|
pub enum PurchaseType {
|
||||||
|
cart
|
||||||
|
instant
|
||||||
|
}
|
||||||
|
|
||||||
|
pub struct PaymentDetails {
|
||||||
|
pub mut:
|
||||||
|
payment_id string
|
||||||
|
payment_method PaymentMethod
|
||||||
|
transaction_id string
|
||||||
|
payment_status PaymentStatus
|
||||||
|
payment_timestamp u64 // Unix timestamp
|
||||||
|
failure_reason string
|
||||||
|
}
|
||||||
|
|
||||||
|
pub enum PaymentMethod {
|
||||||
|
credit_card // CreditCard { last_four: String, card_type: String }
|
||||||
|
bank_transfer // BankTransfer { bank_name: String, account_last_four: String }
|
||||||
|
cryptocurrency // Cryptocurrency { currency: String, wallet_address: String }
|
||||||
|
token // Token { token_type: String, wallet_address: String }
|
||||||
|
mock // Mock { method_name: String }
|
||||||
|
}
|
||||||
|
|
||||||
|
pub struct Address {
|
||||||
|
pub mut:
|
||||||
|
street string
|
||||||
|
city string
|
||||||
|
state string
|
||||||
|
postal_code string
|
||||||
|
country string
|
||||||
|
company string
|
||||||
|
}
|
||||||
|
|
||||||
|
// Shopping Cart Models
|
||||||
|
pub struct CartItem {
|
||||||
|
pub mut:
|
||||||
|
product_id string
|
||||||
|
quantity u32
|
||||||
|
selected_specifications map[string]string // Using map[string]string for HashMap<String, serde_json::Value>
|
||||||
|
added_at u64 // Unix timestamp
|
||||||
|
updated_at u64 // Unix timestamp
|
||||||
|
}
|
||||||
|
|
||||||
|
pub struct Cart {
|
||||||
|
pub mut:
|
||||||
|
user_id string
|
||||||
|
items []CartItem
|
||||||
|
session_id string
|
||||||
|
created_at u64 // Unix timestamp
|
||||||
|
updated_at u64 // Unix timestamp
|
||||||
|
}
|
||||||
|
|
||||||
|
// Order summary for display purposes
|
||||||
|
pub struct OrderSummary {
|
||||||
|
pub mut:
|
||||||
|
subtotal f64 // Using f64 for Decimal
|
||||||
|
tax f64 // Using f64 for Decimal
|
||||||
|
shipping f64 // Using f64 for Decimal
|
||||||
|
discount f64 // Using f64 for Decimal
|
||||||
|
total f64 // Using f64 for Decimal
|
||||||
|
currency string
|
||||||
|
item_count u32
|
||||||
|
}
|
93
specs/models_marketplace/main/pool.v
Normal file
93
specs/models_marketplace/main/pool.v
Normal file
@ -0,0 +1,93 @@
|
|||||||
|
module main
|
||||||
|
|
||||||
|
import freeflowuniverse.herolib.hero.models.marketplace.core
|
||||||
|
|
||||||
|
pub struct LiquidityPool {
|
||||||
|
core.Base
|
||||||
|
pub mut:
|
||||||
|
id string
|
||||||
|
name string
|
||||||
|
token_a string
|
||||||
|
token_b string
|
||||||
|
reserve_a f64 // Using f64 for Decimal
|
||||||
|
reserve_b f64 // Using f64 for Decimal
|
||||||
|
exchange_rate f64 // Using f64 for Decimal
|
||||||
|
liquidity f64 // Using f64 for Decimal
|
||||||
|
volume_24h f64 // Using f64 for Decimal
|
||||||
|
fee_percentage f64 // Using f64 for Decimal
|
||||||
|
status PoolStatus
|
||||||
|
}
|
||||||
|
|
||||||
|
pub enum PoolStatus {
|
||||||
|
active
|
||||||
|
paused
|
||||||
|
maintenance
|
||||||
|
}
|
||||||
|
|
||||||
|
pub struct ExchangeRequest {
|
||||||
|
pub mut:
|
||||||
|
pool_id string
|
||||||
|
from_token string
|
||||||
|
to_token string
|
||||||
|
amount f64 // Using f64 for Decimal
|
||||||
|
min_receive f64 // Using f64 for Decimal
|
||||||
|
slippage_tolerance f64 // Using f64 for Decimal
|
||||||
|
}
|
||||||
|
|
||||||
|
pub struct ExchangeResponse {
|
||||||
|
pub mut:
|
||||||
|
success bool
|
||||||
|
message string
|
||||||
|
transaction_id string
|
||||||
|
from_amount f64 // Using f64 for Decimal
|
||||||
|
to_amount f64 // Using f64 for Decimal
|
||||||
|
exchange_rate f64 // Using f64 for Decimal
|
||||||
|
fee f64 // Using f64 for Decimal
|
||||||
|
}
|
||||||
|
|
||||||
|
pub struct StakeRequest {
|
||||||
|
pub mut:
|
||||||
|
amount f64 // Using f64 for Decimal
|
||||||
|
duration_months u32
|
||||||
|
}
|
||||||
|
|
||||||
|
pub struct StakePosition {
|
||||||
|
core.Base
|
||||||
|
pub mut:
|
||||||
|
id string
|
||||||
|
user_id string
|
||||||
|
amount f64 // Using f64 for Decimal
|
||||||
|
start_date u64 // Unix timestamp
|
||||||
|
end_date u64 // Unix timestamp
|
||||||
|
discount_percentage f64 // Using f64 for Decimal
|
||||||
|
reputation_bonus int
|
||||||
|
status StakeStatus
|
||||||
|
}
|
||||||
|
|
||||||
|
pub enum StakeStatus {
|
||||||
|
active
|
||||||
|
completed
|
||||||
|
withdrawn
|
||||||
|
}
|
||||||
|
|
||||||
|
// Pool analytics data
|
||||||
|
pub struct PoolAnalytics {
|
||||||
|
pub mut:
|
||||||
|
price_history []PricePoint
|
||||||
|
volume_history []VolumePoint
|
||||||
|
liquidity_distribution map[string]f64 // Using f64 for Decimal
|
||||||
|
staking_distribution map[string]int
|
||||||
|
}
|
||||||
|
|
||||||
|
pub struct PricePoint {
|
||||||
|
pub mut:
|
||||||
|
timestamp u64 // Unix timestamp
|
||||||
|
price f64 // Using f64 for Decimal
|
||||||
|
volume f64 // Using f64 for Decimal
|
||||||
|
}
|
||||||
|
|
||||||
|
pub struct VolumePoint {
|
||||||
|
pub mut:
|
||||||
|
date string
|
||||||
|
volume f64 // Using f64 for Decimal
|
||||||
|
}
|
177
specs/models_marketplace/main/product.v
Normal file
177
specs/models_marketplace/main/product.v
Normal file
@ -0,0 +1,177 @@
|
|||||||
|
module main
|
||||||
|
|
||||||
|
import freeflowuniverse.herolib.hero.models.marketplace.core
|
||||||
|
|
||||||
|
// Generic product structure that can represent any marketplace item
|
||||||
|
pub struct Product {
|
||||||
|
core.Base
|
||||||
|
pub mut:
|
||||||
|
id string
|
||||||
|
name string
|
||||||
|
category_id string // References ProductCategory config
|
||||||
|
description string
|
||||||
|
base_price f64 // Using f64 for Decimal
|
||||||
|
base_currency string
|
||||||
|
attributes map[string]ProductAttribute // Generic attributes
|
||||||
|
provider_id string
|
||||||
|
provider_name string
|
||||||
|
availability ProductAvailability
|
||||||
|
metadata ProductMetadata // Extensible metadata
|
||||||
|
created_at u64 // Unix timestamp
|
||||||
|
updated_at u64 // Unix timestamp
|
||||||
|
}
|
||||||
|
|
||||||
|
// Configurable product categories
|
||||||
|
pub struct ProductCategory {
|
||||||
|
pub mut:
|
||||||
|
id string
|
||||||
|
name string
|
||||||
|
display_name string
|
||||||
|
description string
|
||||||
|
attribute_schema []AttributeDefinition // Defines allowed attributes
|
||||||
|
parent_category string
|
||||||
|
is_active bool
|
||||||
|
}
|
||||||
|
|
||||||
|
// Generic attribute system for any product type
|
||||||
|
pub struct ProductAttribute {
|
||||||
|
pub mut:
|
||||||
|
key string
|
||||||
|
value string // Using string for serde_json::Value, consider map[string]string or specific types
|
||||||
|
attribute_type AttributeType
|
||||||
|
is_searchable bool
|
||||||
|
is_filterable bool
|
||||||
|
display_order u32
|
||||||
|
}
|
||||||
|
|
||||||
|
pub enum AttributeType {
|
||||||
|
text
|
||||||
|
number
|
||||||
|
slice_configuration
|
||||||
|
boolean
|
||||||
|
select // Select(Vec<String>)
|
||||||
|
multi_select // MultiSelect(Vec<String>)
|
||||||
|
range // Range { min: f64, max: f64 }
|
||||||
|
custom
|
||||||
|
}
|
||||||
|
|
||||||
|
pub struct AttributeDefinition {
|
||||||
|
pub mut:
|
||||||
|
key string
|
||||||
|
name string
|
||||||
|
attribute_type AttributeType
|
||||||
|
is_required bool
|
||||||
|
is_searchable bool
|
||||||
|
is_filterable bool
|
||||||
|
validation_rules []ValidationRule
|
||||||
|
}
|
||||||
|
|
||||||
|
pub enum ValidationRule {
|
||||||
|
min_length // MinLength(usize)
|
||||||
|
max_length // MaxLength(usize)
|
||||||
|
min_value // MinValue(f64)
|
||||||
|
max_value // MaxValue(f64)
|
||||||
|
pattern // Pattern(String)
|
||||||
|
custom
|
||||||
|
}
|
||||||
|
|
||||||
|
pub enum ProductAvailability {
|
||||||
|
available
|
||||||
|
limited
|
||||||
|
unavailable
|
||||||
|
pre_order
|
||||||
|
custom
|
||||||
|
}
|
||||||
|
|
||||||
|
pub struct ProductMetadata {
|
||||||
|
pub mut:
|
||||||
|
tags []string
|
||||||
|
location string
|
||||||
|
rating f32
|
||||||
|
review_count u32
|
||||||
|
featured bool
|
||||||
|
custom_fields map[string]string // Using map[string]string for HashMap<String, serde_json::Value>
|
||||||
|
}
|
||||||
|
|
||||||
|
// Support for different pricing models
|
||||||
|
pub enum PricingModel {
|
||||||
|
one_time
|
||||||
|
recurring // Recurring { interval: String }
|
||||||
|
usage_based // UsageBased { unit: String }
|
||||||
|
tiered // Tiered(Vec<PriceTier>)
|
||||||
|
custom
|
||||||
|
}
|
||||||
|
|
||||||
|
pub struct PriceTier {
|
||||||
|
pub mut:
|
||||||
|
min_quantity u32
|
||||||
|
max_quantity u32
|
||||||
|
price_per_unit f64 // Using f64 for Decimal
|
||||||
|
discount_percentage f32
|
||||||
|
}
|
||||||
|
|
||||||
|
// Slice configuration data structure for product attributes
|
||||||
|
pub struct SliceConfiguration {
|
||||||
|
pub mut:
|
||||||
|
cpu_cores int
|
||||||
|
memory_gb int
|
||||||
|
storage_gb int
|
||||||
|
bandwidth_mbps int
|
||||||
|
min_uptime_sla f32
|
||||||
|
public_ips int
|
||||||
|
node_id string
|
||||||
|
slice_type SliceType
|
||||||
|
pricing SlicePricing
|
||||||
|
}
|
||||||
|
|
||||||
|
// Enhanced pricing structure for slices with multiple time periods
|
||||||
|
pub struct SlicePricing {
|
||||||
|
pub mut:
|
||||||
|
hourly f64 // Using f64 for Decimal
|
||||||
|
daily f64 // Using f64 for Decimal
|
||||||
|
monthly f64 // Using f64 for Decimal
|
||||||
|
yearly f64 // Using f64 for Decimal
|
||||||
|
}
|
||||||
|
|
||||||
|
pub enum SliceType {
|
||||||
|
basic
|
||||||
|
standard
|
||||||
|
premium
|
||||||
|
custom
|
||||||
|
}
|
||||||
|
|
||||||
|
// Placeholder for SliceAllocation and SliceCombination
|
||||||
|
// These are not directly from product.rs but are referenced in user.rs
|
||||||
|
pub struct SliceAllocation {
|
||||||
|
pub mut:
|
||||||
|
slice_id string
|
||||||
|
node_id string
|
||||||
|
user_id string
|
||||||
|
allocated_cpu_cores int
|
||||||
|
allocated_memory_gb int
|
||||||
|
allocated_storage_gb int
|
||||||
|
allocated_bandwidth_mbps int
|
||||||
|
start_time u64
|
||||||
|
end_time u64
|
||||||
|
}
|
||||||
|
|
||||||
|
pub struct SliceCombination {
|
||||||
|
pub mut:
|
||||||
|
cpu_cores int
|
||||||
|
memory_gb int
|
||||||
|
storage_gb int
|
||||||
|
bandwidth_mbps int
|
||||||
|
price_per_hour f64
|
||||||
|
}
|
||||||
|
|
||||||
|
// Placeholder for DefaultSliceFormat
|
||||||
|
// This is not directly from product.rs but is referenced in user.rs
|
||||||
|
pub struct DefaultSliceFormat {
|
||||||
|
pub mut:
|
||||||
|
name string
|
||||||
|
cpu_cores int
|
||||||
|
memory_gb int
|
||||||
|
storage_gb int
|
||||||
|
bandwidth_mbps int
|
||||||
|
price_per_hour f64
|
||||||
|
}
|
730
specs/models_marketplace/main/user.v
Normal file
730
specs/models_marketplace/main/user.v
Normal file
@ -0,0 +1,730 @@
|
|||||||
|
module main
|
||||||
|
|
||||||
|
import freeflowuniverse.herolib.hero.models.marketplace.core
|
||||||
|
|
||||||
|
// Represents a user in the system
|
||||||
|
pub struct User {
|
||||||
|
core.Base
|
||||||
|
pub mut:
|
||||||
|
id u32 // Unique identifier for the user, using u32 for consistency with VLang
|
||||||
|
name string // User's full name
|
||||||
|
email string // User's email address
|
||||||
|
role UserRole // User's role in the system
|
||||||
|
country string // User's country
|
||||||
|
timezone string // User's timezone
|
||||||
|
created_at u64 // Unix timestamp of creation
|
||||||
|
updated_at u64 // Unix timestamp of last update
|
||||||
|
mock_data MockUserData // Mock data for dashboard
|
||||||
|
}
|
||||||
|
|
||||||
|
// Represents the possible roles a user can have
|
||||||
|
pub enum UserRole {
|
||||||
|
user
|
||||||
|
admin
|
||||||
|
}
|
||||||
|
|
||||||
|
// Represents user login credentials
|
||||||
|
pub struct LoginCredentials {
|
||||||
|
pub mut:
|
||||||
|
email string
|
||||||
|
password string
|
||||||
|
}
|
||||||
|
|
||||||
|
// Represents user registration data
|
||||||
|
pub struct RegistrationData {
|
||||||
|
pub mut:
|
||||||
|
name string
|
||||||
|
email string
|
||||||
|
password string
|
||||||
|
password_confirmation string
|
||||||
|
}
|
||||||
|
|
||||||
|
// Mock user data for testing
|
||||||
|
pub struct MockUserData {
|
||||||
|
pub mut:
|
||||||
|
active_deployments int
|
||||||
|
active_slices int
|
||||||
|
current_cost int
|
||||||
|
balance int
|
||||||
|
wallet_balance_usd f64 // Using f64 for Decimal, consider string for high precision
|
||||||
|
owned_product_ids []string
|
||||||
|
active_rentals []string
|
||||||
|
transaction_history []Transaction
|
||||||
|
resource_utilization ResourceUtilization
|
||||||
|
usd_usage_trend []int
|
||||||
|
user_activity UserActivityStats
|
||||||
|
recent_activities []RecentActivity
|
||||||
|
deployment_distribution DeploymentDistribution
|
||||||
|
farmer_data FarmerData // Farmer-specific data
|
||||||
|
app_provider_data AppProviderData // App Provider-specific data
|
||||||
|
service_provider_data ServiceProviderData // Service Provider-specific data
|
||||||
|
customer_service_data CustomerServiceData // Customer Service-specific data
|
||||||
|
}
|
||||||
|
|
||||||
|
pub struct ResourceUtilization {
|
||||||
|
pub mut:
|
||||||
|
cpu int
|
||||||
|
memory int
|
||||||
|
storage int
|
||||||
|
network int
|
||||||
|
}
|
||||||
|
|
||||||
|
pub struct UserActivityStats {
|
||||||
|
pub mut:
|
||||||
|
deployments []int
|
||||||
|
resource_reservations []int
|
||||||
|
}
|
||||||
|
|
||||||
|
pub struct RecentActivity {
|
||||||
|
pub mut:
|
||||||
|
date string
|
||||||
|
action string
|
||||||
|
status string
|
||||||
|
details string
|
||||||
|
}
|
||||||
|
|
||||||
|
pub struct DeploymentDistribution {
|
||||||
|
pub mut:
|
||||||
|
regions []RegionDeployments
|
||||||
|
}
|
||||||
|
|
||||||
|
pub struct RegionDeployments {
|
||||||
|
pub mut:
|
||||||
|
region string
|
||||||
|
nodes int
|
||||||
|
slices int
|
||||||
|
apps int
|
||||||
|
gateways int
|
||||||
|
}
|
||||||
|
|
||||||
|
// Farmer-specific data
|
||||||
|
pub struct FarmerData {
|
||||||
|
pub mut:
|
||||||
|
total_nodes int
|
||||||
|
online_nodes int
|
||||||
|
total_capacity NodeCapacity
|
||||||
|
used_capacity NodeCapacity
|
||||||
|
monthly_earnings_usd int
|
||||||
|
total_earnings_usd int
|
||||||
|
uptime_percentage f32
|
||||||
|
nodes []FarmNode
|
||||||
|
earnings_history []EarningsRecord
|
||||||
|
slice_templates []Product
|
||||||
|
active_slices int
|
||||||
|
}
|
||||||
|
|
||||||
|
pub struct NodeCapacity {
|
||||||
|
pub mut:
|
||||||
|
cpu_cores int
|
||||||
|
memory_gb int
|
||||||
|
storage_gb int
|
||||||
|
bandwidth_mbps int
|
||||||
|
ssd_storage_gb int
|
||||||
|
hdd_storage_gb int
|
||||||
|
}
|
||||||
|
|
||||||
|
// Enhanced Node structure for farmer dashboard with modern types
|
||||||
|
pub struct FarmNode {
|
||||||
|
pub mut:
|
||||||
|
id string
|
||||||
|
name string
|
||||||
|
location string
|
||||||
|
status NodeStatus
|
||||||
|
capacity NodeCapacity
|
||||||
|
used_capacity NodeCapacity
|
||||||
|
uptime_percentage f32
|
||||||
|
earnings_today_usd f64 // Using f64 for Decimal
|
||||||
|
last_seen u64 // Unix timestamp
|
||||||
|
health_score f32
|
||||||
|
region string
|
||||||
|
node_type string
|
||||||
|
slice_formats []string
|
||||||
|
rental_options NodeRentalOptions
|
||||||
|
availability_status NodeAvailabilityStatus
|
||||||
|
grid_node_id u32
|
||||||
|
grid_data GridNodeData
|
||||||
|
node_group_id string
|
||||||
|
group_assignment_date u64 // Unix timestamp
|
||||||
|
group_slice_format string
|
||||||
|
group_slice_price f64 // Using f64 for Decimal
|
||||||
|
staking_options NodeStakingOptions
|
||||||
|
marketplace_sla MarketplaceSLA
|
||||||
|
total_base_slices u32
|
||||||
|
allocated_base_slices u32
|
||||||
|
slice_allocations []SliceAllocation // Assuming SliceAllocation is defined elsewhere or will be translated
|
||||||
|
available_combinations []SliceCombination // Assuming SliceCombination is defined elsewhere or will be translated
|
||||||
|
slice_pricing SlicePricing // Assuming SlicePricing is defined elsewhere or will be translated
|
||||||
|
slice_last_calculated u64 // Unix timestamp
|
||||||
|
}
|
||||||
|
|
||||||
|
pub struct EarningsRecord {
|
||||||
|
pub mut:
|
||||||
|
date string
|
||||||
|
amount int
|
||||||
|
source string
|
||||||
|
}
|
||||||
|
|
||||||
|
pub enum NodeStatus {
|
||||||
|
online
|
||||||
|
offline
|
||||||
|
maintenance
|
||||||
|
error
|
||||||
|
standby
|
||||||
|
}
|
||||||
|
|
||||||
|
pub struct FarmerSettings {
|
||||||
|
pub mut:
|
||||||
|
auto_accept_deployments bool
|
||||||
|
maintenance_window string
|
||||||
|
notification_preferences NotificationSettings
|
||||||
|
minimum_deployment_duration int
|
||||||
|
preferred_regions []string
|
||||||
|
default_slice_customizations map[string]DefaultSliceFormat // Assuming DefaultSliceFormat is defined elsewhere or will be translated
|
||||||
|
}
|
||||||
|
|
||||||
|
pub struct NotificationSettings {
|
||||||
|
pub mut:
|
||||||
|
email_enabled bool
|
||||||
|
sms_enabled bool
|
||||||
|
push bool
|
||||||
|
node_offline_alerts bool
|
||||||
|
earnings_reports bool
|
||||||
|
maintenance_reminders bool
|
||||||
|
}
|
||||||
|
|
||||||
|
// Marketplace SLA configuration - what the farmer promises to customers
|
||||||
|
pub struct MarketplaceSLA {
|
||||||
|
pub mut:
|
||||||
|
uptime_guarantee_percentage f32
|
||||||
|
bandwidth_guarantee_mbps int
|
||||||
|
base_slice_price f64 // Using f64 for Decimal
|
||||||
|
last_updated u64 // Unix timestamp
|
||||||
|
}
|
||||||
|
|
||||||
|
// Node rental options that farmers can configure
|
||||||
|
pub struct NodeRentalOptions {
|
||||||
|
pub mut:
|
||||||
|
slice_rental_enabled bool
|
||||||
|
full_node_rental_enabled bool
|
||||||
|
full_node_pricing FullNodePricing
|
||||||
|
minimum_rental_days u32
|
||||||
|
maximum_rental_days u32
|
||||||
|
auto_renewal_enabled bool
|
||||||
|
}
|
||||||
|
|
||||||
|
// Node staking options that farmers can configure
|
||||||
|
pub struct NodeStakingOptions {
|
||||||
|
pub mut:
|
||||||
|
staking_enabled bool
|
||||||
|
staked_amount f64 // Using f64 for Decimal
|
||||||
|
staking_start_date u64 // Unix timestamp
|
||||||
|
staking_period_months u32
|
||||||
|
early_withdrawal_allowed bool
|
||||||
|
early_withdrawal_penalty_percent f32
|
||||||
|
}
|
||||||
|
|
||||||
|
// Full node rental pricing configuration with auto-calculation support
|
||||||
|
pub struct FullNodePricing {
|
||||||
|
pub mut:
|
||||||
|
hourly f64 // Using f64 for Decimal
|
||||||
|
daily f64 // Using f64 for Decimal
|
||||||
|
monthly f64 // Using f64 for Decimal
|
||||||
|
yearly f64 // Using f64 for Decimal
|
||||||
|
auto_calculate bool
|
||||||
|
daily_discount_percent f32
|
||||||
|
monthly_discount_percent f32
|
||||||
|
yearly_discount_percent f32
|
||||||
|
}
|
||||||
|
|
||||||
|
// Node availability status for rental management
|
||||||
|
pub enum NodeAvailabilityStatus {
|
||||||
|
available
|
||||||
|
partially_rented
|
||||||
|
fully_rented
|
||||||
|
unavailable
|
||||||
|
reserved
|
||||||
|
}
|
||||||
|
|
||||||
|
// Individual node rental record
|
||||||
|
pub struct NodeRental {
|
||||||
|
pub mut:
|
||||||
|
id string
|
||||||
|
node_id string
|
||||||
|
renter_email string
|
||||||
|
rental_type NodeRentalType
|
||||||
|
monthly_cost f64 // Using f64 for Decimal
|
||||||
|
start_date u64 // Unix timestamp
|
||||||
|
end_date u64 // Unix timestamp
|
||||||
|
status NodeRentalStatus
|
||||||
|
auto_renewal bool
|
||||||
|
payment_method string
|
||||||
|
metadata map[string]string // Using map[string]string for HashMap<String, serde_json::Value>
|
||||||
|
}
|
||||||
|
|
||||||
|
// Type of node rental
|
||||||
|
pub enum NodeRentalType {
|
||||||
|
slice // Slice { slice_ids: Vec<String>, total_cpu_cores: u32, total_memory_gb: u32, total_storage_gb: u32 }
|
||||||
|
full_node
|
||||||
|
}
|
||||||
|
|
||||||
|
// Status of a node rental
|
||||||
|
pub enum NodeRentalStatus {
|
||||||
|
active
|
||||||
|
pending
|
||||||
|
expired
|
||||||
|
cancelled
|
||||||
|
suspended
|
||||||
|
}
|
||||||
|
|
||||||
|
// Farmer earnings from node rentals
|
||||||
|
pub struct FarmerRentalEarning {
|
||||||
|
pub mut:
|
||||||
|
id string
|
||||||
|
node_id string
|
||||||
|
rental_id string
|
||||||
|
renter_email string
|
||||||
|
amount f64 // Using f64 for Decimal
|
||||||
|
currency string
|
||||||
|
earning_date u64 // Unix timestamp
|
||||||
|
rental_type NodeRentalType
|
||||||
|
payment_status PaymentStatus
|
||||||
|
}
|
||||||
|
|
||||||
|
pub enum PaymentStatus {
|
||||||
|
pending
|
||||||
|
completed
|
||||||
|
failed
|
||||||
|
refunded
|
||||||
|
}
|
||||||
|
|
||||||
|
// User Activity Tracking
|
||||||
|
pub struct UserActivity {
|
||||||
|
pub mut:
|
||||||
|
id string
|
||||||
|
activity_type ActivityType
|
||||||
|
description string
|
||||||
|
timestamp u64 // Unix timestamp
|
||||||
|
metadata map[string]string // Using map[string]string for HashMap<String, serde_json::Value>
|
||||||
|
category string
|
||||||
|
importance ActivityImportance
|
||||||
|
}
|
||||||
|
|
||||||
|
pub enum ActivityType {
|
||||||
|
login
|
||||||
|
purchase
|
||||||
|
deployment
|
||||||
|
service_created
|
||||||
|
app_published
|
||||||
|
node_added
|
||||||
|
node_updated
|
||||||
|
wallet_transaction
|
||||||
|
profile_update
|
||||||
|
settings_change
|
||||||
|
marketplace_view
|
||||||
|
slice_created
|
||||||
|
slice_allocated
|
||||||
|
slice_released
|
||||||
|
slice_rental_started
|
||||||
|
slice_rental_stopped
|
||||||
|
slice_rental_restarted
|
||||||
|
slice_rental_cancelled
|
||||||
|
}
|
||||||
|
|
||||||
|
pub enum ActivityImportance {
|
||||||
|
low
|
||||||
|
medium
|
||||||
|
high
|
||||||
|
critical
|
||||||
|
}
|
||||||
|
|
||||||
|
// Enhanced User Statistics
|
||||||
|
pub struct UsageStatistics {
|
||||||
|
pub mut:
|
||||||
|
total_deployments int
|
||||||
|
active_services int
|
||||||
|
total_spent f64 // Using f64 for Decimal
|
||||||
|
favorite_categories []string
|
||||||
|
usage_trends []UsageTrend
|
||||||
|
login_frequency f32
|
||||||
|
preferred_regions []string
|
||||||
|
account_age_days int
|
||||||
|
last_activity u64 // Unix timestamp
|
||||||
|
}
|
||||||
|
|
||||||
|
pub struct UsageTrend {
|
||||||
|
pub mut:
|
||||||
|
period string
|
||||||
|
metric string
|
||||||
|
value f32
|
||||||
|
change_percentage f32
|
||||||
|
}
|
||||||
|
|
||||||
|
pub struct UserPreferences {
|
||||||
|
pub mut:
|
||||||
|
preferred_currency string
|
||||||
|
preferred_language string
|
||||||
|
timezone string
|
||||||
|
dashboard_layout string
|
||||||
|
notification_settings NotificationSettings
|
||||||
|
privacy_settings PrivacySettings
|
||||||
|
theme string
|
||||||
|
last_payment_method string
|
||||||
|
}
|
||||||
|
|
||||||
|
pub struct PrivacySettings {
|
||||||
|
pub mut:
|
||||||
|
profile_visibility string
|
||||||
|
activity_tracking bool
|
||||||
|
marketing_emails bool
|
||||||
|
data_sharing bool
|
||||||
|
}
|
||||||
|
|
||||||
|
// ThreeFold Grid Node Data fetched from gridproxy/graphql
|
||||||
|
pub struct GridNodeData {
|
||||||
|
pub mut:
|
||||||
|
grid_node_id u32
|
||||||
|
city string
|
||||||
|
country string
|
||||||
|
farm_name string
|
||||||
|
farm_id u32
|
||||||
|
public_ips u32
|
||||||
|
total_resources NodeCapacity
|
||||||
|
used_resources NodeCapacity
|
||||||
|
certification_type string
|
||||||
|
farming_policy_id u32
|
||||||
|
last_updated u64 // Unix timestamp
|
||||||
|
}
|
||||||
|
|
||||||
|
// Node Group for managing multiple nodes together
|
||||||
|
pub struct NodeGroup {
|
||||||
|
core.Base
|
||||||
|
pub mut:
|
||||||
|
id string
|
||||||
|
name string
|
||||||
|
description string
|
||||||
|
group_type NodeGroupType
|
||||||
|
node_ids []string
|
||||||
|
group_config NodeGroupConfig
|
||||||
|
created_at u64 // Unix timestamp
|
||||||
|
updated_at u64 // Unix timestamp
|
||||||
|
}
|
||||||
|
|
||||||
|
// Type of node group - default or custom
|
||||||
|
pub enum NodeGroupType {
|
||||||
|
default_compute
|
||||||
|
default_storage
|
||||||
|
default_ai_gpu
|
||||||
|
custom
|
||||||
|
}
|
||||||
|
|
||||||
|
// Configuration for node groups
|
||||||
|
pub struct NodeGroupConfig {
|
||||||
|
pub mut:
|
||||||
|
preferred_slice_formats []string
|
||||||
|
default_pricing map[string]f64 // Using f64 for Decimal
|
||||||
|
resource_optimization ResourceOptimization
|
||||||
|
auto_scaling bool
|
||||||
|
}
|
||||||
|
|
||||||
|
// Resource optimization settings for groups
|
||||||
|
pub enum ResourceOptimization {
|
||||||
|
balanced
|
||||||
|
performance
|
||||||
|
efficiency
|
||||||
|
custom
|
||||||
|
}
|
||||||
|
|
||||||
|
// Statistics for a node group
|
||||||
|
pub struct GroupStatistics {
|
||||||
|
pub mut:
|
||||||
|
group_id string
|
||||||
|
total_nodes int
|
||||||
|
online_nodes int
|
||||||
|
total_capacity NodeCapacity
|
||||||
|
average_uptime f32
|
||||||
|
group_type NodeGroupType
|
||||||
|
}
|
||||||
|
|
||||||
|
// Enhanced User Dashboard Data
|
||||||
|
pub struct UserDashboardData {
|
||||||
|
pub mut:
|
||||||
|
user_info UserInfo
|
||||||
|
recent_activities []UserActivity
|
||||||
|
usage_statistics UsageStatistics
|
||||||
|
active_services []Service // Assuming Service is defined elsewhere or will be translated
|
||||||
|
active_deployments int
|
||||||
|
wallet_summary WalletSummary
|
||||||
|
recommendations []Recommendation
|
||||||
|
quick_actions []QuickAction
|
||||||
|
}
|
||||||
|
|
||||||
|
pub struct UserInfo {
|
||||||
|
pub mut:
|
||||||
|
name string
|
||||||
|
email string
|
||||||
|
member_since string
|
||||||
|
account_type string
|
||||||
|
verification_status string
|
||||||
|
}
|
||||||
|
|
||||||
|
pub struct WalletSummary {
|
||||||
|
pub mut:
|
||||||
|
balance f64 // Using f64 for Decimal
|
||||||
|
currency string
|
||||||
|
recent_transactions int
|
||||||
|
pending_transactions int
|
||||||
|
}
|
||||||
|
|
||||||
|
pub struct Recommendation {
|
||||||
|
pub mut:
|
||||||
|
id string
|
||||||
|
title string
|
||||||
|
description string
|
||||||
|
action_url string
|
||||||
|
priority string
|
||||||
|
category string
|
||||||
|
}
|
||||||
|
|
||||||
|
pub struct QuickAction {
|
||||||
|
pub mut:
|
||||||
|
id string
|
||||||
|
title string
|
||||||
|
description string
|
||||||
|
action_url string
|
||||||
|
icon string
|
||||||
|
enabled bool
|
||||||
|
}
|
||||||
|
|
||||||
|
// App Provider-specific data
|
||||||
|
pub struct AppProviderData {
|
||||||
|
pub mut:
|
||||||
|
published_apps int
|
||||||
|
total_deployments int
|
||||||
|
active_deployments int
|
||||||
|
monthly_revenue_usd int
|
||||||
|
total_revenue_usd int
|
||||||
|
apps []PublishedApp
|
||||||
|
deployment_stats []DeploymentStat
|
||||||
|
revenue_history []RevenueRecord
|
||||||
|
}
|
||||||
|
|
||||||
|
pub struct PublishedApp {
|
||||||
|
pub mut:
|
||||||
|
id string
|
||||||
|
name string
|
||||||
|
category string
|
||||||
|
version string
|
||||||
|
status string
|
||||||
|
deployments int
|
||||||
|
rating f32
|
||||||
|
monthly_revenue_usd int
|
||||||
|
last_updated string
|
||||||
|
auto_healing bool
|
||||||
|
}
|
||||||
|
|
||||||
|
pub struct DeploymentStat {
|
||||||
|
pub mut:
|
||||||
|
app_name string
|
||||||
|
region string
|
||||||
|
instances int
|
||||||
|
status string
|
||||||
|
resource_usage ResourceUtilization
|
||||||
|
customer_name string
|
||||||
|
deployed_date string
|
||||||
|
deployment_id string
|
||||||
|
auto_healing bool
|
||||||
|
}
|
||||||
|
|
||||||
|
pub struct RevenueRecord {
|
||||||
|
pub mut:
|
||||||
|
date string
|
||||||
|
amount int
|
||||||
|
app_name string
|
||||||
|
}
|
||||||
|
|
||||||
|
// Service Provider-specific data
|
||||||
|
pub struct ServiceProviderData {
|
||||||
|
pub mut:
|
||||||
|
active_services int
|
||||||
|
total_clients int
|
||||||
|
monthly_revenue_usd int
|
||||||
|
total_revenue_usd int
|
||||||
|
service_rating f32
|
||||||
|
services []Service
|
||||||
|
client_requests []ServiceRequest
|
||||||
|
revenue_history []RevenueRecord
|
||||||
|
}
|
||||||
|
|
||||||
|
pub struct Service {
|
||||||
|
pub mut:
|
||||||
|
id string
|
||||||
|
name string
|
||||||
|
category string
|
||||||
|
description string
|
||||||
|
price_per_hour_usd int
|
||||||
|
status string
|
||||||
|
clients int
|
||||||
|
rating f32
|
||||||
|
total_hours int
|
||||||
|
}
|
||||||
|
|
||||||
|
pub struct ServiceRequest {
|
||||||
|
pub mut:
|
||||||
|
id string
|
||||||
|
client_name string
|
||||||
|
service_name string
|
||||||
|
status string
|
||||||
|
requested_date string
|
||||||
|
estimated_hours int
|
||||||
|
budget int
|
||||||
|
priority string
|
||||||
|
progress int
|
||||||
|
completed_date string
|
||||||
|
client_email string
|
||||||
|
client_phone string
|
||||||
|
description string
|
||||||
|
created_date string
|
||||||
|
}
|
||||||
|
|
||||||
|
// Service booking record for customers who purchase services
|
||||||
|
pub struct ServiceBooking {
|
||||||
|
pub mut:
|
||||||
|
id string
|
||||||
|
service_id string
|
||||||
|
service_name string
|
||||||
|
provider_email string
|
||||||
|
customer_email string
|
||||||
|
budget int
|
||||||
|
estimated_hours int
|
||||||
|
status string
|
||||||
|
requested_date string
|
||||||
|
priority string
|
||||||
|
description string
|
||||||
|
booking_date string
|
||||||
|
client_phone string
|
||||||
|
progress int
|
||||||
|
completed_date string
|
||||||
|
}
|
||||||
|
|
||||||
|
// Customer Service-specific data (for users who book services)
|
||||||
|
pub struct CustomerServiceData {
|
||||||
|
pub mut:
|
||||||
|
active_bookings int
|
||||||
|
completed_bookings int
|
||||||
|
total_spent int
|
||||||
|
monthly_spending int
|
||||||
|
average_rating_given f32
|
||||||
|
service_bookings []ServiceBooking
|
||||||
|
favorite_providers []string
|
||||||
|
spending_history []SpendingRecord
|
||||||
|
}
|
||||||
|
|
||||||
|
pub struct SpendingRecord {
|
||||||
|
pub mut:
|
||||||
|
date string
|
||||||
|
amount int
|
||||||
|
service_name string
|
||||||
|
provider_name string
|
||||||
|
}
|
||||||
|
|
||||||
|
// Transaction record for wallet operations
|
||||||
|
pub struct Transaction {
|
||||||
|
pub mut:
|
||||||
|
id string
|
||||||
|
user_id string
|
||||||
|
transaction_type TransactionType
|
||||||
|
amount f64 // Using f64 for Decimal
|
||||||
|
timestamp u64 // Unix timestamp
|
||||||
|
status TransactionStatus
|
||||||
|
}
|
||||||
|
|
||||||
|
// Types of transactions
|
||||||
|
pub enum TransactionType {
|
||||||
|
purchase
|
||||||
|
rental
|
||||||
|
transfer
|
||||||
|
earning
|
||||||
|
instant_purchase
|
||||||
|
exchange
|
||||||
|
stake
|
||||||
|
unstake
|
||||||
|
auto_top_up
|
||||||
|
credits_purchase
|
||||||
|
credits_sale
|
||||||
|
credits_transfer
|
||||||
|
}
|
||||||
|
|
||||||
|
// Transaction status
|
||||||
|
pub enum TransactionStatus {
|
||||||
|
pending
|
||||||
|
completed
|
||||||
|
failed
|
||||||
|
cancelled
|
||||||
|
}
|
||||||
|
|
||||||
|
// Rental record
|
||||||
|
pub struct Rental {
|
||||||
|
pub mut:
|
||||||
|
id string
|
||||||
|
user_id string
|
||||||
|
product_id string
|
||||||
|
start_date u64 // Unix timestamp
|
||||||
|
end_date u64 // Unix timestamp
|
||||||
|
status RentalStatus
|
||||||
|
monthly_cost f64 // Using f64 for Decimal
|
||||||
|
}
|
||||||
|
|
||||||
|
// Rental status
|
||||||
|
pub enum RentalStatus {
|
||||||
|
active
|
||||||
|
expired
|
||||||
|
cancelled
|
||||||
|
pending
|
||||||
|
}
|
||||||
|
|
||||||
|
// User deployment information for dashboard
|
||||||
|
pub struct UserDeployment {
|
||||||
|
pub mut:
|
||||||
|
id string
|
||||||
|
app_name string
|
||||||
|
status DeploymentStatus
|
||||||
|
cost_per_month f64 // Using f64 for Decimal
|
||||||
|
deployed_at u64 // Unix timestamp
|
||||||
|
provider string
|
||||||
|
region string
|
||||||
|
resource_usage ResourceUtilization
|
||||||
|
}
|
||||||
|
|
||||||
|
// Deployment status enum
|
||||||
|
pub enum DeploymentStatus {
|
||||||
|
active
|
||||||
|
pending
|
||||||
|
stopped
|
||||||
|
error
|
||||||
|
maintenance
|
||||||
|
}
|
||||||
|
|
||||||
|
// Comprehensive user metrics for dashboard
|
||||||
|
pub struct UserMetrics {
|
||||||
|
pub mut:
|
||||||
|
total_spent_this_month f64 // Using f64 for Decimal
|
||||||
|
active_deployments_count int
|
||||||
|
resource_utilization ResourceUtilization
|
||||||
|
cost_trend []int
|
||||||
|
wallet_balance f64 // Using f64 for Decimal
|
||||||
|
total_transactions int
|
||||||
|
}
|
||||||
|
|
||||||
|
// User compute resource for dashboard display
|
||||||
|
pub struct UserComputeResource {
|
||||||
|
pub mut:
|
||||||
|
id string
|
||||||
|
resource_type string
|
||||||
|
specs string
|
||||||
|
location string
|
||||||
|
status string
|
||||||
|
sla string
|
||||||
|
monthly_cost f64 // Using f64 for Decimal
|
||||||
|
provider string
|
||||||
|
resource_usage ResourceUtilization
|
||||||
|
}
|
4
specs/models_marketplace/mod.v
Normal file
4
specs/models_marketplace/mod.v
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
module models_marketplace
|
||||||
|
|
||||||
|
import models_marketplace.core
|
||||||
|
import models_marketplace.main
|
Loading…
Reference in New Issue
Block a user