remove rhai dsls
This commit is contained in:
		@@ -1,275 +0,0 @@
 | 
			
		||||
// Hero Models - Biz Rhai Example
 | 
			
		||||
 | 
			
		||||
print("Hero Models - Biz Rhai Example");
 | 
			
		||||
print("===============================");
 | 
			
		||||
print("DB instance will be implicitly passed to DB functions.");
 | 
			
		||||
 | 
			
		||||
// --- Enum Constants ---
 | 
			
		||||
print("\n--- Enum Constants ---");
 | 
			
		||||
print(`CompanyStatus Active: ${CompanyStatusConstants::Active}`);
 | 
			
		||||
print(`CompanyStatus Inactive: ${CompanyStatusConstants::Inactive}`);
 | 
			
		||||
print(`BusinessType Coop: ${BusinessTypeConstants::Coop}`);
 | 
			
		||||
print(`BusinessType Global: ${BusinessTypeConstants::Global}`);
 | 
			
		||||
 | 
			
		||||
// --- Testing Company Model ---
 | 
			
		||||
print("\n--- Testing Company Model ---");
 | 
			
		||||
 | 
			
		||||
let company1_uuid = "comp-uuid-alpha-001";
 | 
			
		||||
let company1_name = "Innovatech Solutions Ltd.";
 | 
			
		||||
let company1_reg = "REG-ISL-2024";
 | 
			
		||||
let company1_inc_date = 1672531200; // Jan 1, 2023
 | 
			
		||||
 | 
			
		||||
print(`Creating a new company (UUID: ${company1_uuid})...`);
 | 
			
		||||
let company1 = new_company(company1_name, company1_reg, company1_inc_date)
 | 
			
		||||
    .email("contact@innovatech.com")
 | 
			
		||||
    .phone("+1-555-0100")
 | 
			
		||||
    .website("https://innovatech.com")
 | 
			
		||||
    .address("123 Innovation Drive, Tech City, TC 54321")
 | 
			
		||||
    .business_type(BusinessTypeConstants::Global)
 | 
			
		||||
    .industry("Technology")
 | 
			
		||||
    .description("Leading provider of innovative tech solutions.")
 | 
			
		||||
    .status(CompanyStatusConstants::Active)
 | 
			
		||||
    .fiscal_year_end("12-31")
 | 
			
		||||
    .set_base_created_at(1672531200)
 | 
			
		||||
    .set_base_modified_at(1672531205);
 | 
			
		||||
 | 
			
		||||
print(`Company 1 Name: ${company1.name}, Status: ${company1.status}`);
 | 
			
		||||
print(`Company 1 Email: ${company1.email}, Industry: ${company1.industry}`);
 | 
			
		||||
// Save the company to the database
 | 
			
		||||
print("\nSaving company1 to database...");
 | 
			
		||||
company1 = set_company(company1); // Capture the company with the DB-assigned ID
 | 
			
		||||
print("Company1 saved.");
 | 
			
		||||
 | 
			
		||||
// Retrieve the company
 | 
			
		||||
print(`\nRetrieving company by ID (${company1.id})...`);
 | 
			
		||||
let retrieved_company = get_company_by_id(company1.id);
 | 
			
		||||
print(`Retrieved Company: ${retrieved_company.name}, Status: ${retrieved_company.status}`);
 | 
			
		||||
print(`Retrieved Company Reg No: ${retrieved_company.registration_number}, Website: ${retrieved_company.website}`);
 | 
			
		||||
 | 
			
		||||
// --- Testing Shareholder Model ---
 | 
			
		||||
print("\n--- Testing Shareholder Model ---");
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
let sh1_user_id = 3001; // Example user ID
 | 
			
		||||
let sh1_name = "Alice Wonderland";
 | 
			
		||||
let sh1_since = 1672617600; // Example timestamp (Jan 2, 2023)
 | 
			
		||||
 | 
			
		||||
print(`Creating shareholder 1 for company ${company1.id}...`);
 | 
			
		||||
let shareholder1 = new_shareholder()
 | 
			
		||||
    .company_id(company1.id)
 | 
			
		||||
    .user_id(sh1_user_id)
 | 
			
		||||
    .name(sh1_name)
 | 
			
		||||
    .shares(1000.0)
 | 
			
		||||
    .percentage(10.0) // CALCULATED
 | 
			
		||||
    .type_("Individual")
 | 
			
		||||
    .since(sh1_since)
 | 
			
		||||
    .set_base_created_at(1672617600);
 | 
			
		||||
 | 
			
		||||
