43 lines
1.2 KiB
Rust
43 lines
1.2 KiB
Rust
use std::{sync::Arc, time::Duration};
|
|
|
|
use tokio::signal;
|
|
use tracing_subscriber::EnvFilter;
|
|
|
|
use backend::{
|
|
auth::jwt::JwtService, config::AppConfig, db, default_handlers, s3::build_client,
|
|
state::AppState, storage::S3Storage, Worker,
|
|
};
|
|
|
|
#[tokio::main]
|
|
async fn main() -> anyhow::Result<()> {
|
|
dotenv::dotenv().ok();
|
|
init_tracing();
|
|
|
|
let config = AppConfig::from_env()?;
|
|
let pool = db::init_pool(&config.database_url)?;
|
|
let s3_client = build_client(&config).await?;
|
|
let storage = Arc::new(S3Storage::new(s3_client, config.s3_bucket.clone()));
|
|
let jwt = JwtService::from_config(&config)?;
|
|
|
|
let state = Arc::new(AppState::new(pool, config, storage, jwt));
|
|
let worker = Worker::new(state, default_handlers(), Duration::from_secs(2));
|
|
|
|
tokio::select! {
|
|
_ = worker.run() => {}
|
|
_ = signal::ctrl_c() => {
|
|
tracing::info!("worker received shutdown signal");
|
|
}
|
|
}
|
|
|
|
Ok(())
|
|
}
|
|
|
|
fn init_tracing() {
|
|
let filter = EnvFilter::try_from_default_env().unwrap_or_else(|_| EnvFilter::new("info"));
|
|
tracing_subscriber::fmt()
|
|
.with_env_filter(filter)
|
|
.with_target(false)
|
|
.compact()
|
|
.init();
|
|
}
|