rustfmt
[recipes.git] / backend / src / main.rs
1 use actix_files as fs;
2 use actix_web::{middleware, web, App, HttpServer};
3 use chrono::prelude::*;
4 use clap::Parser;
5 use log::error;
6
7 use data::db;
8
9 mod config;
10 mod consts;
11 mod data;
12 mod email;
13 mod hash;
14 mod model;
15 mod services;
16 mod user;
17 mod utils;
18
19 #[actix_web::main]
20 async fn main() -> std::io::Result<()> {
21 if process_args() {
22 return Ok(());
23 }
24
25 std::env::set_var("RUST_LOG", "info,actix_web=info");
26 env_logger::init();
27
28 println!("Starting Recipes as web server...");
29
30 let config = web::Data::new(config::load());
31 let port = config.as_ref().port;
32
33 println!("Configuration: {:?}", config);
34
35 let db_connection = web::Data::new(db::Connection::new().unwrap());
36
37 let server = HttpServer::new(move || {
38 App::new()
39 .wrap(middleware::Logger::default())
40 .wrap(middleware::Compress::default())
41 .app_data(db_connection.clone())
42 .app_data(config.clone())
43 .service(services::home_page)
44 .service(services::sign_up_get)
45 .service(services::sign_up_post)
46 .service(services::sign_up_check_email)
47 .service(services::sign_up_validation)
48 .service(services::sign_in_get)
49 .service(services::sign_in_post)
50 .service(services::sign_out)
51 .service(services::view_recipe)
52 .service(services::edit_recipe)
53 .service(fs::Files::new("/static", "static"))
54 .default_service(web::to(services::not_found))
55 });
56 //.workers(1);
57
58 server.bind(&format!("0.0.0.0:{}", port))?.run().await
59 }
60
61 #[derive(Parser, Debug)]
62 struct Args {
63 #[arg(long)]
64 dbtest: bool,
65 }
66
67 fn process_args() -> bool {
68 let args = Args::parse();
69
70 if args.dbtest {
71 match db::Connection::new() {
72 Ok(con) => {
73 if let Err(error) = con.execute_file("sql/data_test.sql") {
74 eprintln!("{}", error);
75 }
76 // Set the creation datetime to 'now'.
77 con.execute_sql(
78 "UPDATE [User] SET [creation_datetime] = ?1 WHERE [email] = 'paul@test.org'",
79 [Utc::now()],
80 )
81 .unwrap();
82 }
83 Err(error) => {
84 eprintln!("{}", error);
85 }
86 }
87
88 return true;
89 }
90
91 false
92 }