mod common;
use crate::common::AppState;
use ishikari::{Engine, Postgres, Queue};
use sqlx::PgPool;
use std::{sync::Arc, time::Duration};
#[tokio::main]
async fn main() -> anyhow::Result<()> {
tracing_subscriber::fmt::init();
let database_url = std::env::var("DATABASE_URL").unwrap();
let pool = PgPool::connect(&database_url).await.unwrap();
sqlx::migrate!("../migrations").run(&pool).await.unwrap();
sqlx::query("TRUNCATE jobs RESTART IDENTITY")
.execute(&pool)
.await?;
let state = AppState { pool: pool.clone() };
let _engine = Engine::builder("ishikari-example")
.stager_interval(Duration::from_secs(5))
.with_queue(Queue::builder("default").concurrency(10))
.with_queue(
Queue::builder("low_latency")
.concurrency(20)
.interval(Duration::from_millis(500)),
)
.with_state(Arc::new(state))
.start(Postgres::new(pool.clone()));
tokio::signal::ctrl_c().await.unwrap();
Ok(())
}