This commit is contained in:
2025-07-30 22:12:19 +02:00
parent bfe3110894
commit bfaa2446cd
51 changed files with 1008 additions and 793 deletions

9
.kilocode/mcp.json Normal file
View File

@@ -0,0 +1,9 @@
{
"chat.mcp.discovery.enabled": true,
"mcpServers": {
"VSCode": {
"type": "internal",
"tools": ["chat_send", "apply_edits", "read_file", "write_file", "get_file_tree"]
}
}
}

View File

View File

@@ -1,39 +0,0 @@
generate specs for /Users/despiegk/code/github/freeflowuniverse/herolib/lib/circles/actions
use mcp
get the output of it un actions/specs.v
then use these specs.v
to generate play command instructions see @3_heroscript_vlang.md
this play command gets heroscript in and will then call the methods for actions as are ONLY in @lib/circles/actions/db
so the play only calls the methods in @lib/circles/actions/db
# put the play commands in
/Users/despiegk/code/github/freeflowuniverse/herolib/lib/circles/actions/play
do one file in the module per action
each method is an action
put them all on one Struct called Player
in this Player we have a method per action
Player has a property called actor: which is the name of the actor as is used in the heroscript
Player has also a output called return format which is enum for heroscript or json
input of the method - action is a params object
on player there is a method play which takes the text as input or playbook
if text then playbook is created
then we walk over all actions
all the ones starting with actions in this case are given to the right method

View File

@@ -0,0 +1,224 @@
module hero_db
import json
import freeflowuniverse.herolib.clients.postgresql_client
import freeflowuniverse.herolib.core.texttools
import time
// Generic database interface for Hero root objects
pub struct HeroDB[T] {
db_client &postgresql_client.PostgresClient
table_name string
}
// Initialize a new HeroDB instance for a specific type
pub fn new[T](client &postgresql_client.PostgresClient) HeroDB[T] {
mut table_name := '${texttools.snake_case(T.name)}s'
// Map dirname from module path
module_path := T.name.split('.')
if module_path.len >= 2 {
dirname := texttools.snake_case(module_path[module_path.len - 2])
table_name = '${dirname}_${texttools.snake_case(T.name)}'
}
return HeroDB[T]{
db_client: client
table_name: table_name
}
}
// Ensure table exists with proper schema
pub fn (mut self HeroDB[T]) ensure_table() ! {
// Get index fields from struct reflection
index_fields := self.get_index_fields()
// Build index column definitions
mut index_cols := []string{}
for field in index_fields {
index_cols << '${field} varchar(255)'
}
// Create table with JSON storage
create_sql := '
CREATE TABLE IF NOT EXISTS ${self.table_name} (
id serial PRIMARY KEY,
${index_cols.join(', ')},
data jsonb NOT NULL,
created_at timestamp DEFAULT CURRENT_TIMESTAMP,
updated_at timestamp DEFAULT CURRENT_TIMESTAMP
)
'
self.db_client.exec(create_sql)!
// Create indexes on index fields
for field in index_fields {
index_sql := 'CREATE INDEX IF NOT EXISTS idx_${self.table_name}_${field} ON ${self.table_name}(${field})'
self.db_client.exec(index_sql)!
}
}
// Get index fields marked with @[index] from struct
fn (self HeroDB[T]) get_index_fields() []string {
mut fields := []string{}
$for field in T.fields {
$if field.attributes.len > 0 {
$for attr in field.attributes {
$if attr == 'index' {
fields << texttools.snake_case(field.name)
}
}
}
}
return fields
}
// Save object to database
pub fn (mut self HeroDB[T]) save(obj &T) ! {
// Get index values from object
index_data := self.extract_index_values(obj)
// Serialize to JSON
json_data := json.encode_pretty(obj)
// Check if object already exists
mut query := 'SELECT id FROM ${self.table_name} WHERE '
mut params := []string{}
// Build WHERE clause for unique lookup
for key, value in index_data {
params << '${key} = \'${value}\''
}
query += params.join(' AND ')
existing := self.db_client.exec(query)!
if existing.len > 0 {
// Update existing record
id := existing[0].vals[0].int()
update_sql := '
UPDATE ${self.table_name}
SET data = \$1, updated_at = CURRENT_TIMESTAMP
WHERE id = \$2
'
self.db_client.exec(update_sql.replace('\$1', "'${json_data}'").replace('\$2', id.str()))!
} else {
// Insert new record
mut columns := []string{}
mut values := []string{}
// Add index columns
for key, value in index_data {
columns << key
values << "'${value}'"
}
// Add JSON data
columns << 'data'
values << "'${json_data}'"
insert_sql := '
INSERT INTO ${self.table_name} (${columns.join(', ')})
VALUES (${values.join(', ')})
'
self.db_client.exec(insert_sql)!
}
}
// Get object by index values
pub fn (mut self HeroDB[T]) get_by_index(index_values map[string]string) !&T {
mut query := 'SELECT data FROM ${self.table_name} WHERE '
mut params := []string{}
for key, value in index_values {
params << '${key} = \'${value}\''
}
query += params.join(' AND ')
rows := self.db_client.exec(query)!
if rows.len == 0 {
return error('${T.name} not found with index values: ${index_values}')
}
json_data := rows[0].vals[0].str()
mut obj := json.decode(T, json_data) or {
return error('Failed to decode JSON: ${err}')
}
return &obj
}
// Get all objects
pub fn (mut self HeroDB[T]) get_all() ![]&T {
query := 'SELECT data FROM ${self.table_name} ORDER BY id DESC'
rows := self.db_client.exec(query)!
mut results := []&T{}
for row in rows {
json_data := row.vals[0].str()
obj := json.decode(T, json_data) or {
continue // Skip invalid JSON
}
results << &obj
}
return results
}
// Search by index field
pub fn (mut self HeroDB[T]) search_by_index(field_name string, value string) ![]&T {
query := 'SELECT data FROM ${self.table_name} WHERE ${field_name} = \'${value}\' ORDER BY id DESC'
rows := self.db_client.exec(query)!
mut results := []&T{}
for row in rows {
json_data := row.vals[0].str()
obj := json.decode(T, json_data) or {
continue
}
results << &obj
}
return results
}
// Delete by index values
pub fn (mut self HeroDB[T]) delete_by_index(index_values map[string]string) ! {
mut query := 'DELETE FROM ${self.table_name} WHERE '
mut params := []string{}
for key, value in index_values {
params << '${key} = \'${value}\''
}
query += params.join(' AND ')
self.db_client.exec(query)!
}
// Helper to extract index values from object
fn (self HeroDB[T]) extract_index_values(obj &T) map[string]string {
mut index_data := map[string]string{}
$for field in T.fields {
$if field.attributes.len > 0 {
$for attr in field.attributes {
$if attr == 'index' {
field_name := texttools.snake_case(field.name)
$if field.typ is string {
value := obj.$(field.name).str()
index_data[field_name] = value
} $else $if field.typ is u32 || field.typ is u64 {
value := obj.$(field.name).str()
index_data[field_name] = value
} $else {
// Convert other types to string
value := obj.$(field.name).str()
index_data[field_name] = value
}
}
}
}
}
return index_data
}

