Files
ice-bingo/src/main.rs

47 lines
1.4 KiB
Rust

use std::net::SocketAddr;
use axum::Router;
use axum::routing::{get, post};
use sqlx::migrate::MigrateError;
use tokio::net::TcpListener;
use crate::config::IceBingoConfig;
use crate::model::app::AppState;
mod config;
pub(crate) mod model;
mod api;
pub(crate) mod error;
pub(crate) mod util;
mod database;
#[tokio::main]
async fn main() {
println!("Starting up");
let config = IceBingoConfig::load("config.yaml")
.await.expect("Unable to load config");
let state: AppState = AppState::new(config.clone()).await.unwrap();
migrate(state.clone()).await.expect("Database migration failed");
let router = build_router(state);
let listener = listen(config).await;
axum::serve::serve(listener, router).await.unwrap()
}
fn build_router(state: AppState) -> Router {
Router::new()
.route("/webhook/travelynx", post(api::handlers::webhook::receive_travelynx))
.route("/card/", get(api::handlers::bingo_card::get))
.with_state(state)
}
async fn listen(config: IceBingoConfig) -> TcpListener {
let socket_addr: SocketAddr = (config.http.bind_address, config.http.port).into();
println!("Listening on {}", socket_addr);
TcpListener::bind(socket_addr).await.unwrap()
}
async fn migrate(state: AppState) -> Result<(), MigrateError>{
sqlx::migrate!("./src/sql/migrations")
.run(&mut state.db.acquire().await?)
.await
}