40 lines
926 B
Rust
40 lines
926 B
Rust
use std::{process, sync::mpsc::channel};
|
|
|
|
use models::Environment;
|
|
|
|
mod db;
|
|
mod error;
|
|
mod models;
|
|
mod requests;
|
|
mod services;
|
|
|
|
use db::{create_connection_pool, run_migrations};
|
|
use requests::start_app;
|
|
use services::{start_emailer_service, UserConfirmationMessage};
|
|
use tokio::runtime::Handle;
|
|
|
|
#[tokio::main]
|
|
async fn main() {
|
|
let (tx, rx) = channel::<UserConfirmationMessage>();
|
|
|
|
let env = match Environment::init(tx) {
|
|
Ok(env) => env,
|
|
Err(err) => {
|
|
eprintln!("{err}");
|
|
process::exit(1);
|
|
}
|
|
};
|
|
|
|
let pool = create_connection_pool(env.db_connection_uri()).await;
|
|
if let Err(err) = run_migrations(&pool).await {
|
|
eprintln!("{err:?}");
|
|
process::exit(2);
|
|
}
|
|
|
|
start_emailer_service(Handle::current(), env.assets_dir(), rx);
|
|
|
|
if let Err(err) = start_app(pool, env).await {
|
|
eprintln!("{err:?}");
|
|
process::exit(3);
|
|
}
|
|
}
|