42 lines
No EOL
1.3 KiB
Rust
42 lines
No EOL
1.3 KiB
Rust
use std::net::SocketAddr;
|
|
use std::str::FromStr;
|
|
|
|
use api::run as run_api;
|
|
use application::Service;
|
|
use domain::{User, Product};
|
|
use postgres::{PostgresProductRepository, PostgresUserRepository};
|
|
use sqlx::postgres::PgPoolOptions;
|
|
use dotenvy;
|
|
use std::env;
|
|
|
|
#[tokio::main]
|
|
async fn main() -> anyhow::Result<()> {
|
|
// Load environment variables from config file
|
|
dotenvy::from_path("config/api-postgres.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());
|
|
let database_url = env::var("DATABASE_URL").expect("DATABASE_URL must be set");
|
|
|
|
// Create database pool
|
|
let pool = PgPoolOptions::new()
|
|
.max_connections(5)
|
|
.connect(&database_url)
|
|
.await?;
|
|
|
|
// Create repositories
|
|
let user_repo = PostgresUserRepository::new(pool.clone());
|
|
let product_repo = PostgresProductRepository::new(pool);
|
|
|
|
// Create services
|
|
let user_service = Service::<User, _>::new(user_repo);
|
|
let product_service = Service::<Product, _>::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(())
|
|
}
|