65 lines
1.6 KiB
Rust
65 lines
1.6 KiB
Rust
mod events;
|
|
mod jwt;
|
|
mod user;
|
|
|
|
use axum::{
|
|
routing::{get, post},
|
|
Router,
|
|
};
|
|
use jsonwebtoken::{DecodingKey, EncodingKey};
|
|
use sqlx::postgres::PgPoolOptions;
|
|
use sqlx::PgPool;
|
|
use std::net::SocketAddr;
|
|
use user::{signin, signup};
|
|
|
|
#[derive(Clone)]
|
|
pub struct AppState {
|
|
pub db_pool: PgPool,
|
|
pub jwt_encode: EncodingKey,
|
|
pub jwt_decode: DecodingKey,
|
|
}
|
|
|
|
#[tokio::main]
|
|
async fn main() {
|
|
tracing_subscriber::fmt::init();
|
|
|
|
// Ex.
|
|
// export DATABASE_URL="postgres://school_app_api_user:school_app_api_pass@localhost/school_app_api"
|
|
let db_url = std::env::var("DATABASE_URL")
|
|
.expect("Set `DATABASE_URL` to the url of the postgres database.");
|
|
|
|
let (jwt_encode, jwt_decode) = jwt::get_jwt_keys();
|
|
|
|
let db_pool = PgPoolOptions::new()
|
|
.max_connections(50)
|
|
.connect(&db_url)
|
|
.await
|
|
.expect("could not connect to database_url");
|
|
|
|
// build our application with a route
|
|
let app = Router::new()
|
|
.route("/", get(root))
|
|
.route("/user/signup", post(signup))
|
|
.route("/user/signin", post(signin))
|
|
.route("/event", post(events::create_event))
|
|
.route("/event/preview", get(events::get_events_preview))
|
|
.with_state(AppState {
|
|
db_pool,
|
|
jwt_encode,
|
|
jwt_decode,
|
|
});
|
|
|
|
// run our app with hyper
|
|
// `axum::Server` is a re-export of `hyper::Server`
|
|
let addr = SocketAddr::from(([0, 0, 0, 0], 3000));
|
|
tracing::info!("listening on {}", addr);
|
|
axum::Server::bind(&addr)
|
|
.serve(app.into_make_service())
|
|
.await
|
|
.unwrap();
|
|
}
|
|
|
|
async fn root() -> &'static str {
|
|
"Hello, World!"
|
|
}
|