shareholder1 = set_shareholder(shareholder1);
 | 
			
		||||
print("Shareholder 1 saved.");
 | 
			
		||||
 | 
			
		||||
let retrieved_sh1 = get_shareholder_by_id(shareholder1.id);
 | 
			
		||||
print(`Retrieved Shareholder 1: ${retrieved_sh1.name}, Type: ${retrieved_sh1.type_}, Shares: ${retrieved_sh1.shares}`);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
let sh2_entity_id = 4001; // Example corporate entity ID
 | 
			
		||||
let sh2_name = "Mad Hatter Inc.";
 | 
			
		||||
let sh2_since = 1672704000; // Example timestamp (Jan 3, 2023)
 | 
			
		||||
 | 
			
		||||
print(`\nCreating shareholder 2 for company ${company1.id}...`);
 | 
			
		||||
let shareholder2 = new_shareholder()
 | 
			
		||||
    .company_id(company1.id)
 | 
			
		||||
    .user_id(sh2_entity_id) // Using user_id field for entity_id for simplicity in example
 | 
			
		||||
    .name(sh2_name)
 | 
			
		||||
    .shares(5000.0)
 | 
			
		||||
    .percentage(50.0)
 | 
			
		||||
    .type_(ShareholderTypeConstants::Corporate)
 | 
			
		||||
    .since(sh2_since)
 | 
			
		||||
    .set_base_created_at(1672704000);
 | 
			
		||||
 | 
			
		||||
shareholder2 = set_shareholder(shareholder2);
 | 
			
		||||
print("Shareholder 2 saved.");
 | 
			
		||||
 | 
			
		||||
let retrieved_sh2 = get_shareholder_by_id(shareholder2.id);
 | 
			
		||||
print(`Retrieved Shareholder 2: ${retrieved_sh2.name}, Type: ${retrieved_sh2.type_}, Percentage: ${retrieved_sh2.percentage}`);
 | 
			
		||||
 | 
			
		||||
// --- Testing Update for Company (Example - if setters were fully implemented for complex updates) ---
 | 
			
		||||
print("\n--- Testing Update for Company ---");
 | 
			
		||||
let updated_company = retrieved_company
 | 
			
		||||
    .description("Leading global provider of cutting-edge technology solutions and services.")
 | 
			
		||||
    .status(CompanyStatusConstants::Active)
 | 
			
		||||
    .phone("+1-555-0199"); // Assume modified_at would be updated by set_company
 | 
			
		||||
 | 
			
		||||
print(`Updated Company - Name: ${updated_company.name}, New Phone: ${updated_company.phone}`);
 | 
			
		||||
set_company(updated_company);
 | 
			
		||||
print("Updated Company saved.");
 | 
			
		||||
 | 
			
		||||
let final_retrieved_company = get_company_by_id(company1.id);
 | 
			
		||||
print(`Final Retrieved Company - Description: '${final_retrieved_company.description}', Phone: ${final_retrieved_company.phone}`);
 | 
			
		||||
 | 
			
		||||
print("\n--- Testing Product Model ---");
 | 
			
		||||
 | 
			
		||||
// Print ProductType constants
 | 
			
		||||
print("\n--- ProductType Constants ---");
 | 
			
		||||
print(`Product Type Product: ${ProductTypeConstants::Product}`);
 | 
			
		||||
print(`Product Type Service: ${ProductTypeConstants::Service}`);
 | 
			
		||||
 | 
			
		||||
// Print ProductStatus constants
 | 
			
		||||
print("\n--- ProductStatus Constants ---");
 | 
			
		||||
print(`Product Status Available: ${ProductStatusConstants::Available}`);
 | 
			
		||||
print(`Product Status Unavailable: ${ProductStatusConstants::Unavailable}`);
 | 
			
		||||
 | 
			
		||||
// Create a product component
 | 
			
		||||
let component1 = new_product_component("Super Capacitor")
 | 
			
		||||
    .description("High-capacity energy storage unit")
 | 
			
		||||
    .quantity(2);
 | 
			
		||||
print(`\nCreated Product Component: ${component1.name}, Qty: ${component1.quantity}`);
 | 
			
		||||
 | 
			
		||||
// Create Product 1 (a physical product with a component)
 | 
			
		||||
 | 
			
		||||
let product1_name = "Advanced Gadget X";
 | 
			
		||||
let product1_creation_time = 1672876800; // Example timestamp (Jan 5, 2023)
 | 
			
		||||
 | 
			
		||||