View File

@@ -0,0 +1,36 @@
```v
// Example usage:
// Initialize database client
mut db_client := postgresql_client.get(name: "default")!
// Create HeroDB for Circle type
mut circle_db := hero_db.new[circle.Circle](db_client)!
circle_db.ensure_table()!
// Create and save a circle
mut my_circle := circle.Circle{
name: "Tech Community"
description: "A community for tech enthusiasts"
domain: "tech.example.com"
config: circle.CircleConfig{
max_members: 1000
allow_guests: true
auto_approve: false
theme: "modern"
}
status: circle.CircleStatus.active
}
circle_db.save(&my_circle)!
// Retrieve the circle
retrieved_circle := circle_db.get_by_index({
"domain": "tech.example.com"
})!
// Search circles by status
active_circles := circle_db.search_by_index("status", "active")!
```

View File

@@ -4,35 +4,35 @@ import freeflowuniverse.herolib.hero.models.core
// Company represents a business entity with all necessary details
pub struct Company {
core.Base
core.Base
pub mut:
name string // Company legal name @[index: 'company_name_idx']
registration_number string // Official registration number @[index: 'company_reg_idx']
incorporation_date u64 // Unix timestamp
fiscal_year_end string // Format: MM-DD
email string
phone string
website string
address string
business_type BusinessType
industry string // Industry classification
description string // Company description
status CompanyStatus
name string // Company legal name @[index: 'company_name_idx']
registration_number string // Official registration number @[index: 'company_reg_idx']
incorporation_date u64 // Unix timestamp
fiscal_year_end string // Format: MM-DD
email string
phone string
website string
address string
business_type BusinessType
industry string // Industry classification
description string // Company description
status CompanyStatus
}
// CompanyStatus tracks the operational state of a company
pub enum CompanyStatus {
pending_payment
active
suspended
inactive
pending_payment
active
suspended
inactive
}
// BusinessType categorizes the company structure
pub enum BusinessType {
coop
single
twin
starter
global
}
coop
single
twin
starter
global
}

View File

@@ -4,25 +4,25 @@ import freeflowuniverse.herolib.hero.models.core
// Payment handles financial transactions for companies
pub struct Payment {
core.Base
core.Base
pub mut:
payment_intent_id string // Stripe payment intent ID @[index: 'payment_intent_idx']
company_id u32 // Associated company @[index: 'payment_company_idx']
payment_plan string // monthly/yearly/two_year
setup_fee f64
monthly_fee f64
total_amount f64
currency string // Default: usd
status PaymentStatus
stripe_customer_id string
completed_at u64 // Unix timestamp
payment_intent_id string // Stripe payment intent ID @[index: 'payment_intent_idx']
company_id u32 // Associated company @[index: 'payment_company_idx']
payment_plan string // monthly/yearly/two_year
setup_fee f64
monthly_fee f64
total_amount f64
currency string // Default: usd
status PaymentStatus
stripe_customer_id string
completed_at u64 // Unix timestamp
}
// PaymentStatus tracks the lifecycle of a payment
pub enum PaymentStatus {
pending
processing
completed
failed
refunded
}
pending
processing
completed
failed
refunded
}

View File

@@ -4,36 +4,36 @@ import freeflowuniverse.herolib.hero.models.core
// Product represents goods or services offered by a company
pub struct Product {
core.Base
core.Base
pub mut:
name string
description string
price f64
type_ ProductType
category string
status ProductStatus
max_amount u16
purchase_till u64 // Unix timestamp
active_till u64 // Unix timestamp
components []ProductComponent
name string
description string
price f64
type_ ProductType
category string
status ProductStatus
max_amount u16
purchase_till u64 // Unix timestamp
active_till u64 // Unix timestamp
components []ProductComponent
}
// ProductComponent represents sub-parts of a complex product
pub struct ProductComponent {
pub mut:
name string
description string
quantity u32
name string
description string
quantity u32
}
// ProductType differentiates between products and services
pub enum ProductType {
product
service
product
service
}
// ProductStatus indicates availability
pub enum ProductStatus {
available
unavailable
}
available
unavailable
}

View File

@@ -4,32 +4,32 @@ import freeflowuniverse.herolib.hero.models.core
// Sale represents a transaction linking buyers to products
pub struct Sale {
core.Base
core.Base
pub mut:
company_id u32
buyer_id u32
transaction_id u32
total_amount f64
status SaleStatus
sale_date u64 // Unix timestamp
items []SaleItem
notes string
company_id u32
buyer_id u32
transaction_id u32
total_amount f64
status SaleStatus
sale_date u64 // Unix timestamp
items []SaleItem
notes string
}
// SaleItem captures product details at time of sale
pub struct SaleItem {
pub mut:
product_id u32
name string // Product name snapshot
quantity i32
unit_price f64
subtotal f64
service_active_until u64 // Optional service expiry
product_id u32
name string // Product name snapshot
quantity i32
unit_price f64
subtotal f64
service_active_until u64 // Optional service expiry
}
// SaleStatus tracks transaction state
pub enum SaleStatus {
pending
completed
cancelled
}
pending
completed
cancelled
}

View File

@@ -4,19 +4,19 @@ import freeflowuniverse.herolib.hero.models.core
// Shareholder tracks company ownership details
pub struct Shareholder {
core.Base
core.Base
pub mut:
company_id u32
user_id u32
name string
shares f64
percentage f64
type_ ShareholderType
since u64 // Unix timestamp
company_id u32
user_id u32
name string
shares f64
percentage f64
type_ ShareholderType
since u64 // Unix timestamp
}
// ShareholderType distinguishes between individual and corporate owners
pub enum ShareholderType {
individual
corporate
}
individual
corporate
}

View File

@@ -4,12 +4,12 @@ import freeflowuniverse.herolib.hero.models.core
// Calendar represents a calendar with events and scheduling capabilities
pub struct Calendar {
core.Base
core.Base
pub mut:
name string @[index]
description string
color string // hex color code
timezone string
owner_id u32 @[index]
is_public bool
}
name string @[index]
description string
color string // hex color code
timezone string
owner_id u32 @[index]
is_public bool
}

