Athenaeum/src/main.rs
2025-06-01 18:36:49 +02:00

65 lines
1.9 KiB
Rust

mod models;
mod auth;
mod books;
mod cart;
mod profile;
mod error;
use actix_web::{web, App, HttpServer};
use actix_cors::Cors;
use actix_files::Files;
use dotenv::dotenv;
use env_logger::Builder;
use sqlx::postgres::PgPoolOptions;
use std::env;
#[actix_web::main]
async fn main() -> std::io::Result<()> {
Builder::from_env(env_logger::Env::default().default_filter_or("debug")).init();
dotenv().ok();
let database_url = env::var("DATABASE_URL").expect("DATABASE_URL must be set in .env");
let pool = PgPoolOptions::new()
.max_connections(5)
.connect(&database_url)
.await
.expect("Failed to create pool");
HttpServer::new(move || {
let cors = Cors::default()
.allow_any_origin()
.allowed_methods(vec!["GET", "POST", "DELETE"])
.allowed_headers(vec![
actix_web::http::header::CONTENT_TYPE,
actix_web::http::header::AUTHORIZATION,
actix_web::http::header::ACCEPT,
])
.supports_credentials();
App::new()
.app_data(web::Data::new(pool.clone()))
.wrap(cors)
.wrap(actix_web::middleware::Logger::default())
.service(books::get_books)
.service(books::get_book)
.service(auth::register)
.service(auth::login)
.service(auth::logout)
.service(auth::check_auth)
.service(cart::get_cart)
.service(cart::add_to_cart)
.service(cart::remove_from_cart)
.service(cart::checkout)
.service(cart::update_cart_quantity)
.service(profile::get_order_history)
.service(
Files::new("/images", "./static/images")
.show_files_listing(),
)
.service(Files::new("/", "./static").index_file("index.html"))
})
.bind("0.0.0.0:7999")?
.run()
.await
}