print(`\nCreating Product 1: ${product1_name}...`);
 | 
			
		||||
let product1 = new_product()
 | 
			
		||||
    .name(product1_name)
 | 
			
		||||
    .description("A revolutionary gadget with cutting-edge features.")
 | 
			
		||||
    .price(299.99)
 | 
			
		||||
    .type_(ProductTypeConstants::Product)
 | 
			
		||||
    .category("Electronics")
 | 
			
		||||
    .status(ProductStatusConstants::Available)
 | 
			
		||||
    .max_amount(1000)
 | 
			
		||||
    .purchase_till(1704067199) // Dec 31, 2023, 23:59:59
 | 
			
		||||
    .active_till(1735689599)   // Dec 31, 2024, 23:59:59
 | 
			
		||||
    .add_component(component1)
 | 
			
		||||
    .set_base_created_at(product1_creation_time);
 | 
			
		||||
 | 
			
		||||
print("Saving Product 1...");
 | 
			
		||||
product1 = set_product(product1);
 | 
			
		||||
print("Product 1 saved.");
 | 
			
		||||
 | 
			
		||||
print(`\nRetrieving Product 1 (ID: ${product1.id})...`);
 | 
			
		||||
let retrieved_product1 = get_product_by_id(product1.id);
 | 
			
		||||
print(`Retrieved Product 1: ${retrieved_product1.name}, Price: ${retrieved_product1.price}, Type: ${retrieved_product1.type_}`);
 | 
			
		||||