View File

@@ -4,33 +4,33 @@ import freeflowuniverse.herolib.hero.models.core
// Contact represents a contact or address book entry
pub struct Contact {
core.Base
core.Base
pub mut:
name string @[index]
email string @[index]
phone string
address string
company string
job_title string
notes string
tags []string
birthday u64
is_favorite bool
name string @[index]
email string @[index]
phone string
address string
company string
job_title string
notes string
tags []string
birthday u64
is_favorite bool
}
// ContactGroup represents a group of contacts
pub struct ContactGroup {
core.Base
core.Base
pub mut:
name string @[index]
description string
color string
name string @[index]
description string
color string
}
// ContactGroupMembership links contacts to groups
pub struct ContactGroupMembership {
core.Base
core.Base
pub mut:
contact_id u32 @[index]
group_id u32 @[index]
}
contact_id u32 @[index]
group_id u32 @[index]
}

View File

@@ -4,50 +4,50 @@ import freeflowuniverse.herolib.hero.models.core
// EventStatus represents the current status of an event
pub enum EventStatus {
scheduled
ongoing
completed
cancelled
postponed
scheduled
ongoing
completed
cancelled
postponed
}
// EventType categorizes different types of events
pub enum EventType {
meeting
appointment
reminder
task
call
conference
meeting
appointment
reminder
task
call
conference
}
// Event represents a calendar event
pub struct Event {
core.Base
core.Base
pub mut:
calendar_id u32 @[index]
title string @[index]
description string
start_time u64 @[index]
end_time u64 @[index]
location string
status EventStatus
event_type EventType
priority u8 // 1-5 scale
is_all_day bool
recurrence_rule string // RFC 5545 recurrence rule
parent_event_id u32 // for recurring events
calendar_id u32 @[index]
title string @[index]
description string
start_time u64 @[index]
end_time u64 @[index]
location string
status EventStatus
event_type EventType
priority u8 // 1-5 scale
is_all_day bool
recurrence_rule string // RFC 5545 recurrence rule
parent_event_id u32 // for recurring events
}
// EventParticipant represents a participant in an event
pub struct EventParticipant {
core.Base
core.Base
pub mut:
event_id u32 @[index]
user_id u32 @[index]
email string @[index]
name string
role string // attendee, organizer, optional
status string // accepted, declined, tentative, pending
response_time u64
}
event_id u32 @[index]
user_id u32 @[index]
email string @[index]
name string
role string // attendee, organizer, optional
status string // accepted, declined, tentative, pending
response_time u64
}

View File

@@ -4,46 +4,46 @@ import freeflowuniverse.herolib.hero.models.core
// MessageStatus represents the delivery status of a message
pub enum MessageStatus {
draft
sent
delivered
read
failed
draft
sent
delivered
read
failed
}
// MessageType categorizes different types of messages
pub enum MessageType {
email
sms
notification
reminder
email
sms
notification
reminder
}
// Message represents a communication message
pub struct Message {
core.Base
core.Base
pub mut:
sender_id u32 @[index]
recipient_id u32 @[index]
subject string
body string
message_type MessageType
status MessageStatus
scheduled_at u64
sent_at u64
read_at u64
priority u8 // 1-5 scale
attachments []string // file paths or URLs
tags []string
sender_id u32 @[index]
recipient_id u32 @[index]
subject string
body string
message_type MessageType
status MessageStatus
scheduled_at u64
sent_at u64
read_at u64
priority u8 // 1-5 scale
attachments []string // file paths or URLs
tags []string
}
// Reminder represents a scheduled reminder
pub struct Reminder {
core.Base
core.Base
pub mut:
event_id u32 @[index]
message string
reminder_time u64 @[index]
is_sent bool
snooze_count u8
}
event_id u32 @[index]
message string
reminder_time u64 @[index]
is_sent bool
snooze_count u8
}

View File

@@ -4,28 +4,28 @@ import freeflowuniverse.herolib.hero.models.core
// Circle represents a circle entity with configuration and metadata
pub struct Circle {
core.Base
core.Base
pub mut:
name string // Human-readable name of the circle
description string // Detailed description of the circle's purpose
domain string // Primary domain name for the circle @[index]
config CircleConfig // Configuration settings for the circle
status CircleStatus // Current operational status
name string // Human-readable name of the circle
description string // Detailed description of the circle's purpose
domain string // Primary domain name for the circle @[index]
config CircleConfig // Configuration settings for the circle
status CircleStatus // Current operational status
}
// CircleConfig holds configuration settings for a circle
pub struct CircleConfig {
pub mut:
max_members u32 // Maximum number of members allowed
allow_guests bool // Whether to allow guest access
auto_approve bool // Whether new members are auto-approved
theme string // Visual theme identifier
max_members u32 // Maximum number of members allowed
allow_guests bool // Whether to allow guest access
auto_approve bool // Whether new members are auto-approved
theme string // Visual theme identifier
}
// CircleStatus represents the operational status of a circle
pub enum CircleStatus {
active
inactive
suspended
archived
}
active
inactive
suspended
archived
}

View File

@@ -4,30 +4,30 @@ import freeflowuniverse.herolib.hero.models.core
// Member represents a member within a circle
pub struct Member {
core.Base
core.Base
pub mut:
circle_id u32 // Reference to the circle this member belongs to @[index]
user_id u32 // Reference to the user entity @[index]
role MemberRole // Member's role within the circle
status MemberStatus // Current membership status
joined_at u64 // Unix timestamp when member joined
invited_by u32 // User ID of who invited this member
permissions []string // List of custom permissions
circle_id u32 // Reference to the circle this member belongs to @[index]
user_id u32 // Reference to the user entity @[index]
role MemberRole // Member's role within the circle
status MemberStatus // Current membership status
joined_at u64 // Unix timestamp when member joined
invited_by u32 // User ID of who invited this member
permissions []string // List of custom permissions
}
// MemberRole defines the possible roles a member can have
pub enum MemberRole {
owner
admin
moderator
member
guest
owner
admin
moderator
member
guest
}
// MemberStatus represents the current status of membership
pub enum MemberStatus {
active
pending
suspended
removed
}
active
pending
suspended
removed
}

View File

