|
|
|
mod auth;
|
|
|
|
mod cases;
|
|
|
|
mod collections;
|
|
|
|
|
|
|
|
use std::sync::Arc;
|
|
|
|
|
|
|
|
use axum::routing::get;
|
|
|
|
use axum::routing::Router;
|
|
|
|
use clap::Parser;
|
|
|
|
use dotenv::dotenv;
|
|
|
|
use mongodb::options::ClientOptions;
|
|
|
|
use mongodb::Client;
|
|
|
|
use mongodb::Database;
|
|
|
|
|
|
|
|
#[derive(Parser)]
|
|
|
|
struct Params {
|
|
|
|
#[clap(env = "SRV_ADDR", default_value = "0.0.0.0:3000")]
|
|
|
|
addr: String,
|
|
|
|
|
|
|
|
#[clap(short, long, env = "MONGO_URI")]
|
|
|
|
mongo_addr: String,
|
|
|
|
|
|
|
|
#[clap(long, env = "CIUSR")]
|
|
|
|
ci_usr: String,
|
|
|
|
|
|
|
|
#[clap(long, env = "CIPWD")]
|
|
|
|
ci_pwd: String,
|
|
|
|
|
|
|
|
#[clap(long, env = "CIROLE")]
|
|
|
|
ci_role: String,
|
|
|
|
}
|
|
|
|
|
|
|
|
pub struct State {
|
|
|
|
db: Database,
|
|
|
|
}
|
|
|
|
|
|
|
|
#[tokio::main]
|
|
|
|
async fn main() {
|
|
|
|
dotenv().ok();
|
|
|
|
tracing_subscriber::fmt::init();
|
|
|
|
|
|
|
|
let args = Params::parse();
|
|
|
|
|
|
|
|
tracing::debug!("Connecting to mongo...");
|
|
|
|
let mongo_options = ClientOptions::parse(&args.mongo_addr).await.unwrap();
|
|
|
|
let client = Client::with_options(mongo_options).unwrap();
|
|
|
|
let db = client.database("helyxTestDatabase");
|
|
|
|
|
|
|
|
let state = Arc::new(State { db });
|
|
|
|
|
|
|
|
let app = Router::new()
|
|
|
|
.route("/", get(index))
|
|
|
|
.merge(collections::router(
|
|
|
|
state.clone(),
|
|
|
|
args.ci_usr.clone(),
|
|
|
|
args.ci_pwd.clone(),
|
|
|
|
args.ci_role.clone(),
|
|
|
|
))
|
|
|
|
.merge(cases::router(
|
|
|
|
state.clone(),
|
|
|
|
args.ci_usr.clone(),
|
|
|
|
args.ci_pwd.clone(),
|
|
|
|
args.ci_role.clone(),
|
|
|
|
));
|
|
|
|
|
|
|
|
tracing::info!(args.addr, "Server listening in");
|
|
|
|
axum::Server::bind(&args.addr.parse().unwrap())
|
|
|
|
.serve(app.into_make_service())
|
|
|
|
.await
|
|
|
|
.unwrap();
|
|
|
|
}
|
|
|
|
|
|
|
|
async fn index() -> String {
|
|
|
|
format!("Hellow")
|
|
|
|
}
|