95 lines
3.3 KiB
Rust
95 lines
3.3 KiB
Rust
use std::net::SocketAddr;
|
|
use axum::{
|
|
middleware, routing::{get, get_service}, Extension, Router
|
|
};
|
|
use secret_gift_exchange::{giftexchange, giftexchanges};
|
|
use sqlx::{sqlite::SqlitePoolOptions, SqlitePool};
|
|
use sqlx::migrate::Migrator;
|
|
use tower_http::services::ServeDir;
|
|
|
|
mod error_handling;
|
|
mod google_oauth;
|
|
mod middlewares;
|
|
mod routes;
|
|
mod user;
|
|
mod wishlist;
|
|
mod email;
|
|
mod secret_gift_exchange;
|
|
|
|
use error_handling::AppError;
|
|
use middlewares::inject_user_data;
|
|
use google_oauth::{login, logout, google_auth_return};
|
|
use routes::{about, contact, cottagecalendar, dashboard, index, profile, user_profile, useradmin};
|
|
use user::{add_user_role, delete_user_role, UserData};
|
|
use wishlist::{user_wishlist, user_wishlist_add, user_wishlist_add_item, user_wishlist_bought_item, user_wishlist_received_item, wishlists};
|
|
//use email::send_emails;
|
|
|
|
#[derive(Clone)]
|
|
pub struct AppState {
|
|
pub db_pool: SqlitePool
|
|
}
|
|
|
|
#[tokio::main]
|
|
async fn main() {
|
|
// initialize tracing
|
|
tracing_subscriber::fmt::init();
|
|
|
|
let db_pool = SqlitePoolOptions::new()
|
|
.max_connections(5)
|
|
.connect("sqlite://db/db.sqlite3")
|
|
.await;
|
|
|
|
let app_state = AppState {db_pool:db_pool.expect("Failed to get db_pool")};
|
|
|
|
static MIGRATOR: Migrator = sqlx::migrate!();
|
|
|
|
MIGRATOR
|
|
.run(&app_state.db_pool)
|
|
.await
|
|
.expect("Failed to run migrations");
|
|
|
|
let user_data: Option<UserData> = None;
|
|
|
|
// build our application with some routes
|
|
let app = Router::new()
|
|
.route("/dashboard", get(dashboard))
|
|
.route("/cottagecalendar", get(cottagecalendar))
|
|
.route("/profile", get(profile))
|
|
.route("/useradmin", get(useradmin))
|
|
.route("/users/:user_id", get(user_profile))
|
|
.route("/roles/:user_id/:role_id/add", get(add_user_role))
|
|
.route("/roles/:user_id/:user_role_id/delete", get(delete_user_role))
|
|
.route("/wishlists", get(wishlists))
|
|
.route("/userwishlist/:user_id", get(user_wishlist))
|
|
.route("/userwishlist/add/:user_id", get(user_wishlist_add).post(user_wishlist_add_item))
|
|
.route("/userwishlist/bought/:user_id", get(user_wishlist_bought_item))
|
|
.route("/userwishlist/received/:user_id", get(user_wishlist_received_item))
|
|
.route("/giftexchanges", get(giftexchanges))
|
|
.route("/giftexchange/:giftexchange_id", get(giftexchange))
|
|
.nest_service("/assets", ServeDir::new("templates/assets")
|
|
.fallback(get_service(ServeDir::new("templates/assets"))))
|
|
.route("/", get(index))
|
|
.route("/about", get(about))
|
|
.route("/contactus", get(contact))
|
|
.route("/login", get(login))
|
|
.route("/logout", get(logout))
|
|
.route("/google_auth_return", get(google_auth_return))
|
|
.route_layer(middleware::from_fn_with_state(app_state.db_pool.clone(), inject_user_data))
|
|
.with_state(app_state.db_pool.clone())
|
|
.layer(Extension(user_data))
|
|
;
|
|
|
|
// Send email indicating server has started
|
|
//let recipients = get_useremails_by_role("admin".to_string(), &app_state.db_pool).await;
|
|
//send_emails("Server started".to_string(), recipients, "Server has been started".to_string());
|
|
|
|
// run it
|
|
let addr = SocketAddr::from(([0, 0, 0, 0], 40192));
|
|
tracing::debug!("listening on {}", addr);
|
|
axum_server::bind(addr)
|
|
.serve(app.into_make_service())
|
|
.await
|
|
.unwrap();
|
|
|
|
}
|