@@ -4,24 +4,24 @@ import freeflowuniverse.herolib.hero.models.core
// Name represents a domain name configuration for a circle
pub struct Name {
core.Base
core.Base
pub mut:
circle_id u32 // Reference to the circle this name belongs to @[index]
domain string // The actual domain name @[index]
subdomain string // Optional subdomain
record_type NameType // Type of DNS record
value string // DNS record value/target
priority u32 // Priority for MX records
ttl u32 // Time to live in seconds
is_active bool // Whether this record is currently active
circle_id u32 // Reference to the circle this name belongs to @[index]
domain string // The actual domain name @[index]
subdomain string // Optional subdomain
record_type NameType // Type of DNS record
value string // DNS record value/target
priority u32 // Priority for MX records
ttl u32 // Time to live in seconds
is_active bool // Whether this record is currently active
}
// NameType defines the supported DNS record types
pub enum NameType {
a
aaaa
cname
mx
txt
srv
}
a
aaaa
cname
mx
txt
srv
}

View File

@@ -4,30 +4,30 @@ import freeflowuniverse.herolib.hero.models.core
// Wallet represents a wallet associated with a circle for financial operations
pub struct Wallet {
core.Base
core.Base
pub mut:
circle_id u32 // Reference to the circle this wallet belongs to @[index]
address string // Blockchain address for this wallet @[index]
type WalletType // Type of wallet (custodial/non-custodial)
balance f64 // Current balance in the wallet
currency string // Currency type (e.g., "USD", "BTC", "ETH")
is_primary bool // Whether this is the primary wallet for the circle
status WalletStatus // Current wallet status
last_activity u64 // Unix timestamp of last transaction
circle_id u32 // Reference to the circle this wallet belongs to @[index]
address string // Blockchain address for this wallet @[index]
type WalletType // Type of wallet (custodial/non-custodial)
balance f64 // Current balance in the wallet
currency string // Currency type (e.g., "USD", "BTC", "ETH")
is_primary bool // Whether this is the primary wallet for the circle
status WalletStatus // Current wallet status
last_activity u64 // Unix timestamp of last transaction
}
// WalletType defines the types of wallets supported
pub enum WalletType {
custodial
non_custodial
hardware
software
custodial
non_custodial
hardware
software
}
// WalletStatus represents the operational status of a wallet
pub enum WalletStatus {
active
inactive
frozen
archived
}
active
inactive
frozen
archived
}

View File

@@ -3,10 +3,10 @@ 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
comments []Comment
}
id u32
created u64 // Unix timestamp of creation
updated u64 // Unix timestamp of last update
deleted bool
version u32
comments []Comment
}

View File

@@ -17,4 +17,4 @@ pub mut:
// Optional ID of the parent comment for threaded conversations
// None indicates this is a top-level comment
parent_comment_id u32
}
}

View File

@@ -5,23 +5,23 @@ import freeflowuniverse.herolib.hero.models.core
// Account represents a financial account for tracking balances and transactions
// Supports multiple account types (checking, savings, investment, etc.)
pub struct Account {
core.Base
core.Base
pub mut:
name string // User-friendly account name
account_type AccountType
balance f64 // Current balance in the account's currency
currency string // Currency code (USD, EUR, etc.)
description string // Optional description of the account
is_active bool // Whether the account is currently active
name string // User-friendly account name
account_type AccountType
balance f64 // Current balance in the account's currency
currency string // Currency code (USD, EUR, etc.)
description string // Optional description of the account
is_active bool // Whether the account is currently active
}
// AccountType defines the different types of financial accounts
pub enum AccountType {
checking
savings
investment
credit
loan
crypto
other
}
checking
savings
investment
credit
loan
crypto
other
}

View File

@@ -5,30 +5,30 @@ import freeflowuniverse.herolib.hero.models.core
// Asset represents any valuable resource owned by an entity
// Can be financial (stocks, bonds) or physical (real estate, commodities)
pub struct Asset {
core.Base
core.Base
pub mut:
name string // Asset name or identifier
symbol string // Trading symbol or identifier @[index]
asset_type AssetType
quantity f64 // Amount of the asset held
unit_price f64 // Price per unit in the asset's currency
total_value f64 // total_value = quantity * unit_price
currency string // Currency for pricing (USD, EUR, etc.)
category string // Asset category (stocks, bonds, crypto, etc.)
exchange string // Exchange where asset is traded
description string // Detailed description of the asset
is_active bool // Whether the asset is currently tracked
purchase_date u64 // Unix timestamp of purchase/acquisition
name string // Asset name or identifier
symbol string // Trading symbol or identifier @[index]
asset_type AssetType
quantity f64 // Amount of the asset held
unit_price f64 // Price per unit in the asset's currency
total_value f64 // total_value = quantity * unit_price
currency string // Currency for pricing (USD, EUR, etc.)
category string // Asset category (stocks, bonds, crypto, etc.)
exchange string // Exchange where asset is traded
description string // Detailed description of the asset
is_active bool // Whether the asset is currently tracked
purchase_date u64 // Unix timestamp of purchase/acquisition
}
// AssetType defines the classification of assets
pub enum AssetType {
stock
bond
crypto
commodity
real_estate
currency
nft
other
}
stock
bond
crypto
commodity
real_estate
currency
nft
other
}

View File

@@ -5,25 +5,25 @@ import freeflowuniverse.herolib.hero.models.core
// Marketplace represents a platform for buying and selling goods/services
// Can be internal or external marketplace configurations
pub struct Marketplace {
core.Base
core.Base
pub mut:
name string // Marketplace name (e.g., "Amazon", "eBay") @[index]
marketplace_type MarketplaceType
api_endpoint string // API endpoint for marketplace integration
api_key string // Authentication key for API access
currency string // Default currency for transactions
fee_percentage f64 // Marketplace fee as percentage (0.0-100.0)
is_active bool // Whether marketplace is currently enabled
description string // Detailed marketplace description
support_email string // Contact email for support issues
name string // Marketplace name (e.g., "Amazon", "eBay") @[index]
marketplace_type MarketplaceType
api_endpoint string // API endpoint for marketplace integration
api_key string // Authentication key for API access
currency string // Default currency for transactions
fee_percentage f64 // Marketplace fee as percentage (0.0-100.0)
is_active bool // Whether marketplace is currently enabled
description string // Detailed marketplace description
support_email string // Contact email for support issues
}
// MarketplaceType defines the type of marketplace platform
pub enum MarketplaceType {
centralized
decentralized
peer_to_peer
auction
classified
other
}
centralized
decentralized
peer_to_peer
auction
classified
other
}

View File