if retrieved_product1.components.len() > 0 {
 | 
			
		||||
    print(`Product 1 Component 1: ${retrieved_product1.components[0].name}, Desc: ${retrieved_product1.components[0].description}`);
 | 
			
		||||
} else {
 | 
			
		||||
    print("Product 1 has no components.");
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Create Product 2 (a service)
 | 
			
		||||
 | 
			
		||||
let product2_name = "Cloud Backup Service - Pro Plan";
 | 
			
		||||
let product2_creation_time = 1672963200; // Example timestamp (Jan 6, 2023)
 | 
			
		||||
 | 
			
		||||
print(`\nCreating Product 2: ${product2_name}...`);
 | 
			
		||||
let product2 = new_product()
 | 
			
		||||
    .name(product2_name)
 | 
			
		||||
    .description("Unlimited cloud backup with 24/7 support.")
 | 
			
		||||
    .price(19.99) // Monthly price
 | 
			
		||||
    .type_(ProductTypeConstants::Service)
 | 
			
		||||
    .category("Cloud Services")
 | 
			
		||||
    .status(ProductStatusConstants::Available)
 | 
			
		||||
    .active_till(1735689599) // Valid for a long time, or represents subscription cycle end
 | 
			
		||||
    .set_base_created_at(product2_creation_time);
 | 
			
		||||
 | 
			
		||||
print("Saving Product 2...");
 | 
			
		||||
product2 = set_product(product2);
 | 
			
		||||
print("Product 2 saved.");
 | 
			
		||||
 | 
			
		||||
print(`\nRetrieving Product 2 (ID: ${product2.id})...`);
 | 
			
		||||
let retrieved_product2 = get_product_by_id(product2.id);
 | 
			
		||||
print(`Retrieved Product 2: ${retrieved_product2.name}, Category: ${retrieved_product2.category}, Status: ${retrieved_product2.status}`);
 | 
			
		||||
if retrieved_product2.components.len() > 0 {
 | 
			
		||||
    print(`Product 2 has ${retrieved_product2.components.len()} components.`);
 | 
			
		||||
} else {
 | 
			
		||||
    print("Product 2 has no components (as expected for a service).");
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
// --- Testing Sale Model ---
 | 
			
		||||
print("\n--- Testing Sale Model ---");
 | 
			
		||||
 | 
			
		||||
// Print SaleStatus constants
 | 
			
		||||
print("\n--- SaleStatus Constants ---");
 | 
			
		||||
print(`Sale Status Pending: ${SaleStatusConstants::Pending}`);
 | 
			
		||||
print(`Sale Status Completed: ${SaleStatusConstants::Completed}`);
 | 
			
		||||
print(`Sale Status Cancelled: ${SaleStatusConstants::Cancelled}`);
 | 
			
		||||
 | 
			
		||||
// Create SaleItem 1 (using product1 from above)
 | 
			
		||||
let sale_item1_product_id = product1.id; // Using product1.id after it's set // Using product1_id from product example
 | 
			
		||||
let sale_item1_name = retrieved_product1.name; // Using name from retrieved product1
 | 
			
		||||
let sale_item1_qty = 2;
 | 
			
		||||
let sale_item1_unit_price = retrieved_product1.price;
 | 
			
		||||
let sale_item1_subtotal = sale_item1_qty * sale_item1_unit_price;
 | 
			
		||||
 | 
			
		||||
print(`\nCreating SaleItem 1 for Product ID: ${sale_item1_product_id}, Name: ${sale_item1_name}...`);
 | 
			
		||||
let sale_item1 = new_sale_item(sale_item1_product_id, sale_item1_name, sale_item1_qty, sale_item1_unit_price, sale_item1_subtotal);
 | 
			
		||||
print(`SaleItem 1: Product ID ${sale_item1.product_id}, Qty: ${sale_item1.quantity}, Subtotal: ${sale_item1.subtotal}`);
 | 
			
		||||
 | 
			
		||||
// Create SaleItem 2 (using product2 from above)
 | 
			
		||||
let sale_item2_product_id = product2.id; // Using product2.id after it's set // Using product2_id from product example
 | 
			
		||||
let sale_item2_name = retrieved_product2.name;
 | 
			
		||||
let sale_item2_qty = 1;
 | 
			
		||||
let sale_item2_unit_price = retrieved_product2.price;
 | 
			
		||||
let sale_item2_subtotal = sale_item2_qty * sale_item2_unit_price;
 | 
			
		||||
 | 
			
		||||
print(`\nCreating SaleItem 2 for Product ID: ${sale_item2_product_id}, Name: ${sale_item2_name}...`);
 | 
			
		||||
let sale_item2 = new_sale_item(sale_item2_product_id, sale_item2_name, sale_item2_qty, sale_item2_unit_price, sale_item2_subtotal);
 | 
			
		||||
print(`SaleItem 2: Product ID ${sale_item2.product_id}, Qty: ${sale_item2.quantity}, Subtotal: ${sale_item2.subtotal}`);
 | 
			
		||||
 | 
			
		||||
// Create a Sale
 | 
			
		||||
 | 
			
		||||
let sale1_customer_id = company1.id; // Example: company1 is the customer
 | 
			
		||||
let sale1_date = 1673049600; // Example timestamp (Jan 7, 2023)
 | 
			
		||||
let sale1_total_amount = sale_item1.subtotal + sale_item2.subtotal;
 | 
			
		||||
 | 
			
		||||
print(`\nCreating Sale 1 for Customer ID: ${sale1_customer_id}...`);
 | 
			
		||||
let sale1 = new_sale(
 | 
			
		||||
    sale1_customer_id, // for company_id_i64 in Rhai registration
 | 
			
		||||
    "Temp Buyer Name",   // for buyer_name in Rhai registration
 | 
			
		||||
    "temp@buyer.com",  // for buyer_email in Rhai registration
 | 
			
		||||
    0.0,               // for total_amount (will be overridden by builder)
 | 
			
		||||
    SaleStatusConstants::Pending, // for status (will be overridden by builder)
 | 
			
		||||
    0                  // for sale_date (will be overridden by builder)
 | 
			
		||||
)
 | 
			
		||||
    .customer_id(sale1_customer_id) // Actual field on Sale struct
 | 
			
		||||
    .status(SaleStatusConstants::Pending)
 | 
			
		||||
    .sale_date(sale1_date)
 | 
			
		||||
    .add_item(sale_item1) // Add item one by one
 | 
			
		||||
    .add_item(sale_item2)
 | 
			
		||||
    // Alternatively, to set all items at once (if items were already in an array):
 | 
			
		||||
    // .items([sale_item1, sale_item2]) 
 | 
			
		||||
    .total_amount(sale1_total_amount)
 | 
			
		||||
    .notes("First major sale of the year. Includes Advanced Gadget X and Cloud Backup Pro.")
 | 
			
		||||
    .set_base_created_at(sale1_date)
 | 
			
		||||
    .set_base_modified_at(sale1_date + 300) // 5 mins later
 | 
			
		||||
    .add_base_comment(1) // Example comment ID
 | 
			
		||||
    .add_base_comment(2);
 | 
			
		||||
 | 
			
		||||
print(`Sale 1 Created: ID ${sale1.id}, Customer ID: ${sale1.customer_id}, Status: ${sale1.status}, Total: ${sale1.total_amount}`);
 | 
			
		||||
print(`Sale 1 Notes: ${sale1.notes}`);
 | 
			
		||||
print(`Sale 1 Item Count: ${sale1.items.len()}`);
 | 
			
		||||
if sale1.items.len() > 0 {
 | 
			
		||||
    print(`Sale 1 Item 1: ${sale1.items[0].name}, Qty: ${sale1.items[0].quantity}`);
 | 
			
		||||
}
 | 
			
		||||
if sale1.items.len() > 1 {
 | 
			
		||||
    print(`Sale 1 Item 2: ${sale1.items[1].name}, Qty: ${sale1.items[1].quantity}`);
 | 
			
		||||
}
 | 
			
		||||
print(`Sale 1 Base Comments: ${sale1.comments}`);
 | 
			
		||||
 | 
			
		||||
// Save Sale 1 to database
 | 
			
		||||
print("\nSaving Sale 1 to database...");
 | 
			
		||||
sale1 = set_sale(sale1);
 | 
			
		||||
print("Sale 1 saved.");
 | 
			
		||||
 | 
			
		||||
// Retrieve Sale 1 from database
 | 
			
		||||
print(`\nRetrieving Sale 1 by ID (${sale1.id})...`);
 | 
			
		||||
let retrieved_sale1 = get_sale_by_id(sale1.id);
 | 
			
		||||
print(`Retrieved Sale 1: ID ${retrieved_sale1.id}, Customer: ${retrieved_sale1.customer_id}, Status: ${retrieved_sale1.status}`);
 | 
			
		||||
print(`Retrieved Sale 1 Total: ${retrieved_sale1.total_amount}, Notes: '${retrieved_sale1.notes}'`);
 | 
			
		||||
if retrieved_sale1.items.len() > 0 {
 | 
			
		||||
    print(`Retrieved Sale 1 Item 1: ${retrieved_sale1.items[0].name} (Product ID: ${retrieved_sale1.items[0].product_id})`);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
print("\nBiz Rhai example script finished.");
 | 
			
		||||
@@ -1,45 +0,0 @@
 | 
			
		||||
use heromodels::db::hero::OurDB; // Corrected path for OurDB
 | 
			
		||||
use heromodels::models::biz::register_biz_rhai_module; // Corrected path
 | 
			
		||||
use rhai::{Engine, EvalAltResult, Scope};
 | 
			
		||||
use std::fs;
 | 
			
		||||
use std::sync::Arc;
 | 
			
		||||
 | 
			
		||||
fn main() -> Result<(), Box<EvalAltResult>> {
 | 
			
		||||
    println!("Executing Rhai script: examples/biz_rhai/biz.rhai");
 | 
			
		||||
 | 
			
		||||
    // Create a new Rhai engine
 | 
			
		||||
    let mut engine = Engine::new();
 | 
			
		||||
 | 
			
		||||
    // Create an Arc<Mutex<OurDB>> instance
 | 
			
		||||
    // For this example, we'll use an in-memory DB.
 | 
			
		||||
    // The actual DB path or configuration might come from elsewhere in a real app.
 | 
			
		||||
    let db_instance = Arc::new(OurDB::new(".", false).expect("Failed to create DB")); // Corrected OurDB::new args and removed Mutex
 | 
			
		||||
 | 
			
		||||
    // Register the biz module with the engine
 | 
			
		||||
    register_biz_rhai_module(&mut engine, Arc::clone(&db_instance));
 | 
			
		||||
 | 
			
		||||
    // Read the Rhai script from file
 | 
			
		||||
    let script_path = "examples/biz_rhai/biz.rhai";
 | 
			
		||||
    let script_content = fs::read_to_string(script_path).map_err(|e| {
 | 
			
		||||
        Box::new(EvalAltResult::ErrorSystem(
 | 
			
		||||
            format!("Cannot read script file: {}", script_path),
 | 
			
		||||
            e.into(),
 | 
			
		||||
        ))
 | 
			
		||||
    })?;
 | 
			
		||||
 | 
			
		||||
    // Create a new scope
 | 
			
		||||
    let mut scope = Scope::new();
 | 
			
		||||
 | 
			
		||||
    // Execute the script
 | 
			
		||||
    match engine.run_with_scope(&mut scope, &script_content) {
 | 
			
		||||
        Ok(_) => {
 | 
			
		||||
            println!("Rhai script executed successfully!");
 | 
			
		||||
            Ok(())
 | 
			
		||||
        }
 | 
			
		||||
        Err(e) => {
 | 
			
		||||
            println!("Rhai script execution failed: {}", e);
 | 
			
		||||
            println!("Details: {:?}", e);
 | 
			
		||||
            Err(e)
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
		Reference in New Issue
	
	Block a user