Merge branch 'main' of https://git.ourworld.tf/herocode/db
This commit is contained in:
commit
58ed59cd12
246
do.sql
Normal file
246
do.sql
Normal file
@ -0,0 +1,246 @@
|
|||||||
|
-- --------------------------------------------------------------
|
||||||
|
-- do.sql – create tables for HeroLedger models (PostgreSQL)
|
||||||
|
-- --------------------------------------------------------------
|
||||||
|
BEGIN;
|
||||||
|
|
||||||
|
-- 1. DNSZONE
|
||||||
|
CREATE TABLE dnszone (
|
||||||
|
id SERIAL PRIMARY KEY,
|
||||||
|
created BIGINT,
|
||||||
|
updated BIGINT,
|
||||||
|
deleted BOOLEAN,
|
||||||
|
version INTEGER,
|
||||||
|
domain TEXT, -- @[index]
|
||||||
|
administrators INTEGER[], -- array of user ids
|
||||||
|
status TEXT,
|
||||||
|
metadata JSONB,
|
||||||
|
soarecord JSONB, -- store array of SOARecord structs as JSONB
|
||||||
|
data JSONB NOT NULL
|
||||||
|
);
|
||||||
|
CREATE INDEX idx_dnszone_domain ON dnszone(domain);
|
||||||
|
|
||||||
|
-- 2. DNSRECORD
|
||||||
|
CREATE TABLE dnsrecord (
|
||||||
|
id SERIAL PRIMARY KEY,
|
||||||
|
created BIGINT,
|
||||||
|
updated BIGINT,
|
||||||
|
deleted BOOLEAN,
|
||||||
|
version INTEGER,
|
||||||
|
subdomain TEXT,
|
||||||
|
record_type TEXT,
|
||||||
|
value TEXT,
|
||||||
|
priority INTEGER,
|
||||||
|
ttl INTEGER,
|
||||||
|
is_active BOOLEAN,
|
||||||
|
cat TEXT,
|
||||||
|
is_wildcard BOOLEAN,
|
||||||
|
data JSONB NOT NULL
|
||||||
|
);
|
||||||
|
-- No explicit index required – rarely queried alone
|
||||||
|
|
||||||
|
-- 3. GROUP
|
||||||
|
CREATE TABLE "group" (
|
||||||
|
id SERIAL PRIMARY KEY,
|
||||||
|
created BIGINT,
|
||||||
|
updated BIGINT,
|
||||||
|
deleted BOOLEAN,
|
||||||
|
version INTEGER,
|
||||||
|
name TEXT NOT NULL,
|
||||||
|
description TEXT,
|
||||||
|
dnsrecords INTEGER[], -- FK → dnsrecord.id (array)
|
||||||
|
administrators INTEGER[],
|
||||||
|
config JSONB, -- embedded GroupConfig struct
|
||||||
|
status TEXT,
|
||||||
|
visibility TEXT,
|
||||||
|
created_ts BIGINT,
|
||||||
|
updated_ts BIGINT,
|
||||||
|
data JSONB NOT NULL
|
||||||
|
);
|
||||||
|
CREATE UNIQUE INDEX idx_group_name ON "group"(name);
|
||||||
|
|
||||||
|
-- 4. USER_GROUP_MEMBERSHIP
|
||||||
|
CREATE TABLE user_group_membership (
|
||||||
|
id SERIAL PRIMARY KEY,
|
||||||
|
created BIGINT,
|
||||||
|
updated BIGINT,
|
||||||
|
deleted BOOLEAN,
|
||||||
|
version INTEGER,
|
||||||
|
user_id INTEGER NOT NULL,
|
||||||
|
group_ids INTEGER[], -- array of group ids
|
||||||
|
data JSONB NOT NULL
|
||||||
|
);
|
||||||
|
CREATE INDEX idx_ugm_user_id ON user_group_membership(user_id);
|
||||||
|
CREATE INDEX idx_ugm_group_ids ON user_group_membership USING GIN (group_ids);
|
||||||
|
|
||||||
|
-- 5. MEMBER (circle/member.v)
|
||||||
|
CREATE TABLE member (
|
||||||
|
id SERIAL PRIMARY KEY,
|
||||||
|
created BIGINT,
|
||||||
|
updated BIGINT,
|
||||||
|
deleted BOOLEAN,
|
||||||
|
version INTEGER,
|
||||||
|
user_id INTEGER NOT NULL,
|
||||||
|
role TEXT,
|
||||||
|
status TEXT,
|
||||||
|
joined_at BIGINT,
|
||||||
|
invited_by INTEGER,
|
||||||
|
permissions TEXT[],
|
||||||
|
data JSONB NOT NULL
|
||||||
|
);
|
||||||
|
CREATE INDEX idx_member_user_id ON member(user_id);
|
||||||
|
|
||||||
|
-- 6. ACCOUNT
|
||||||
|
CREATE TABLE account (
|
||||||
|
id SERIAL PRIMARY KEY,
|
||||||
|
created BIGINT,
|
||||||
|
updated BIGINT,
|
||||||
|
deleted BOOLEAN,
|
||||||
|
version INTEGER,
|
||||||
|
owner_id INTEGER,
|
||||||
|
address TEXT NOT NULL,
|
||||||
|
balance DOUBLE PRECISION,
|
||||||
|
currency TEXT,
|
||||||
|
assetid INTEGER,
|
||||||
|
last_activity BIGINT,
|
||||||
|
administrators INTEGER[],
|
||||||
|
accountpolicy INTEGER,
|
||||||
|
data JSONB NOT NULL
|
||||||
|
);
|
||||||
|
CREATE UNIQUE INDEX idx_account_address ON account(address);
|
||||||
|
CREATE INDEX idx_account_assetid ON account(assetid);
|
||||||
|
|
||||||
|
-- 7. ASSET
|
||||||
|
CREATE TABLE asset (
|
||||||
|
id SERIAL PRIMARY KEY,
|
||||||
|
created BIGINT,
|
||||||
|
updated BIGINT,
|
||||||
|
deleted BOOLEAN,
|
||||||
|
version INTEGER,
|
||||||
|
address TEXT NOT NULL,
|
||||||
|
assetid INTEGER NOT NULL,
|
||||||
|
asset_type TEXT,
|
||||||
|
issuer INTEGER,
|
||||||
|
supply DOUBLE PRECISION,
|
||||||
|
decimals SMALLINT,
|
||||||
|
is_frozen BOOLEAN,
|
||||||
|
metadata JSONB,
|
||||||
|
administrators INTEGER[],
|
||||||
|
min_signatures INTEGER,
|
||||||
|
data JSONB NOT NULL
|
||||||
|
);
|
||||||
|
CREATE UNIQUE INDEX idx_asset_address ON asset(address);
|
||||||
|
CREATE UNIQUE INDEX idx_asset_assetid ON asset(assetid);
|
||||||
|
CREATE INDEX idx_asset_issuer ON asset(issuer);
|
||||||
|
|
||||||
|
-- 8. ACCOUNT_POLICY (holds three AccountPolicyItem JSONB blobs)
|
||||||
|
CREATE TABLE account_policy (
|
||||||
|
id SERIAL PRIMARY KEY,
|
||||||
|
created BIGINT,
|
||||||
|
updated BIGINT,
|
||||||
|
deleted BOOLEAN,
|
||||||
|
version INTEGER,
|
||||||
|
transferpolicy JSONB,
|
||||||
|
adminpolicy JSONB,
|
||||||
|
clawbackpolicy JSONB,
|
||||||
|
freezepolicy JSONB,
|
||||||
|
data JSONB NOT NULL
|
||||||
|
);
|
||||||
|
|
||||||
|
-- 9. ACCOUNT_POLICY_ITEM (stand‑alone if you ever need a table)
|
||||||
|
-- (optional – we store it as JSONB inside account_policy, so not created)
|
||||||
|
|
||||||
|
-- 10. TRANSACTION
|
||||||
|
CREATE TABLE transaction (
|
||||||
|
id SERIAL PRIMARY KEY,
|
||||||
|
created BIGINT,
|
||||||
|
updated BIGINT,
|
||||||
|
deleted BOOLEAN,
|
||||||
|
version INTEGER,
|
||||||
|
txid INTEGER NOT NULL,
|
||||||
|
source INTEGER,
|
||||||
|
destination INTEGER,
|
||||||
|
assetid INTEGER,
|
||||||
|
amount DOUBLE PRECISION,
|
||||||
|
timestamp BIGINT,
|
||||||
|
status TEXT,
|
||||||
|
memo TEXT,
|
||||||
|
tx_type TEXT,
|
||||||
|
signatures JSONB, -- array of Signature JSON objects
|
||||||
|
data JSONB NOT NULL
|
||||||
|
);
|
||||||
|
CREATE UNIQUE INDEX idx_transaction_txid ON transaction(txid);
|
||||||
|
CREATE INDEX idx_transaction_source ON transaction(source);
|
||||||
|
CREATE INDEX idx_transaction_destination ON transaction(destination);
|
||||||
|
CREATE INDEX idx_transaction_assetid ON transaction(assetid);
|
||||||
|
|
||||||
|
-- 11. SIGNATURE
|
||||||
|
CREATE TABLE signature (
|
||||||
|
id SERIAL PRIMARY KEY,
|
||||||
|
created BIGINT,
|
||||||
|
updated BIGINT,
|
||||||
|
deleted BOOLEAN,
|
||||||
|
version INTEGER,
|
||||||
|
signature_id INTEGER NOT NULL,
|
||||||
|
user_id INTEGER NOT NULL,
|
||||||
|
value TEXT,
|
||||||
|
objectid INTEGER,
|
||||||
|
objecttype TEXT,
|
||||||
|
status TEXT,
|
||||||
|
timestamp BIGINT,
|
||||||
|
data JSONB NOT NULL
|
||||||
|
);
|
||||||
|
CREATE INDEX idx_signature_signature_id ON signature(signature_id);
|
||||||
|
CREATE INDEX idx_signature_user_id ON signature(user_id);
|
||||||
|
CREATE INDEX idx_signature_objectid ON signature(objectid);
|
||||||
|
|
||||||
|
-- 12. USER_KVS
|
||||||
|
CREATE TABLE user_kvs (
|
||||||
|
id SERIAL PRIMARY KEY,
|
||||||
|
created BIGINT,
|
||||||
|
updated BIGINT,
|
||||||
|
deleted BOOLEAN,
|
||||||
|
version INTEGER,
|
||||||
|
userid INTEGER NOT NULL,
|
||||||
|
name TEXT,
|
||||||
|
data JSONB NOT NULL
|
||||||
|
);
|
||||||
|
CREATE INDEX idx_userkvs_userid ON user_kvs(userid);
|
||||||
|
|
||||||
|
-- 13. USER_KVS_ITEM
|
||||||
|
CREATE TABLE user_kvs_item (
|
||||||
|
id SERIAL PRIMARY KEY,
|
||||||
|
created BIGINT,
|
||||||
|
updated BIGINT,
|
||||||
|
deleted BOOLEAN,
|
||||||
|
version INTEGER,
|
||||||
|
userkvs_id INTEGER NOT NULL,
|
||||||
|
key TEXT NOT NULL,
|
||||||
|
value TEXT,
|
||||||
|
secretbox JSONB,
|
||||||
|
timestamp BIGINT,
|
||||||
|
data JSONB NOT NULL
|
||||||
|
);
|
||||||
|
CREATE INDEX idx_userkvs_item_userkvs_id ON user_kvs_item(userkvs_id);
|
||||||
|
CREATE INDEX idx_userkvs_item_key ON user_kvs_item(key);
|
||||||
|
|
||||||
|
-- 14. USER
|
||||||
|
CREATE TABLE "user" (
|
||||||
|
id SERIAL PRIMARY KEY,
|
||||||
|
created BIGINT,
|
||||||
|
updated BIGINT,
|
||||||
|
deleted BOOLEAN,
|
||||||
|
version INTEGER,
|
||||||
|
username TEXT NOT NULL,
|
||||||
|
pubkey TEXT NOT NULL,
|
||||||
|
email TEXT[] NOT NULL,
|
||||||
|
status TEXT,
|
||||||
|
userprofile JSONB,
|
||||||
|
kyc JSONB,
|
||||||
|
data JSONB NOT NULL
|
||||||
|
);
|
||||||
|
CREATE UNIQUE INDEX idx_user_username ON "user"(username);
|
||||||
|
CREATE UNIQUE INDEX idx_user_pubkey ON "user"(pubkey);
|
||||||
|
-- Email array index – use GIN for fast containment queries
|
||||||
|
CREATE INDEX idx_user_email ON "user" USING GIN (email);
|
||||||
|
|
||||||
|
COMMIT;
|
@ -10,7 +10,7 @@ pub mut:
|
|||||||
address string // Blockchain address for this wallet @[index]
|
address string // Blockchain address for this wallet @[index]
|
||||||
balance f64 // Current balance in the wallet
|
balance f64 // Current balance in the wallet
|
||||||
currency string // Currency type (e.g., "USD", "BTC", "ETH")
|
currency string // Currency type (e.g., "USD", "BTC", "ETH")
|
||||||
assetid u32
|
assetid u32 @[index]
|
||||||
last_activity u64 // Unix timestamp of last transaction
|
last_activity u64 // Unix timestamp of last transaction
|
||||||
administrators []u32 // List of user IDs who are super admins, they have all rights, without any treashold
|
administrators []u32 // List of user IDs who are super admins, they have all rights, without any treashold
|
||||||
accountpolicy u32 // Policy for signing transactions, 0 means none
|
accountpolicy u32 // Policy for signing transactions, 0 means none
|
||||||
@ -21,9 +21,9 @@ pub struct Asset {
|
|||||||
core.Base
|
core.Base
|
||||||
pub mut:
|
pub mut:
|
||||||
address string // Blockchain address for this asset @[index]
|
address string // Blockchain address for this asset @[index]
|
||||||
assetid u32 // Unique identifier for the asset (e.g., "USD", "BTC", "ETH")
|
assetid u32 @[index] // Unique identifier for the asset (e.g., "USD", "BTC", "ETH")
|
||||||
asset_type string // "fiat", "crypto", "stablecoin", etc.
|
asset_type string // "fiat", "crypto", "stablecoin", etc.
|
||||||
issuer u32 // Issuer account
|
issuer u32 @[index] // Issuer account
|
||||||
supply f64 // Total circulating supply
|
supply f64 // Total circulating supply
|
||||||
decimals u8 // Decimal precision (e.g., 2 for cents)
|
decimals u8 // Decimal precision (e.g., 2 for cents)
|
||||||
is_frozen bool // Whether the asset is frozen globally
|
is_frozen bool // Whether the asset is frozen globally
|
||||||
@ -50,7 +50,7 @@ pub mut:
|
|||||||
min_signatures u32 // Minimum number of signatures required for a transaction
|
min_signatures u32 // Minimum number of signatures required for a transaction
|
||||||
enabled bool // Whether clawback is enabled for this account
|
enabled bool // Whether clawback is enabled for this account
|
||||||
threshold f64 // Threshold amount for triggering clawback
|
threshold f64 // Threshold amount for triggering clawback
|
||||||
recipient u32 // Account ID of the recipient for clawback funds
|
recipient u32 @[index] // Account ID of the recipient for clawback funds
|
||||||
}
|
}
|
||||||
|
|
||||||
pub enum AccountStatus {
|
pub enum AccountStatus {
|
||||||
@ -65,10 +65,10 @@ pub enum AccountStatus {
|
|||||||
pub struct Transaction {
|
pub struct Transaction {
|
||||||
core.Base
|
core.Base
|
||||||
pub mut:
|
pub mut:
|
||||||
txid u32 // Unique identifier for the transaction
|
txid u32 @[index] // Unique identifier for the transaction
|
||||||
source u32
|
source u32 @[index]
|
||||||
destination u32
|
destination u32 @[index]
|
||||||
assetid u32
|
assetid u32 @[index]
|
||||||
amount f64
|
amount f64
|
||||||
timestamp u64
|
timestamp u64
|
||||||
status string // pending, confirmed, failed
|
status string // pending, confirmed, failed
|
||||||
|
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
|
7
specs/models_threefold/aiinstruct.md
Normal file
7
specs/models_threefold/aiinstruct.md
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
make SQL script to populate DB
|
||||||
|
|
||||||
|
only models with base class are put in tables
|
||||||
|
|
||||||
|
the data itself is in data field
|
||||||
|
|
||||||
|
the fields marked with @index go as separate fields in tables
|
1
specs/models_threefold/core
Symbolic link
1
specs/models_threefold/core
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
../models_heroledger/core
|
31
specs/models_threefold/main/secretbox.v
Normal file
31
specs/models_threefold/main/secretbox.v
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
module main
|
||||||
|
|
||||||
|
pub struct SecretBox {
|
||||||
|
pub mut:
|
||||||
|
notary_id u32 // person who is allowed to decrypt this info
|
||||||
|
value string //the actual incrypted value
|
||||||
|
version u16 //version of the schema used to encrypt this value
|
||||||
|
timestamp u64
|
||||||
|
cat SecretBoxCategory //category of the secret box, e.g. profile
|
||||||
|
}
|
||||||
|
|
||||||
|
pub enum SecretBoxCategory {
|
||||||
|
profile
|
||||||
|
}
|
||||||
|
|
||||||
|
pub struct Notary {
|
||||||
|
core.Base
|
||||||
|
pub mut:
|
||||||
|
userid u32 // Reference to the user entity @[index]
|
||||||
|
status NotaryStatus // Current user status
|
||||||
|
myceliumaddress string // Mycelium address of the notary
|
||||||
|
pubkey string // Public key for cryptographic operations @[index]
|
||||||
|
}
|
||||||
|
|
||||||
|
pub enum NotaryStatus {
|
||||||
|
active
|
||||||
|
inactive
|
||||||
|
suspended
|
||||||
|
archived
|
||||||
|
error
|
||||||
|
}
|
32
specs/models_threefold/main/signature.v
Normal file
32
specs/models_threefold/main/signature.v
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
module circle
|
||||||
|
|
||||||
|
import freeflowuniverse.herolib.hero.models.core
|
||||||
|
|
||||||
|
// Wallet represents a wallet associated with a circle for financial operations
|
||||||
|
pub struct Signature {
|
||||||
|
core.Base
|
||||||
|
pub mut:
|
||||||
|
signature_id u32 // Reference to the user who created the signature @[index]
|
||||||
|
user_id u32 // Reference to the user who created the signature @[index]
|
||||||
|
value string // The actual signature value
|
||||||
|
objectid u32 // Reference to the user who created the signature @[index]
|
||||||
|
objecttype ObjectType // Type of object being signed (e.g.,
|
||||||
|
status SignatureStatus
|
||||||
|
timestamp u64
|
||||||
|
}
|
||||||
|
|
||||||
|
pub enum SignatureStatus {
|
||||||
|
active
|
||||||
|
inactive
|
||||||
|
pending
|
||||||
|
revoked
|
||||||
|
}
|
||||||
|
|
||||||
|
pub enum ObjectType {
|
||||||
|
account
|
||||||
|
dnsrecord
|
||||||
|
membership
|
||||||
|
user
|
||||||
|
transaction
|
||||||
|
kyc
|
||||||
|
}
|
29
specs/models_threefold/main/user.v
Normal file
29
specs/models_threefold/main/user.v
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
module circle
|
||||||
|
|
||||||
|
import freeflowuniverse.herolib.hero.models.core
|
||||||
|
|
||||||
|
//is a user in the system, most of info is in models_heroledger
|
||||||
|
|
||||||
|
|
||||||
|
pub struct User {
|
||||||
|
core.Base
|
||||||
|
pub mut:
|
||||||
|
username string // Unique username for the user @[index]
|
||||||
|
pubkey string // Public key for cryptographic operations @[index]
|
||||||
|
status UserStatus // Current user status
|
||||||
|
kyc KYCStatus // Know Your Customer status
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
pub enum UserStatus {
|
||||||
|
active
|
||||||
|
inactive
|
||||||
|
suspended
|
||||||
|
archived
|
||||||
|
}
|
||||||
|
|
||||||
|
pub enum KYCStatus {
|
||||||
|
pending
|
||||||
|
approved
|
||||||
|
rejected
|
||||||
|
}
|
22
specs/models_threefold/main/user_kvs.v
Normal file
22
specs/models_threefold/main/user_kvs.v
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
module circle
|
||||||
|
|
||||||
|
import freeflowuniverse.herolib.hero.models.core
|
||||||
|
|
||||||
|
//a per user db
|
||||||
|
pub struct UserKVS {
|
||||||
|
core.Base
|
||||||
|
pub mut:
|
||||||
|
userid u32 // Reference to the user entity @[index]
|
||||||
|
name string // Name of the key-value store
|
||||||
|
}
|
||||||
|
|
||||||
|
pub struct UserKVSItem {
|
||||||
|
core.Base
|
||||||
|
pub mut:
|
||||||
|
userkvs_id u32 // Reference to the user entity @[index]
|
||||||
|
key string
|
||||||
|
value string // Value associated with the key
|
||||||
|
secretbox []SecretBox // Optional secret boxes for sensitive data
|
||||||
|
timestamp u64 // Timestamp when the item was created or last updated
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user