@@ -4,8 +4,7 @@ import freeflowuniverse.herolib.hero.models.core
// CommitteeMember represents a member of a committee
pub struct CommitteeMember {
pub struct CommitteeMember {
core.Base
core.Base
pub mut:
user_id u32
name string
@@ -18,8 +17,8 @@ pub mut:
pub struct Committee {
core.Base
pub mut:
company_id u32 @[index]
name string @[index]
description string
members []CommitteeMember
}
company_id u32 @[index]
name string @[index]
description string
members []CommitteeMember
}

View File

@@ -25,4 +25,4 @@ pub mut:
industry string
description string
status CompanyStatus
}
}

View File

@@ -16,15 +16,15 @@ pub mut:
pub struct Meeting {
core.Base
pub mut:
company_id u32 @[index]
title string @[index]
description string
company_id u32 @[index]
title string @[index]
description string
meeting_type MeetingType
status MeetingStatus
start_time u64 // Unix timestamp
end_time u64 // Unix timestamp
location string
agenda string
minutes string
attendees []Attendee
}
status MeetingStatus
start_time u64 // Unix timestamp
end_time u64 // Unix timestamp
location string
agenda string
minutes string
attendees []Attendee
}

View File

@@ -6,13 +6,13 @@ import freeflowuniverse.herolib.hero.models.core
pub struct Resolution {
core.Base
pub mut:
company_id u32 @[index]
title string @[index]
description string
company_id u32 @[index]
title string @[index]
description string
resolution_type ResolutionType
status ResolutionStatus
proposed_date u64 // Unix timestamp
effective_date ?u64 // Unix timestamp
expiry_date ?u64 // Unix timestamp
approvals []string
}
status ResolutionStatus
proposed_date u64 // Unix timestamp
effective_date ?u64 // Unix timestamp
expiry_date ?u64 // Unix timestamp
approvals []string
}

View File

@@ -6,10 +6,10 @@ import freeflowuniverse.herolib.hero.models.core
pub struct Shareholder {
core.Base
pub mut:
company_id u32 @[index]
company_id u32 @[index]
name string @[index]
shareholder_type ShareholderType
contact_info string @[index]
shares u32
percentage f64
}
}

View File

@@ -79,4 +79,4 @@ pub enum VoteOption {
no
abstain
custom
}
}

View File

@@ -9,4 +9,4 @@ pub mut:
name string @[index]
email string @[index]
role string
}
}

View File

@@ -16,12 +16,12 @@ pub mut:
pub struct Vote {
core.Base
pub mut:
company_id u32 @[index]
resolution_id u32 @[index]
title string @[index]
description string
status VoteStatus
start_date u64 // Unix timestamp
end_date u64 // Unix timestamp
ballots []Ballot
}
company_id u32 @[index]
resolution_id u32 @[index]
title string @[index]
description string
status VoteStatus
start_date u64 // Unix timestamp
end_date u64 // Unix timestamp
ballots []Ballot
}

View File

@@ -2,25 +2,24 @@ module governance
import freeflowuniverse.herolib.hero.models.core
pub struct GovernanceActivity {
core.Base
core.Base
pub mut:
company_id u32 // Reference to company @[index]
activity_type string // Type of activity (proposal, vote, meeting, etc.) @[index]
description string // Detailed description
initiator_id u32 // User who initiated @[index]
target_id u32 // Target entity ID
target_type string // Type of target (user, proposal, etc.)
metadata string // JSON metadata
company_id u32 // Reference to company @[index]
activity_type string // Type of activity (proposal, vote, meeting, etc.) @[index]
description string // Detailed description
initiator_id u32 // User who initiated @[index]
target_id u32 // Target entity ID
target_type string // Type of target (user, proposal, etc.)
metadata string // JSON metadata
}
// Activity types
pub enum ActivityType {
proposal_created
proposal_updated
vote_cast
meeting_scheduled
resolution_passed
shareholder_added
}
proposal_created
proposal_updated
vote_cast
meeting_scheduled
resolution_passed
shareholder_added
}

View File

@@ -4,14 +4,14 @@ import freeflowuniverse.herolib.hero.models.core
// AttachedFile represents files attached to governance entities
pub struct AttachedFile {
core.Base
core.Base
pub mut:
entity_id u32 // ID of entity this file is attached to @[index]
entity_type string // Type of entity (proposal, meeting, etc.) @[index]
filename string // Original filename
content_type string // MIME type
size u64 // File size in bytes
path string // Storage path
description string // Optional description
uploaded_by u32 // User who uploaded @[index]
}
entity_id u32 // ID of entity this file is attached to @[index]
entity_type string // Type of entity (proposal, meeting, etc.) @[index]
filename string // Original filename
content_type string // MIME type
size u64 // File size in bytes
path string // Storage path
description string // Optional description
uploaded_by u32 // User who uploaded @[index]
}

View File

@@ -4,36 +4,36 @@ import freeflowuniverse.herolib.hero.models.core
// CommitteeType defines committee categories
pub enum CommitteeType {
board
executive
audit
compensation
nomination
governance
finance
risk
other
board
executive
audit
compensation
nomination
governance
finance
risk
other
}
// CommitteeStatus tracks committee state
pub enum CommitteeStatus {
active
inactive
dissolved
active
inactive
dissolved
}
// Committee represents a governance committee
pub struct Committee {
core.Base
core.Base
pub mut:
company_id u32 // Reference to company @[index]
name string // Committee name @[index]
committee_type CommitteeType // Type of committee
description string // Detailed description
status CommitteeStatus // Current state
chairman_id u32 // Committee chair @[index]
term_start u64 // Start of term
term_end u64 // End of term
meeting_frequency string // e.g., "monthly", "quarterly"
quorum_size u32 // Minimum members for quorum
}
company_id u32 // Reference to company @[index]
name string // Committee name @[index]
committee_type CommitteeType // Type of committee
description string // Detailed description
status CommitteeStatus // Current state
chairman_id u32 // Committee chair @[index]
term_start u64 // Start of term
term_end u64 // End of term
meeting_frequency string // e.g., "monthly", "quarterly"
quorum_size u32 // Minimum members for quorum
}

View File

