recipes/backend/src/main.rs
2022-11-29 15:58:06 +01:00

86 lines
2.3 KiB
Rust

use actix_files as fs;
use actix_web::{web, middleware, App, HttpServer};
use chrono::prelude::*;
use clap::Parser;
use log::error;
use data::db;
mod consts;
mod utils;
mod data;
mod hash;
mod model;
mod user;
mod email;
mod config;
mod services;
#[actix_web::main]
async fn main() -> std::io::Result<()> {
if process_args() { return Ok(()) }
std::env::set_var("RUST_LOG", "info,actix_web=info");
env_logger::init();
println!("Starting Recipes as web server...");
let config = web::Data::new(config::load());
let port = config.as_ref().port;
println!("Configuration: {:?}", config);
let db_connection = web::Data::new(db::Connection::new().unwrap());
let server =
HttpServer::new(move || {
App::new()
.wrap(middleware::Logger::default())
.wrap(middleware::Compress::default())
.app_data(db_connection.clone())
.app_data(config.clone())
.service(services::home_page)
.service(services::sign_up_get)
.service(services::sign_up_post)
.service(services::sign_up_check_email)
.service(services::sign_up_validation)
.service(services::sign_in_get)
.service(services::sign_in_post)
.service(services::sign_out)
.service(services::view_recipe)
.service(fs::Files::new("/static", "static"))
.default_service(web::to(services::not_found))
});
//.workers(1);
server.bind(&format!("0.0.0.0:{}", port))?.run().await
}
#[derive(Parser, Debug)]
struct Args {
#[arg(long)]
dbtest: bool
}
fn process_args() -> bool {
let args = Args::parse();
if args.dbtest {
match db::Connection::new() {
Ok(con) => {
if let Err(error) = con.execute_file("sql/data_test.sql") {
eprintln!("{}", error);
}
// Set the creation datetime to 'now'.
con.execute_sql("UPDATE [User] SET [creation_datetime] = ?1 WHERE [email] = 'paul@test.org'", [Utc::now()]).unwrap();
},
Err(error) => {
eprintln!("{}", error);
},
}
return true;
}
false
}