// Hero Models - Flow Rhai Example print("Hero Models - Flow Rhai Example"); print("============================="); // Helper to format Option (Dynamic in Rhai: String or ()) for printing fn format_optional(val, placeholder) { if val == () { placeholder } else { val } } // The database instance is now implicitly passed to DB functions. print("DB instance will be implicitly passed."); // --- Test Flow Model --- print("\n--- Testing Flow Model ---"); // Create a new flow using the constructor and builder methods print("Creating a new flow (ID: 1, UUID: flow-uuid-001)..."); let flow1 = new_flow(1, "flow-uuid-001") .name("Document Approval Workflow") .status("Active"); print("Flow object created: " + flow1); print("Flow ID: " + flow1.id); print("Flow UUID: " + flow1.flow_uuid); print("Flow Name: " + flow1.name); print("Flow Status: " + flow1.status); // Save the flow to the database set_flow(flow1); print("Flow saved to database."); // Retrieve the flow let retrieved_flow = get_flow_by_id(1); print("Retrieved Flow by ID (1): " + retrieved_flow.name + ", Status: " + retrieved_flow.status); // --- Test FlowStep Model (as part of Flow) --- print("\n--- Testing FlowStep Model (as part of Flow) ---"); // Create FlowSteps print("Creating flow steps and adding to flow..."); let step1 = new_flow_step(101, 1) // id, step_order .description("Initial Review by Manager") .status("Pending"); let step2 = new_flow_step(102, 2) // id, step_order. Note: FlowStep ID 102 will be used for sig_req1 & sig_req2 .description("Legal Team Sign-off") .status("Pending"); // Add steps to the flow created earlier flow1 = flow1.add_step(step1); flow1 = flow1.add_step(step2); print("Flow now has " + flow1.steps.len() + " steps."); print("First step description: " + format_optional(flow1.steps[0].description, "[No Description]")); // Re-save the flow with its steps set_flow(flow1); print("Flow with steps saved to database."); // Retrieve the flow and check its steps let retrieved_flow_with_steps = get_flow_by_id(1); print("Retrieved Flow by ID (1) has " + retrieved_flow_with_steps.steps.len() + " step(s)."); if retrieved_flow_with_steps.steps.len() > 0 { print("First step of retrieved flow: " + format_optional(retrieved_flow_with_steps.steps[0].description, "[No Description]")); } // --- Test SignatureRequirement Model --- print("\n--- Testing SignatureRequirement Model ---"); // Create SignatureRequirements (referencing FlowStep ID 102, which is step2) print("Creating signature requirements for step with ID 102..."); let sig_req1 = new_signature_requirement(201, 102, "pubkey_legal_lead", "Legal Lead: Approve terms.") .status("Required"); let sig_req2 = new_signature_requirement(202, 102, "pubkey_general_counsel", "General Counsel: Final Approval.") .status("Required"); // signed_by and signature will default to None (Rust) / () (Rhai) print("SigReq 1: " + sig_req1.message + " for PubKey: " + sig_req1.public_key + " (Status: " + sig_req1.status + ")"); if sig_req2.signed_by == () { print("SigReq 2: " + sig_req2.message + " for PubKey: " + sig_req2.public_key + " (Status: " + sig_req2.status + ", Not signed yet)"); } else { print("SigReq 2: " + sig_req2.message + " for PubKey: " + sig_req2.public_key + " (Status: " + sig_req2.status + ", Signed by: " + format_optional(sig_req2.signed_by, "[Not Signed Yet]") + ")"); } // Save signature requirements set_signature_requirement(sig_req1); set_signature_requirement(sig_req2); print("SignatureRequirements saved to database."); // Retrieve a signature requirement let retrieved_sig_req = get_signature_requirement_by_id(201); print("Retrieved SignatureRequirement by ID (201): " + retrieved_sig_req.message); // --- Test updating a SignatureRequirement --- print("\n--- Testing Update for SignatureRequirement ---"); let updated_sig_req = retrieved_sig_req .status("Signed") .signed_by("pubkey_legal_lead_actual_signer_id") .signature("base64_encoded_signature_data_here"); print("Updated SigReq 1 - Status: " + updated_sig_req.status + ", Signed By: " + format_optional(updated_sig_req.signed_by, "[Not Signed Yet]") + ", Signature: " + format_optional(updated_sig_req.signature, "[No Signature]")); set_signature_requirement(updated_sig_req); // Save updated print("Updated SignatureRequirement saved."); print("\nFlow Rhai example script finished.");