@@ -4,42 +4,42 @@ import freeflowuniverse.herolib.hero.models.core
// CompanyType categorizes companies
pub enum CompanyType {
corporation
llc
partnership
cooperative
nonprofit
corporation
llc
partnership
cooperative
nonprofit
}
// CompanyStatus tracks company state
pub enum CompanyStatus {
active
inactive
dissolved
merged
acquired
active
inactive
dissolved
merged
acquired
}
// Company represents a governance entity
pub struct Company {
core.Base
core.Base
pub mut:
name string // Company name @[index]
legal_name string // Legal entity name @[index]
company_type CompanyType // Type of company
status CompanyStatus // Current state
incorporation_date u64 // Unix timestamp
jurisdiction string // Country/state of incorporation
registration_number string // Government registration @[index]
tax_id string // Tax identification
address string // Primary address
headquarters string // City/country of HQ
website string // Company website
phone string // Contact phone
email string // Contact email
shares_authorized u64 // Total authorized shares
shares_issued u64 // Currently issued shares
par_value f64 // Par value per share
currency string // Currency code
fiscal_year_end string // "MM-DD" format
}
name string // Company name @[index]
legal_name string // Legal entity name @[index]
company_type CompanyType // Type of company
status CompanyStatus // Current state
incorporation_date u64 // Unix timestamp
jurisdiction string // Country/state of incorporation
registration_number string // Government registration @[index]
tax_id string // Tax identification
address string // Primary address
headquarters string // City/country of HQ
website string // Company website
phone string // Contact phone
email string // Contact email
shares_authorized u64 // Total authorized shares
shares_issued u64 // Currently issued shares
par_value f64 // Par value per share
currency string // Currency code
fiscal_year_end string // "MM-DD" format
}

View File

@@ -4,41 +4,41 @@ import freeflowuniverse.herolib.hero.models.core
// MeetingType defines meeting categories
pub enum MeetingType {
annual_general
extraordinary_general
board
committee
special
annual_general
extraordinary_general
board
committee
special
}
// MeetingStatus tracks meeting state
pub enum MeetingStatus {
scheduled
in_progress
completed
cancelled
postponed
scheduled
in_progress
completed
cancelled
postponed
}
// Meeting represents a governance meeting
pub struct Meeting {
core.Base
core.Base
pub mut:
company_id u32 // Reference to company @[index]
committee_id u32 // Reference to committee @[index]
meeting_type MeetingType // Type of meeting
title string // Meeting title @[index]
description string // Detailed description
status MeetingStatus // Current state
scheduled_start u64 // Scheduled start time
scheduled_end u64 // Scheduled end time
actual_start u64 // Actual start time
actual_end u64 // Actual end time
location string // Physical/virtual location
meeting_url string // Video conference link
agenda string // Meeting agenda
minutes string // Meeting minutes
quorum_required u32 // Members required for quorum
quorum_present bool // Whether quorum was achieved
created_by u32 // User who scheduled @[index]
}
company_id u32 // Reference to company @[index]
committee_id u32 // Reference to committee @[index]
meeting_type MeetingType // Type of meeting
title string // Meeting title @[index]
description string // Detailed description
status MeetingStatus // Current state
scheduled_start u64 // Scheduled start time
scheduled_end u64 // Scheduled end time
actual_start u64 // Actual start time
actual_end u64 // Actual end time
location string // Physical/virtual location
meeting_url string // Video conference link
agenda string // Meeting agenda
minutes string // Meeting minutes
quorum_required u32 // Members required for quorum
quorum_present bool // Whether quorum was achieved
created_by u32 // User who scheduled @[index]
}

View File

@@ -4,44 +4,44 @@ import freeflowuniverse.herolib.hero.models.core
// ProposalStatus tracks the state of a governance proposal
pub enum ProposalStatus {
draft
pending_review
active
voting
passed
rejected
implemented
cancelled
draft
pending_review
active
voting
passed
rejected
implemented
cancelled
}
// ProposalType categorizes proposals
pub enum ProposalType {
constitutional
policy
budget
election
merger
dissolution
other
constitutional
policy
budget
election
merger
dissolution
other
}
// Proposal represents a governance proposal
pub struct Proposal {
core.Base
core.Base
pub mut:
company_id u32 // Reference to company @[index]
title string // Proposal title @[index]
description string // Detailed description
proposal_type ProposalType // Category of proposal
status ProposalStatus // Current state
proposer_id u32 // User who created @[index]
target_committee_id u32 // Target committee @[index]
voting_start u64 // Start timestamp
voting_end u64 // End timestamp
quorum_required f64 // Percentage required
approval_threshold f64 // Percentage for approval
votes_for u32 // Votes in favor
votes_against u32 // Votes against
votes_abstain u32 // Abstention votes
implementation_notes string // Post-implementation notes
}
company_id u32 // Reference to company @[index]
title string // Proposal title @[index]
description string // Detailed description
proposal_type ProposalType // Category of proposal
status ProposalStatus // Current state
proposer_id u32 // User who created @[index]
target_committee_id u32 // Target committee @[index]
voting_start u64 // Start timestamp
voting_end u64 // End timestamp
quorum_required f64 // Percentage required
approval_threshold f64 // Percentage for approval
votes_for u32 // Votes in favor
votes_against u32 // Votes against
votes_abstain u32 // Abstention votes
implementation_notes string // Post-implementation notes
}

View File

@@ -4,37 +4,37 @@ import freeflowuniverse.herolib.hero.models.core
// ResolutionStatus tracks resolution state
pub enum ResolutionStatus {
proposed
voting
passed
failed
implemented
withdrawn
proposed
voting
passed
failed
implemented
withdrawn
}
// ResolutionType categorizes resolutions
pub enum ResolutionType {
ordinary
special
unanimous
ordinary
special
unanimous
}
// Resolution represents a formal resolution
pub struct Resolution {
core.Base
core.Base
pub mut:
company_id u32 // Reference to company @[index]
meeting_id u32 // Reference to meeting @[index]
proposal_id u32 // Reference to proposal @[index]
resolution_number string // Unique resolution number @[index]
title string // Resolution title @[index]
description string // Detailed description
resolution_type ResolutionType // Category
status ResolutionStatus // Current state
mover_id u32 // Person who moved @[index]
seconder_id u32 // Person who seconded @[index]
votes_for u32 // Votes in favor
votes_against u32 // Votes against
votes_abstain u32 // Abstention votes
effective_date u64 // When resolution takes effect
}
company_id u32 // Reference to company @[index]
meeting_id u32 // Reference to meeting @[index]
proposal_id u32 // Reference to proposal @[index]
resolution_number string // Unique resolution number @[index]
title string // Resolution title @[index]
description string // Detailed description
resolution_type ResolutionType // Category
status ResolutionStatus // Current state
mover_id u32 // Person who moved @[index]
seconder_id u32 // Person who seconded @[index]
votes_for u32 // Votes in favor
votes_against u32 // Votes against
votes_abstain u32 // Abstention votes
effective_date u64 // When resolution takes effect
}

View File

