use std::net::SocketAddr; use std::str::FromStr; use api::run as run_api; use application::Service; use domain::{User, Product}; use memory::{InMemoryProductRepository, InMemoryUserRepository}; use std::env; #[tokio::main] async fn main() -> anyhow::Result<()> { // Load environment variables from config file dotenvy::from_path("config/api-memory.env").ok(); // Get configuration from environment variables let host = env::var("HOST").unwrap_or_else(|_| "127.0.0.1".to_string()); let port = env::var("PORT").unwrap_or_else(|_| "3001".to_string()); // Create repositories let user_repo = InMemoryUserRepository::new(); let product_repo = InMemoryProductRepository::new(); // Create services let user_service = Service::::new(user_repo); let product_service = Service::::new(product_repo); // Run API server let addr = format!("{}:{}", host, port); let addr = SocketAddr::from_str(&addr)?; run_api(addr, user_service, product_service).await; Ok(()) }