lan-party-backend/src/main.rs

74 lines
2.0 KiB
Rust

mod api;
use rocket::{fairing, fairing::AdHoc, Build, Rocket};
use rocket_db_pools::{sqlx, Database};
use rocket_okapi::{
mount_endpoints_and_merged_docs, openapi,
rapidoc::*,
settings::{OpenApiSettings, UrlObject},
swagger_ui::{make_swagger_ui, SwaggerUIConfig},
};
#[macro_use]
extern crate rocket;
#[derive(Database)]
#[database("party")]
pub struct Db(sqlx::SqlitePool);
#[openapi]
#[get("/")]
fn index() -> String {
format!("Hello, world!")
}
async fn run_migrations(rocket: Rocket<Build>) -> fairing::Result {
match Db::fetch(&rocket) {
Some(db) => match sqlx::migrate!("db/migrations").run(&**db).await {
Ok(_) => {
println!("Migrations completed");
Ok(rocket)
}
Err(e) => {
error!("Failed to initialize SQLx database: {}", e);
Err(rocket)
}
},
None => Err(rocket),
}
}
#[launch]
fn rocket() -> _ {
let building_rocket = rocket::build()
.attach(Db::init())
.attach(AdHoc::try_on_ignite("SQLx Migrations", run_migrations))
.mount("/", routes![index])
.mount(
"/swagger",
make_swagger_ui(&SwaggerUIConfig {
url: "../api/openapi.json".to_owned(),
..Default::default()
}),
)
.mount(
"/rapidoc/",
make_rapidoc(&RapiDocConfig {
general: GeneralConfig {
spec_urls: vec![UrlObject::new("General", "../api/openapi.json")],
..Default::default()
},
hide_show: HideShowConfig {
allow_spec_url_load: false,
allow_spec_file_load: false,
..Default::default()
},
..Default::default()
}),
);
let openapi_settings = OpenApiSettings::default();
api::mount_endpoints(building_rocket, &openapi_settings)
}