@@ -4,45 +4,45 @@ import freeflowuniverse.herolib.hero.models.core
// UserType defines user categories
pub enum UserType {
individual
corporate
system
individual
corporate
system
}
// UserStatus tracks user state
pub enum UserStatus {
active
inactive
suspended
pending
active
inactive
suspended
pending
}
// UserRole defines governance roles
pub enum UserRole {
shareholder
director
officer
employee
auditor
consultant
administrator
shareholder
director
officer
employee
auditor
consultant
administrator
}
// User represents a governance participant
pub struct User {
core.Base
core.Base
pub mut:
username string // Unique username @[index]
email string // Email address @[index]
first_name string // First name
last_name string // Last name
display_name string // Preferred display name
user_type UserType // Type of user
status UserStatus // Current state
roles []UserRole // Governance roles
company_id u32 // Primary company @[index]
phone string // Contact phone
address string // Contact address
profile_picture string // Profile picture URL
last_login u64 // Last login timestamp
}
username string // Unique username @[index]
email string // Email address @[index]
first_name string // First name
last_name string // Last name
display_name string // Preferred display name
user_type UserType // Type of user
status UserStatus // Current state
roles []UserRole // Governance roles
company_id u32 // Primary company @[index]
phone string // Contact phone
address string // Contact address
profile_picture string // Profile picture URL
last_login u64 // Last login timestamp
}

View File

@@ -4,31 +4,31 @@ import freeflowuniverse.herolib.hero.models.core
// VoteValue represents voting choices
pub enum VoteValue {
yes
no
abstain
yes
no
abstain
}
// VoteStatus tracks vote state
pub enum VoteStatus {
pending
cast
changed
retracted
pending
cast
changed
retracted
}
// Vote represents a governance vote
pub struct Vote {
core.Base
core.Base
pub mut:
proposal_id u32 // Reference to proposal @[index]
resolution_id u32 // Reference to resolution @[index]
voter_id u32 // User who voted @[index]
company_id u32 // Reference to company @[index]
vote_value VoteValue // Voting choice
status VoteStatus // Current state
weight u32 // Vote weight (for weighted voting)
comments string // Optional comments
proxy_voter_id u32 // If voting by proxy @[index]
ip_address string // IP address for verification
}
proposal_id u32 // Reference to proposal @[index]
resolution_id u32 // Reference to resolution @[index]
voter_id u32 // User who voted @[index]
company_id u32 // Reference to company @[index]
vote_value VoteValue // Voting choice
status VoteStatus // Current state
weight u32 // Vote weight (for weighted voting)
comments string // Optional comments
proxy_voter_id u32 // If voting by proxy @[index]
ip_address string // IP address for verification
}

View File

@@ -4,53 +4,52 @@ import freeflowuniverse.herolib.hero.models.core
// ContractStatus represents the current state of a legal contract
pub enum ContractStatus {
draft
pending
active
expired
terminated
cancelled
draft
pending
active
expired
terminated
cancelled
}
// ContractType categorizes the type of legal agreement
pub enum ContractType {
service
sales
lease
employment
partnership
nda
other
service
sales
lease
employment
partnership
nda
other
}
// Contract represents a legal agreement between parties
// This model stores essential information about contracts including parties, terms, and status
pub struct Contract {
core.Base
core.Base
pub mut:
title string // Human-readable title of the contract @[index]
contract_type ContractType // Type/category of the contract
status ContractStatus // Current status of the contract
party_a string // First party identifier (company, individual, etc.) @[index]
party_b string // Second party identifier @[index]
effective_date u64 // Unix timestamp when contract becomes effective
expiration_date u64 // Unix timestamp when contract expires
total_value f64 // Monetary value of the contract
currency string // Currency code (USD, EUR, etc.)
terms string // Full text of the contract terms
signature_date u64 // Unix timestamp when contract was signed
version string // Version identifier for contract revisions
parent_contract_id ?u32 // Optional reference to parent contract for amendments @[index]
attachment_urls []string // URLs or paths to attached documents
notes string // Additional notes and comments
}
title string // Human-readable title of the contract @[index]
contract_type ContractType // Type/category of the contract
status ContractStatus // Current status of the contract
party_a string // First party identifier (company, individual, etc.) @[index]
party_b string // Second party identifier @[index]
effective_date u64 // Unix timestamp when contract becomes effective
expiration_date u64 // Unix timestamp when contract expires
total_value f64 // Monetary value of the contract
currency string // Currency code (USD, EUR, etc.)
terms string // Full text of the contract terms
signature_date u64 // Unix timestamp when contract was signed
version string // Version identifier for contract revisions
parent_contract_id ?u32 // Optional reference to parent contract for amendments @[index]
attachment_urls []string // URLs or paths to attached documents
notes string // Additional notes and comments
}

View File

@@ -4,29 +4,27 @@ import freeflowuniverse.herolib.hero.models.core
// TocEntry represents a table of contents entry for a book
pub struct TocEntry {
// Title of the chapter/section
title string
// Page number (index in the pages array)
page u32
// Optional subsections
subsections []TocEntry
// Title of the chapter/section
title string
// Page number (index in the pages array)
page u32
// Optional subsections
subsections []TocEntry
}
// Book represents a Book library item (collection of markdown pages with TOC)
pub struct Book {
core.Base
// Title of the book
title string @[index]
// Optional description of the book
description ?string
// Table of contents
table_of_contents []TocEntry
// Pages content (markdown strings)
pages []string
}
core.Base // Title of the book
title string @[index]
// Optional description of the book
description ?string
// Table of contents
table_of_contents []TocEntry
// Pages content (markdown strings)
pages []string
}

View File

@@ -4,26 +4,24 @@ import freeflowuniverse.herolib.hero.models.core
// Collection represents a collection of library items
pub struct Collection {
core.Base
// Title of the collection
title string @[index]
// Optional description of the collection
description ?string
// List of image item IDs belonging to this collection
images []u32
// List of PDF item IDs belonging to this collection
pdfs []u32
// List of Markdown item IDs belonging to this collection
markdowns []u32
// List of Book item IDs belonging to this collection
books []u32
// List of Slides item IDs belonging to this collection
slides []u32
}
core.Base // Title of the collection
title string @[index]
// Optional description of the collection
description ?string
// List of image item IDs belonging to this collection
images []u32
// List of PDF item IDs belonging to this collection
pdfs []u32
// List of Markdown item IDs belonging to this collection
markdowns []u32
// List of Book item IDs belonging to this collection
books []u32
// List of Slides item IDs belonging to this collection
slides []u32
}

View File

