use herodb::db::{DB, DBBuilder, Model}; use herodb::models::biz::{Product, ProductBuilder, ProductType, ProductStatus, Currency, CurrencyBuilder}; use chrono::Utc; fn main() -> Result<(), Box> { println!("OurDB Backend Example"); println!("====================\n"); // Create a temporary directory for the database let db_path = std::env::temp_dir().join("herodb_ourdb_example"); std::fs::create_dir_all(&db_path)?; println!("Creating database at: {}", db_path.display()); // Create a new database with Product model registered let db = DBBuilder::new(db_path.clone()) .register_model::() .build()?; println!("Database created successfully"); // Create a currency for pricing let usd = CurrencyBuilder::new() .id(1) // Add an ID for the currency .amount(99.99) .currency_code("USD") .build() .expect("Failed to create currency"); // Create a product let product = ProductBuilder::new() .id(1) // We're setting an ID manually for this example .name("Test Product") .description("A test product for our OurDB example") .price(usd) .type_(ProductType::Product) .category("Test") .status(ProductStatus::Available) .max_amount(100) .validity_days(365) .build() .expect("Failed to create product"); println!("\nCreated product: {}", product.name); println!("Product ID: {}", product.get_id()); // Insert the product into the database db.set(&product)?; println!("Product saved to database"); // Retrieve the product from the database let retrieved_product = db.get::(product.get_id())?; println!("\nRetrieved product from database:"); println!(" Name: {}", retrieved_product.name); println!(" Description: {}", retrieved_product.description); println!(" Price: ${} {}", retrieved_product.price.amount, retrieved_product.price.currency_code); // Create a product with auto-incremented ID // For this to work, we would need to modify the Product model to support auto-incremented IDs // This is just a conceptual example println!("\nDemonstrating auto-incremented IDs:"); println!("(Note: This would require additional implementation in the Product model)"); // Delete the product db.delete::(product.get_id())?; println!("\nProduct deleted from database"); // Try to retrieve the deleted product (should fail) match db.get::(product.get_id()) { Ok(_) => println!("Product still exists (unexpected)"), Err(e) => println!("Verified deletion: {}", e), } println!("\nExample completed successfully!"); // Clean up std::fs::remove_dir_all(&db_path)?; println!("Cleaned up database directory"); Ok(()) }