Documentation
use sea_orm::DatabaseConnection;
use sea_orm::{ConnectOptions, Database};
use std::sync::OnceLock;
use tracing::info;

static MYSQL: OnceLock<DatabaseConnection> = OnceLock::<DatabaseConnection>::new();

pub fn init_db(dburl: String) -> &'static DatabaseConnection {
    MYSQL.get_or_init(|| {
        let mut opt = ConnectOptions::new(dburl.to_owned());
        opt.max_connections(100)
            .min_connections(5)
            .connect_timeout(std::time::Duration::from_secs(8))
            .idle_timeout(std::time::Duration::from_secs(8))
            .max_lifetime(std::time::Duration::from_secs(8))
            .sqlx_logging(false);
        let conn = futures::executor::block_on(async { Database::connect(opt).await.unwrap() });
        info!("connect to mysql successfully");
        conn
    })
}

pub fn get_db() -> &'static DatabaseConnection {
    MYSQL.get().unwrap()
}