@@ -4,20 +4,18 @@ import freeflowuniverse.herolib.hero.models.core
// Image represents an Image library item
pub struct Image {
core.Base
// Title of the image
title string @[index]
// Optional description of the image
description ?string
// URL of the image
url string
// Width of the image in pixels
width u32
// Height of the image in pixels
height u32
}
core.Base // Title of the image
title string @[index]
// Optional description of the image
description ?string
// URL of the image
url string
// Width of the image in pixels
width u32
// Height of the image in pixels
height u32
}

View File

@@ -4,14 +4,12 @@ import freeflowuniverse.herolib.hero.models.core
// Markdown represents a Markdown document library item
pub struct Markdown {
core.Base
// Title of the document
title string @[index]
// Optional description of the document
description ?string
// The markdown content
content string
}
core.Base // Title of the document
title string @[index]
// Optional description of the document
description ?string
// The markdown content
content string
}

View File

@@ -4,17 +4,15 @@ import freeflowuniverse.herolib.hero.models.core
// Pdf represents a PDF document library item
pub struct Pdf {
core.Base
// Title of the PDF
title string @[index]
// Optional description of the PDF
description ?string
// URL of the PDF file
url string
// Number of pages in the PDF
page_count u32
}
core.Base // Title of the PDF
title string @[index]
// Optional description of the PDF
description ?string
// URL of the PDF file
url string
// Number of pages in the PDF
page_count u32
}

View File

@@ -4,26 +4,24 @@ import freeflowuniverse.herolib.hero.models.core
// Slide represents a single slide in a slideshow
pub struct Slide {
// URL of the image for this slide
image_url string
// Optional title for the slide
title ?string
// Optional description for the slide
description ?string
// URL of the image for this slide
image_url string
// Optional title for the slide
title ?string
// Optional description for the slide
description ?string
}
// Slideshow represents a Slideshow library item (collection of images for slideshow)
pub struct Slideshow {
core.Base
// Title of the slideshow
title string @[index]
// Optional description of the slideshow
description ?string
// List of slides
slides []Slide
}
core.Base // Title of the slideshow
title string @[index]
// Optional description of the slideshow
description ?string
// List of slides
slides []Slide
}

View File

@@ -35,23 +35,23 @@ pub enum ItemType {
pub struct Project {
core.Base
pub mut:
name string @[index] // Project name
description string // Detailed project description
owner_id u64 @[index] // User ID of the project owner
member_ids []u64 @[index] // List of user IDs who are members
board_ids []u64 // List of associated board IDs
sprint_ids []u64 @[index] // List of sprint IDs in this project
epic_ids []u64 @[index] // List of epic IDs in this project
tags []string @[index] // Project tags for categorization
status Status @[index] // Current project status
priority Priority @[index] // Project priority level
item_type ItemType @[index] // Type of project item
name string @[index] // Project name
description string // Detailed project description
owner_id u64 @[index] // User ID of the project owner
member_ids []u64 @[index] // List of user IDs who are members
board_ids []u64 // List of associated board IDs
sprint_ids []u64 @[index] // List of sprint IDs in this project
epic_ids []u64 @[index] // List of epic IDs in this project
tags []string @[index] // Project tags for categorization
status Status @[index] // Current project status
priority Priority @[index] // Project priority level
item_type ItemType @[index] // Type of project item
}
// Label represents a tag with name and color for categorization
pub struct Label {
core.Base
pub mut:
name string @[index] // Label name
color string @[index] // Hex color code for the label
}
name string @[index] // Label name
color string @[index] // Hex color code for the label
}

View File

@@ -7,12 +7,12 @@ import freeflowuniverse.herolib.hero.models.core
pub struct Epic {
core.Base
pub mut:
name string @[index] // Epic name
description string // Detailed epic description
status Status @[index] // Current epic status
project_id u64 @[index] // Link to parent project
start_date u64 // Epic start timestamp (Unix)
due_date u64 // Epic due timestamp (Unix)
tags []string @[index] // Epic tags for categorization
child_task_ids []u64 @[index] // List of task IDs belonging to this epic
}
name string @[index] // Epic name
description string // Detailed epic description
status Status @[index] // Current epic status
project_id u64 @[index] // Link to parent project
start_date u64 // Epic start timestamp (Unix)
due_date u64 // Epic due timestamp (Unix)
tags []string @[index] // Epic tags for categorization
child_task_ids []u64 @[index] // List of task IDs belonging to this epic
}

View File

@@ -15,12 +15,12 @@ pub enum SprintStatus {
pub struct Sprint {
core.Base
pub mut:
name string @[index] // Sprint name
description string // Sprint description
name string @[index] // Sprint name
description string // Sprint description
status SprintStatus @[index] // Current sprint status
goal string // Sprint goal/objective
project_id u64 @[index] // Link to parent project
start_date u64 // Sprint start timestamp (Unix)
end_date u64 // Sprint end timestamp (Unix)
task_ids []u64 @[index] // List of task IDs in this sprint
}
goal string // Sprint goal/objective
project_id u64 @[index] // Link to parent project
start_date u64 // Sprint start timestamp (Unix)
end_date u64 // Sprint end timestamp (Unix)
task_ids []u64 @[index] // List of task IDs in this sprint
}

View File

@@ -25,18 +25,18 @@ pub enum TaskPriority {
pub struct Task {
core.Base
pub mut:
title string @[index] // Task title
description string // Task description
status TaskStatus @[index] // Current task status
priority TaskPriority @[index] // Task priority level
assignee_id u64 @[index] // User ID of task assignee
reporter_id u64 @[index] // User ID of task reporter
parent_task_id u64 // For subtasks - parent task ID
epic_id u64 @[index] // Link to parent epic
sprint_id u64 @[index] // Link to parent sprint
project_id u64 @[index] // Link to parent project
due_date u64 // Task due timestamp (Unix)
estimated_time_hours f32 // Estimated hours to complete
logged_time_hours f32 // Actual hours logged
tags []string @[index] // Task tags for categorization
}
title string @[index] // Task title
description string // Task description
status TaskStatus @[index] // Current task status
priority TaskPriority @[index] // Task priority level
assignee_id u64 @[index] // User ID of task assignee
reporter_id u64 @[index] // User ID of task reporter
parent_task_id u64 // For subtasks - parent task ID
epic_id u64 @[index] // Link to parent epic
sprint_id u64 @[index] // Link to parent sprint
project_id u64 @[index] // Link to parent project
due_date u64 // Task due timestamp (Unix)
estimated_time_hours f32 // Estimated hours to complete
logged_time_hours f32 // Actual hours logged
tags []string @[index] // Task tags for categorization
}